LLVMFuzzerTestOneInput:
   41|  7.91k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   42|  7.91k|  if (size == 0) {
  ------------------
  |  Branch (42:7): [True: 0, False: 7.91k]
  ------------------
   43|      0|    return 0;
   44|      0|  }
   45|       |
   46|  7.91k|  static std::shared_ptr<spdlog::logger> my_logger;
   47|  7.91k|  if (!my_logger.get()) {
  ------------------
  |  Branch (47:7): [True: 1, False: 7.91k]
  ------------------
   48|      1|    my_logger = spdlog::basic_logger_mt("basic_logger", "/dev/null");
   49|      1|    spdlog::set_default_logger(my_logger);
   50|      1|  }
   51|       |
   52|  7.91k|  FuzzedDataProvider stream(data, size);
   53|       |
   54|  7.91k|  const unsigned long size_arg = stream.ConsumeIntegral<unsigned long>();
   55|  7.91k|  const unsigned long  int_arg = stream.ConsumeIntegral<unsigned long>();
   56|  7.91k|  const char flag = (char)(stream.ConsumeIntegral<char>());
   57|  7.91k|  const std::string pattern = stream.ConsumeRandomLengthString();
   58|  7.91k|  my_formatter_txt = stream.ConsumeRandomLengthString();
   59|  7.91k|  const std::string string_arg = stream.ConsumeRandomLengthString();
   60|  7.91k|  const std::string format_string = stream.ConsumeRemainingBytesAsString();
   61|       |
   62|  7.91k|  using spdlog::details::make_unique;
   63|  7.91k|  auto formatter = make_unique<spdlog::pattern_formatter>();
   64|  7.91k|  formatter->add_flag<my_formatter_flag>(flag).set_pattern(pattern);
   65|  7.91k|  spdlog::set_formatter(std::move(formatter));
   66|       |  
   67|  7.91k|  spdlog::info(format_string.c_str(), size_arg, int_arg, string_arg);
   68|       |
   69|  7.91k|  return 0;
   70|  7.91k|}
_ZN17my_formatter_flag6formatERKN6spdlog7details7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENS9_6detail9allocatorIcEEEE:
   31|  10.6k|    {
   32|  10.6k|        dest.append(my_formatter_txt.data(), my_formatter_txt.data() + my_formatter_txt.size());
   33|  10.6k|    }
_ZNK17my_formatter_flag5cloneEv:
   36|  47.7k|    {
   37|  47.7k|        return spdlog::details::make_unique<my_formatter_flag>();
   38|  47.7k|    }

_ZN6spdlog5level14to_string_viewENS0_10level_enumE:
   24|   174k|SPDLOG_INLINE const string_view_t &to_string_view(level::level_enum l) SPDLOG_NOEXCEPT {
   25|   174k|    return level_string_views[l];
   26|   174k|}
_ZN6spdlog5level14to_short_c_strENS0_10level_enumE:
   28|  35.2k|SPDLOG_INLINE const char *to_short_c_str(level::level_enum l) SPDLOG_NOEXCEPT {
   29|  35.2k|    return short_level_names[l];
   30|  35.2k|}

_ZN6spdlog19file_event_handlersC2Ev:
  332|      1|        : before_open(nullptr),
  333|      1|          after_open(nullptr),
  334|      1|          before_close(nullptr),
  335|      1|          after_close(nullptr) {}
_ZNK6spdlog10source_loc5emptyEv:
  324|   173k|    SPDLOG_CONSTEXPR bool empty() const SPDLOG_NOEXCEPT { return line <= 0; }
_ZN6spdlog7details23conditional_static_castIiiTnNSt3__19enable_ifIXsr3std7is_sameIT_T0_EE5valueEiE4typeELi0EEES4_S5_:
  367|  29.2k|constexpr T conditional_static_cast(U value) {
  368|  29.2k|    return value;
  369|  29.2k|}
_ZN6spdlog10source_locC2Ev:
  318|  7.91k|    SPDLOG_CONSTEXPR source_loc() = default;

_ZNK6spdlog7details10backtracer7enabledEv:
   41|  7.91k|SPDLOG_INLINE bool backtracer::enabled() const { return enabled_.load(std::memory_order_relaxed); }

_ZN6spdlog7details10backtracerC2Ev:
   24|      2|    backtracer() = default;

_ZN6spdlog7details10circular_qINS0_14log_msg_bufferEEC2Ev:
   26|      2|    circular_q() = default;

_ZN6spdlog7details13console_mutex5mutexEv:
   14|      1|    static mutex_t &mutex() {
   15|      1|        static mutex_t s_mutex;
   16|      1|        return s_mutex;
   17|      1|    }

_ZN6spdlog7details11file_helperC2ERKNS_19file_event_handlersE:
   22|      1|    : event_handlers_(event_handlers) {}
_ZN6spdlog7details11file_helper15set_buffer_sizeEm:
  106|      1|SPDLOG_INLINE void file_helper::set_buffer_size(size_t buffer_size) {
  107|       |    // Reopen to configure setvbuf before I/O while preserving pending output.
  108|      1|    if (custom_buffer_size_ == buffer_size) {
  ------------------
  |  Branch (108:9): [True: 1, False: 0]
  ------------------
  109|      1|        return;
  110|      1|    }
  111|      0|    if (fd_ != nullptr) {
  ------------------
  |  Branch (111:9): [True: 0, False: 0]
  ------------------
  112|      0|        flush();
  113|      0|    }
  114|      0|    custom_buffer_size_ = buffer_size;
  115|      0|    if (fd_ != nullptr) {
  ------------------
  |  Branch (115:9): [True: 0, False: 0]
  ------------------
  116|      0|        reopen(false);
  117|      0|    }
  118|      0|}
_ZN6spdlog7details11file_helper4openERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEb:
   26|      1|SPDLOG_INLINE void file_helper::open(const filename_t &fname, bool truncate) {
   27|      1|    close();
   28|      1|    filename_ = fname;
   29|       |
   30|      1|    auto *mode = SPDLOG_FILENAME_T("ab");
  ------------------
  |  |  140|      1|#define SPDLOG_FILENAME_T(s) s
  ------------------
   31|      1|    auto *trunc_mode = SPDLOG_FILENAME_T("wb");
  ------------------
  |  |  140|      1|#define SPDLOG_FILENAME_T(s) s
  ------------------
   32|       |
   33|      1|    if (event_handlers_.before_open) {
  ------------------
  |  Branch (33:9): [True: 0, False: 1]
  ------------------
   34|      0|        event_handlers_.before_open(filename_);
   35|      0|    }
   36|      1|    for (int tries = 0; tries < open_tries_; ++tries) {
  ------------------
  |  Branch (36:25): [True: 1, False: 0]
  ------------------
   37|       |        // create containing folder if not exists already.
   38|      1|        os::create_dir(os::dir_name(fname));
   39|      1|        if (truncate) {
  ------------------
  |  Branch (39:13): [True: 0, False: 1]
  ------------------
   40|       |            // Truncate by opening-and-closing a tmp file in "wb" mode, always
   41|       |            // opening the actual log-we-write-to in "ab" mode, since that
   42|       |            // interacts more politely with eternal processes that might
   43|       |            // rotate/truncate the file underneath us.
   44|      0|            std::FILE *tmp;
   45|      0|            if (os::fopen_s(&tmp, fname, trunc_mode)) {
  ------------------
  |  Branch (45:17): [True: 0, False: 0]
  ------------------
   46|      0|                continue;
   47|      0|            }
   48|      0|            std::fclose(tmp);
   49|      0|        }
   50|      1|        if (!os::fopen_s(&fd_, fname, mode)) {
  ------------------
  |  Branch (50:13): [True: 1, False: 0]
  ------------------
   51|      1|            if (custom_buffer_size_ > 0) {
  ------------------
  |  Branch (51:17): [True: 0, False: 1]
  ------------------
   52|      0|                custom_buf_.resize(custom_buffer_size_);
   53|      0|                if (std::setvbuf(fd_, custom_buf_.data(), _IOFBF, custom_buffer_size_) != 0) {
  ------------------
  |  Branch (53:21): [True: 0, False: 0]
  ------------------
   54|      0|                    throw_spdlog_ex("Failed to setvbuf on file " + os::filename_to_str(filename_), errno);
   55|      0|                }
   56|      0|            }
   57|      1|            if (event_handlers_.after_open) {
  ------------------
  |  Branch (57:17): [True: 0, False: 1]
  ------------------
   58|      0|                event_handlers_.after_open(filename_, fd_);
   59|      0|            }
   60|      1|            return;
   61|      1|        }
   62|       |
   63|      0|        details::os::sleep_for_millis(open_interval_);
   64|      0|    }
   65|       |
   66|      0|    throw_spdlog_ex("Failed opening file " + os::filename_to_str(filename_) + " for writing",
   67|       |                    errno);
   68|      0|}
_ZN6spdlog7details11file_helper5closeEv:
   89|      2|SPDLOG_INLINE void file_helper::close() {
   90|      2|    if (fd_ != nullptr) {
  ------------------
  |  Branch (90:9): [True: 1, False: 1]
  ------------------
   91|      1|        if (event_handlers_.before_close) {
  ------------------
  |  Branch (91:13): [True: 0, False: 1]
  ------------------
   92|      0|            event_handlers_.before_close(filename_, fd_);
   93|      0|        }
   94|       |
   95|      1|        std::fclose(fd_);
   96|      1|        fd_ = nullptr;
   97|      1|        custom_buf_.clear();
   98|      1|        custom_buf_.shrink_to_fit();
   99|       |
  100|      1|        if (event_handlers_.after_close) {
  ------------------
  |  Branch (100:13): [True: 0, False: 1]
  ------------------
  101|      0|            event_handlers_.after_close(filename_);
  102|      0|        }
  103|      1|    }
  104|      2|}
_ZN6spdlog7details11file_helperD2Ev:
   24|      1|SPDLOG_INLINE file_helper::~file_helper() { close(); }
_ZN6spdlog7details11file_helper5writeERKN3fmt3v1219basic_memory_bufferIcLm250ENS3_6detail9allocatorIcEEEE:
  124|  4.95k|SPDLOG_INLINE void file_helper::write(const memory_buf_t &buf) {
  125|  4.95k|    if (fd_ == nullptr) return;
  ------------------
  |  Branch (125:9): [True: 0, False: 4.95k]
  ------------------
  126|  4.95k|    size_t msg_size = buf.size();
  127|  4.95k|    auto data = buf.data();
  128|       |
  129|  4.95k|    if (!details::os::fwrite_bytes(data, msg_size, fd_)) {
  ------------------
  |  Branch (129:9): [True: 0, False: 4.95k]
  ------------------
  130|       |        throw_spdlog_ex("Failed writing to file " + os::filename_to_str(filename_), errno);
  131|      0|    }
  132|  4.95k|}

_ZN6spdlog7details10fmt_helper18append_string_viewEN3fmt3v1217basic_string_viewIcEERNS3_19basic_memory_bufferIcLm250ENS3_6detail9allocatorIcEEEE:
   21|  1.79M|inline void append_string_view(string_view_t view, memory_buf_t &dest) {
   22|  1.79M|    auto *buf_ptr = view.data();
   23|  1.79M|    dest.append(buf_ptr, buf_ptr + view.size());
   24|  1.79M|}
_ZN6spdlog7details10fmt_helper10append_intIiEEvT_RN3fmt3v1219basic_memory_bufferIcLm250ENS5_6detail9allocatorIcEEEE:
   42|   195k|inline void append_int(T n, memory_buf_t &dest) {
   43|   195k|    fmt::format_int i(n);
   44|   195k|    dest.append(i.data(), i.data() + i.size());
   45|   195k|}
_ZN6spdlog7details10fmt_helper4pad2EiRN3fmt3v1219basic_memory_bufferIcLm250ENS3_6detail9allocatorIcEEEE:
   84|  1.29M|inline void pad2(int n, memory_buf_t &dest) {
   85|  1.29M|    if (n >= 0 && n < 100)  // 0-99
  ------------------
  |  Branch (85:9): [True: 1.29M, False: 0]
  |  Branch (85:19): [True: 1.29M, False: 0]
  ------------------
   86|  1.29M|    {
   87|  1.29M|        dest.push_back(static_cast<char>('0' + n / 10));
   88|  1.29M|        dest.push_back(static_cast<char>('0' + n % 10));
   89|  1.29M|    } else  // unlikely, but just in case, let fmt deal with it
   90|      0|    {
   91|      0|        fmt_lib::format_to(std::back_inserter(dest), SPDLOG_FMT_STRING("{:02}"), n);
  ------------------
  |  |   55|      0|#define SPDLOG_FMT_STRING(format_string) FMT_STRING(format_string)
  |  |  ------------------
  |  |  |  | 4251|      0|#define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string)
  |  |  |  |  ------------------
  |  |  |  |  |  | 4226|      0|    [] {                                                                     \
  |  |  |  |  |  | 4227|      0|      /* Use the hidden visibility as a workaround for a GCC bug (#1973). */ \
  |  |  |  |  |  | 4228|      0|      /* Use a macro-like name to avoid shadowing warnings. */               \
  |  |  |  |  |  | 4229|      0|      struct FMT_VISIBILITY("hidden") FMT_COMPILE_STRING : base {            \
  |  |  |  |  |  | 4230|      0|        using char_type = fmt::remove_cvref_t<decltype(s[0])>;               \
  |  |  |  |  |  | 4231|      0|        constexpr explicit operator fmt::basic_string_view<char_type>()      \
  |  |  |  |  |  | 4232|      0|            const {                                                          \
  |  |  |  |  |  | 4233|      0|          return fmt::detail::compile_string_to_view<char_type>(s);          \
  |  |  |  |  |  | 4234|      0|        }                                                                    \
  |  |  |  |  |  | 4235|      0|      };                                                                     \
  |  |  |  |  |  | 4236|      0|      using FMT_STRING_VIEW =                                                \
  |  |  |  |  |  | 4237|      0|          fmt::basic_string_view<typename FMT_COMPILE_STRING::char_type>;    \
  |  |  |  |  |  | 4238|      0|      fmt::detail::ignore_unused(FMT_STRING_VIEW(FMT_COMPILE_STRING()));     \
  |  |  |  |  |  | 4239|      0|      return FMT_COMPILE_STRING();                                           \
  |  |  |  |  |  | 4240|      0|    }()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   92|      0|    }
   93|  1.29M|}
_ZN6spdlog7details10fmt_helper13time_fractionINSt3__16chrono8durationIxNS3_5ratioILl1ELl1000EEEEEEET_NS4_10time_pointINS4_12system_clockENS5_IxNS6_ILl1ELl1000000EEEEEEE:
  131|   159k|inline ToDuration time_fraction(log_clock::time_point tp) {
  132|   159k|    using std::chrono::duration_cast;
  133|   159k|    using std::chrono::seconds;
  134|   159k|    auto duration = tp.time_since_epoch();
  135|   159k|    auto secs = duration_cast<seconds>(duration);
  136|   159k|    return duration_cast<ToDuration>(duration) - duration_cast<ToDuration>(secs);
  137|   159k|}
_ZN6spdlog7details10fmt_helper4pad3IjEEvT_RN3fmt3v1219basic_memory_bufferIcLm250ENS5_6detail9allocatorIcEEEE:
  105|   159k|inline void pad3(T n, memory_buf_t &dest) {
  106|   159k|    static_assert(std::is_unsigned<T>::value, "pad3 must get unsigned T");
  107|   159k|    if (n < 1000) {
  ------------------
  |  Branch (107:9): [True: 159k, False: 0]
  ------------------
  108|   159k|        dest.push_back(static_cast<char>(n / 100 + '0'));
  109|   159k|        n = n % 100;
  110|   159k|        dest.push_back(static_cast<char>((n / 10) + '0'));
  111|   159k|        dest.push_back(static_cast<char>((n % 10) + '0'));
  112|   159k|    } else {
  113|      0|        append_int(n, dest);
  114|      0|    }
  115|   159k|}
_ZN6spdlog7details10fmt_helper10append_intIjEEvT_RN3fmt3v1219basic_memory_bufferIcLm250ENS5_6detail9allocatorIcEEEE:
   42|  29.2k|inline void append_int(T n, memory_buf_t &dest) {
   43|  29.2k|    fmt::format_int i(n);
   44|  29.2k|    dest.append(i.data(), i.data() + i.size());
   45|  29.2k|}
_ZN6spdlog7details10fmt_helper12count_digitsImEEjT_:
   66|   288k|inline unsigned int count_digits(T n) {
   67|   288k|    using count_type =
   68|   288k|        typename std::conditional<(sizeof(T) > sizeof(uint32_t)), uint64_t, uint32_t>::type;
   69|       |#ifdef SPDLOG_USE_STD_FORMAT
   70|       |    return count_digits_fallback(static_cast<count_type>(n));
   71|       |#else
   72|   288k|    return static_cast<unsigned int>(fmt::
   73|       |// fmt 7.0.0 renamed the internal namespace to detail.
   74|       |// See: https://github.com/fmtlib/fmt/issues/1538
   75|       |#if FMT_VERSION < 70000
   76|       |                                         internal
   77|       |#else
   78|   288k|                                         detail
   79|   288k|#endif
   80|   288k|                                     ::count_digits(static_cast<count_type>(n)));
   81|   288k|#endif
   82|   288k|}
_ZN6spdlog7details10fmt_helper10append_intImEEvT_RN3fmt3v1219basic_memory_bufferIcLm250ENS5_6detail9allocatorIcEEEE:
   42|   401k|inline void append_int(T n, memory_buf_t &dest) {
   43|   401k|    fmt::format_int i(n);
   44|   401k|    dest.append(i.data(), i.data() + i.size());
   45|   401k|}
_ZN6spdlog7details10fmt_helper12count_digitsIiEEjT_:
   66|  13.7k|inline unsigned int count_digits(T n) {
   67|  13.7k|    using count_type =
   68|  13.7k|        typename std::conditional<(sizeof(T) > sizeof(uint32_t)), uint64_t, uint32_t>::type;
   69|       |#ifdef SPDLOG_USE_STD_FORMAT
   70|       |    return count_digits_fallback(static_cast<count_type>(n));
   71|       |#else
   72|  13.7k|    return static_cast<unsigned int>(fmt::
   73|       |// fmt 7.0.0 renamed the internal namespace to detail.
   74|       |// See: https://github.com/fmtlib/fmt/issues/1538
   75|       |#if FMT_VERSION < 70000
   76|       |                                         internal
   77|       |#else
   78|  13.7k|                                         detail
   79|  13.7k|#endif
   80|  13.7k|                                     ::count_digits(static_cast<count_type>(n)));
   81|  13.7k|#endif
   82|  13.7k|}
_ZN6spdlog7details10fmt_helper13time_fractionINSt3__16chrono8durationIxNS3_5ratioILl1ELl1000000EEEEEEET_NS4_10time_pointINS4_12system_clockES8_EE:
  131|  18.8k|inline ToDuration time_fraction(log_clock::time_point tp) {
  132|  18.8k|    using std::chrono::duration_cast;
  133|  18.8k|    using std::chrono::seconds;
  134|  18.8k|    auto duration = tp.time_since_epoch();
  135|  18.8k|    auto secs = duration_cast<seconds>(duration);
  136|  18.8k|    return duration_cast<ToDuration>(duration) - duration_cast<ToDuration>(secs);
  137|  18.8k|}
_ZN6spdlog7details10fmt_helper4pad6ImEEvT_RN3fmt3v1219basic_memory_bufferIcLm250ENS5_6detail9allocatorIcEEEE:
  118|  18.8k|inline void pad6(T n, memory_buf_t &dest) {
  119|  18.8k|    pad_uint(n, 6, dest);
  120|  18.8k|}
_ZN6spdlog7details10fmt_helper8pad_uintImEEvT_jRN3fmt3v1219basic_memory_bufferIcLm250ENS5_6detail9allocatorIcEEEE:
   96|  31.3k|inline void pad_uint(T n, unsigned int width, memory_buf_t &dest) {
   97|  31.3k|    static_assert(std::is_unsigned<T>::value, "pad_uint must get unsigned T");
   98|  37.7k|    for (auto digits = count_digits(n); digits < width; digits++) {
  ------------------
  |  Branch (98:41): [True: 6.47k, False: 31.3k]
  ------------------
   99|  6.47k|        dest.push_back('0');
  100|  6.47k|    }
  101|  31.3k|    append_int(n, dest);
  102|  31.3k|}
_ZN6spdlog7details10fmt_helper13time_fractionINSt3__16chrono8durationIxNS3_5ratioILl1ELl1000000000EEEEEEET_NS4_10time_pointINS4_12system_clockENS5_IxNS6_ILl1ELl1000000EEEEEEE:
  131|  12.4k|inline ToDuration time_fraction(log_clock::time_point tp) {
  132|  12.4k|    using std::chrono::duration_cast;
  133|  12.4k|    using std::chrono::seconds;
  134|  12.4k|    auto duration = tp.time_since_epoch();
  135|  12.4k|    auto secs = duration_cast<seconds>(duration);
  136|  12.4k|    return duration_cast<ToDuration>(duration) - duration_cast<ToDuration>(secs);
  137|  12.4k|}
_ZN6spdlog7details10fmt_helper4pad9ImEEvT_RN3fmt3v1219basic_memory_bufferIcLm250ENS5_6detail9allocatorIcEEEE:
  123|  12.4k|inline void pad9(T n, memory_buf_t &dest) {
  124|  12.4k|    pad_uint(n, 9, dest);
  125|  12.4k|}
_ZN6spdlog7details10fmt_helper12count_digitsIxEEjT_:
   66|  2.18k|inline unsigned int count_digits(T n) {
   67|  2.18k|    using count_type =
   68|  2.18k|        typename std::conditional<(sizeof(T) > sizeof(uint32_t)), uint64_t, uint32_t>::type;
   69|       |#ifdef SPDLOG_USE_STD_FORMAT
   70|       |    return count_digits_fallback(static_cast<count_type>(n));
   71|       |#else
   72|  2.18k|    return static_cast<unsigned int>(fmt::
   73|       |// fmt 7.0.0 renamed the internal namespace to detail.
   74|       |// See: https://github.com/fmtlib/fmt/issues/1538
   75|       |#if FMT_VERSION < 70000
   76|       |                                         internal
   77|       |#else
   78|  2.18k|                                         detail
   79|  2.18k|#endif
   80|  2.18k|                                     ::count_digits(static_cast<count_type>(n)));
   81|  2.18k|#endif
   82|  2.18k|}
_ZN6spdlog7details10fmt_helper10append_intIxEEvT_RN3fmt3v1219basic_memory_bufferIcLm250ENS5_6detail9allocatorIcEEEE:
   42|  18.9k|inline void append_int(T n, memory_buf_t &dest) {
   43|  18.9k|    fmt::format_int i(n);
   44|  18.9k|    dest.append(i.data(), i.data() + i.size());
   45|  18.9k|}
_ZN6spdlog7details10fmt_helper12count_digitsIjEEjT_:
   66|    895|inline unsigned int count_digits(T n) {
   67|    895|    using count_type =
   68|    895|        typename std::conditional<(sizeof(T) > sizeof(uint32_t)), uint64_t, uint32_t>::type;
   69|       |#ifdef SPDLOG_USE_STD_FORMAT
   70|       |    return count_digits_fallback(static_cast<count_type>(n));
   71|       |#else
   72|    895|    return static_cast<unsigned int>(fmt::
   73|       |// fmt 7.0.0 renamed the internal namespace to detail.
   74|       |// See: https://github.com/fmtlib/fmt/issues/1538
   75|       |#if FMT_VERSION < 70000
   76|       |                                         internal
   77|       |#else
   78|    895|                                         detail
   79|    895|#endif
   80|    895|                                     ::count_digits(static_cast<count_type>(n)));
   81|    895|#endif
   82|    895|}

_ZN6spdlog7details7log_msgC2ENS_10source_locEN3fmt3v1217basic_string_viewIcEENS_5level10level_enumES6_:
   36|  4.95k|    : log_msg(os::now(), loc, a_logger_name, lvl, msg) {}
_ZN6spdlog7details7log_msgC2ENSt3__16chrono10time_pointINS3_12system_clockENS3_8durationIxNS2_5ratioILl1ELl1000000EEEEEEENS_10source_locEN3fmt3v1217basic_string_viewIcEENS_5level10level_enumESF_:
   20|  4.95k|    : logger_name(a_logger_name),
   21|  4.95k|      level(lvl),
   22|  4.95k|      time(log_time)
   23|       |#ifndef SPDLOG_NO_THREAD_ID
   24|       |      ,
   25|  4.95k|      thread_id(os::thread_id())
   26|       |#endif
   27|       |      ,
   28|  4.95k|      source(loc),
   29|  4.95k|      payload(msg) {
   30|  4.95k|}

_ZN6spdlog7details2os11in_terminalEP8_IO_FILE:
  399|      1|SPDLOG_INLINE bool in_terminal(FILE *file) SPDLOG_NOEXCEPT {
  400|       |#ifdef _WIN32
  401|       |    return ::_isatty(_fileno(file)) != 0;
  402|       |#else
  403|      1|    return ::isatty(fileno(file)) != 0;
  404|      1|#endif
  405|      1|}
_ZN6spdlog7details2os12fwrite_bytesEPKvmP8_IO_FILE:
  563|  4.95k|SPDLOG_INLINE bool fwrite_bytes(const void *ptr, const size_t n_bytes, FILE *fp) {
  564|       |#if defined(_WIN32) && defined(SPDLOG_FWRITE_UNLOCKED)
  565|       |    return _fwrite_nolock(ptr, 1, n_bytes, fp) == n_bytes;
  566|       |#elif defined(SPDLOG_FWRITE_UNLOCKED)
  567|       |    return ::fwrite_unlocked(ptr, 1, n_bytes, fp) == n_bytes;
  568|       |#else
  569|  4.95k|    return std::fwrite(ptr, 1, n_bytes, fp) == n_bytes;
  570|  4.95k|#endif
  571|  4.95k|}
_ZN6spdlog7details2os18utc_minutes_offsetERK2tm:
  268|  26.9k|SPDLOG_INLINE int utc_minutes_offset(const std::tm &tm) {
  269|  26.9k|    return static_cast<int>(tm.tm_gmtoff / 60);
  270|  26.9k|}
_ZN6spdlog7details2os3pidEv:
  358|  29.2k|SPDLOG_INLINE int pid() SPDLOG_NOEXCEPT {
  359|       |#ifdef _WIN32
  360|       |    return conditional_static_cast<int>(::GetCurrentProcessId());
  361|       |#else
  362|  29.2k|    return conditional_static_cast<int>(::getpid());
  363|  29.2k|#endif
  364|  29.2k|}
_ZN6spdlog7details2os9localtimeERKl:
   87|  3.62k|SPDLOG_INLINE std::tm localtime(const std::time_t &time_tt) SPDLOG_NOEXCEPT {
   88|       |#ifdef _WIN32
   89|       |    std::tm tm;
   90|       |    ::localtime_s(&tm, &time_tt);
   91|       |#else
   92|  3.62k|    std::tm tm;
   93|  3.62k|    ::localtime_r(&time_tt, &tm);
   94|  3.62k|#endif
   95|  3.62k|    return tm;
   96|  3.62k|}
_ZN6spdlog7details2os10create_dirERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  485|      1|SPDLOG_INLINE bool create_dir(const filename_t &path) {
  486|      1|    if (path_exists(path)) {
  ------------------
  |  Branch (486:9): [True: 1, False: 0]
  ------------------
  487|      1|        return true;
  488|      1|    }
  489|       |
  490|      0|    if (path.empty()) {
  ------------------
  |  Branch (490:9): [True: 0, False: 0]
  ------------------
  491|      0|        return false;
  492|      0|    }
  493|       |
  494|      0|    size_t search_offset = 0;
  495|      0|    do {
  496|      0|        auto token_pos = path.find_first_of(folder_seps_filename, search_offset);
  497|       |        // treat the entire path as a folder if no folder separator not found
  498|      0|        if (token_pos == filename_t::npos) {
  ------------------
  |  Branch (498:13): [True: 0, False: 0]
  ------------------
  499|      0|            token_pos = path.size();
  500|      0|        }
  501|       |
  502|      0|        auto subdir = path.substr(0, token_pos);
  503|       |#ifdef _WIN32
  504|       |        // if subdir is just a drive letter, add a slash e.g. "c:"=>"c:\",
  505|       |        // otherwise path_exists(subdir) returns false (issue #3079)
  506|       |        const bool is_drive = subdir.length() == 2 && subdir[1] == ':';
  507|       |        if (is_drive) {
  508|       |            subdir += '\\';
  509|       |            token_pos++;
  510|       |        }
  511|       |#endif
  512|       |
  513|      0|        if (!subdir.empty() && !path_exists(subdir) && !mkdir_(subdir)) {
  ------------------
  |  Branch (513:13): [True: 0, False: 0]
  |  Branch (513:32): [True: 0, False: 0]
  |  Branch (513:56): [True: 0, False: 0]
  ------------------
  514|      0|                if (errno != EEXIST) {
  ------------------
  |  Branch (514:21): [True: 0, False: 0]
  ------------------
  515|      0|                        return false;  // return error if failed creating dir
  516|      0|                }
  517|      0|    }
  518|      0|        search_offset = token_pos + 1;
  519|      0|    } while (search_offset < path.size());
  ------------------
  |  Branch (519:14): [True: 0, False: 0]
  ------------------
  520|       |
  521|      0|    return true;
  522|      0|}
_ZN6spdlog7details2os11path_existsERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  180|      1|SPDLOG_INLINE bool path_exists(const filename_t &filename) SPDLOG_NOEXCEPT {
  181|       |#ifdef _WIN32
  182|       |    struct _stat buffer;
  183|       |#ifdef SPDLOG_WCHAR_FILENAMES
  184|       |    return (::_wstat(filename.c_str(), &buffer) == 0);
  185|       |#else
  186|       |    return (::_stat(filename.c_str(), &buffer) == 0);
  187|       |#endif
  188|       |#else  // common linux/unix all have the stat system call
  189|      1|    struct stat buffer;
  190|      1|    return (::stat(filename.c_str(), &buffer) == 0);
  191|      1|#endif
  192|      1|}
_ZN6spdlog7details2os8dir_nameERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  529|      1|SPDLOG_INLINE filename_t dir_name(const filename_t &path) {
  530|      1|    auto pos = path.find_last_of(folder_seps_filename);
  531|      1|    return pos != filename_t::npos ? path.substr(0, pos) : filename_t{};
  ------------------
  |  Branch (531:12): [True: 1, False: 0]
  ------------------
  532|      1|}
_ZN6spdlog7details2os7fopen_sEPP8_IO_FILERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEESD_:
  120|      1|SPDLOG_INLINE bool fopen_s(FILE **fp, const filename_t &filename, const filename_t &mode) {
  121|       |#ifdef _WIN32
  122|       |#ifdef SPDLOG_WCHAR_FILENAMES
  123|       |    *fp = ::_wfsopen((filename.c_str()), mode.c_str(), _SH_DENYNO);
  124|       |#else
  125|       |    *fp = ::_fsopen((filename.c_str()), mode.c_str(), _SH_DENYNO);
  126|       |#endif
  127|       |#if defined(SPDLOG_PREVENT_CHILD_FD)
  128|       |    if (*fp != nullptr) {
  129|       |        auto file_handle = reinterpret_cast<HANDLE>(_get_osfhandle(::_fileno(*fp)));
  130|       |        if (!::SetHandleInformation(file_handle, HANDLE_FLAG_INHERIT, 0)) {
  131|       |            ::fclose(*fp);
  132|       |            *fp = nullptr;
  133|       |        }
  134|       |    }
  135|       |#endif
  136|       |#else  // unix
  137|       |#if defined(SPDLOG_PREVENT_CHILD_FD)
  138|       |    const int mode_flag = mode == SPDLOG_FILENAME_T("ab") ? O_APPEND : O_TRUNC;
  139|       |    const int fd =
  140|       |        ::open((filename.c_str()), O_CREAT | O_WRONLY | O_CLOEXEC | mode_flag, mode_t(0644));
  141|       |    if (fd == -1) {
  142|       |        return true;
  143|       |    }
  144|       |    *fp = ::fdopen(fd, mode.c_str());
  145|       |    if (*fp == nullptr) {
  146|       |        ::close(fd);
  147|       |    }
  148|       |#else
  149|      1|    *fp = ::fopen((filename.c_str()), mode.c_str());
  150|      1|#endif
  151|      1|#endif
  152|       |
  153|      1|    return *fp == nullptr;
  154|      1|}
_ZN6spdlog7details2os3nowEv:
   75|  4.95k|SPDLOG_INLINE log_clock::time_point now() SPDLOG_NOEXCEPT {
   76|       |#if defined __linux__ && defined SPDLOG_CLOCK_COARSE
   77|       |    timespec ts;
   78|       |    ::clock_gettime(CLOCK_REALTIME_COARSE, &ts);
   79|       |    return std::chrono::time_point<log_clock, typename log_clock::duration>(
   80|       |        std::chrono::duration_cast<typename log_clock::duration>(
   81|       |            std::chrono::seconds(ts.tv_sec) + std::chrono::nanoseconds(ts.tv_nsec)));
   82|       |
   83|       |#else
   84|  4.95k|    return log_clock::now();
   85|  4.95k|#endif
   86|  4.95k|}
_ZN6spdlog7details2os9thread_idEv:
  328|  4.95k|SPDLOG_INLINE size_t thread_id() SPDLOG_NOEXCEPT {
  329|       |#if defined(SPDLOG_NO_TLS)
  330|       |    return _thread_id();
  331|       |#else  // cache thread id in tls
  332|  4.95k|    static thread_local const size_t tid = _thread_id();
  333|  4.95k|    return tid;
  334|  4.95k|#endif
  335|  4.95k|}
_ZN6spdlog7details2os10_thread_idEv:
  277|      1|SPDLOG_INLINE size_t _thread_id() SPDLOG_NOEXCEPT {
  278|       |#ifdef _WIN32
  279|       |    return static_cast<size_t>(::GetCurrentThreadId());
  280|       |#elif defined(__linux__)
  281|       |#if defined(__ANDROID__) && defined(__ANDROID_API__) && (__ANDROID_API__ < 21)
  282|       |#define SYS_gettid __NR_gettid
  283|       |#endif
  284|      1|    return static_cast<size_t>(::syscall(SYS_gettid));
  285|       |#elif defined(_AIX)
  286|       |    struct __pthrdsinfo buf;
  287|       |    int reg_size = 0;
  288|       |    pthread_t pt = pthread_self();
  289|       |    int retval = pthread_getthrds_np(&pt, PTHRDSINFO_QUERY_TID, &buf, sizeof(buf), NULL, &reg_size);
  290|       |    int tid = (!retval) ? buf.__pi_tid : 0;
  291|       |    return static_cast<size_t>(tid);
  292|       |#elif defined(__DragonFly__) || defined(__FreeBSD__)
  293|       |    return static_cast<size_t>(::pthread_getthreadid_np());
  294|       |#elif defined(__NetBSD__)
  295|       |    return static_cast<size_t>(::_lwp_self());
  296|       |#elif defined(__OpenBSD__)
  297|       |    return static_cast<size_t>(::getthrid());
  298|       |#elif defined(__sun)
  299|       |    return static_cast<size_t>(::thr_self());
  300|       |#elif __APPLE__
  301|       |    uint64_t tid;
  302|       |// There is no pthread_threadid_np prior to Mac OS X 10.6, and it is not supported on any PPC,
  303|       |// including 10.6.8 Rosetta. __POWERPC__ is Apple-specific define encompassing ppc and ppc64.
  304|       |#ifdef MAC_OS_X_VERSION_MAX_ALLOWED
  305|       |    {
  306|       |#if (MAC_OS_X_VERSION_MAX_ALLOWED < 1060) || defined(__POWERPC__)
  307|       |        tid = pthread_mach_thread_np(pthread_self());
  308|       |#elif MAC_OS_X_VERSION_MIN_REQUIRED < 1060
  309|       |        if (&pthread_threadid_np) {
  310|       |            pthread_threadid_np(nullptr, &tid);
  311|       |        } else {
  312|       |            tid = pthread_mach_thread_np(pthread_self());
  313|       |        }
  314|       |#else
  315|       |        pthread_threadid_np(nullptr, &tid);
  316|       |#endif
  317|       |    }
  318|       |#else
  319|       |    pthread_threadid_np(nullptr, &tid);
  320|       |#endif
  321|       |    return static_cast<size_t>(tid);
  322|       |#else  // Default to standard C++11 (other Unix)
  323|       |    return static_cast<size_t>(std::hash<std::thread::id>()(std::this_thread::get_id()));
  324|       |#endif
  325|      1|}

_ZN6spdlog7details8registry8instanceEv:
  241|  15.8k|SPDLOG_INLINE registry &registry::instance() {
  242|  15.8k|    static registry s_instance;
  243|  15.8k|    return s_instance;
  244|  15.8k|}
_ZN6spdlog7details8registryC2Ev:
   34|      1|    : formatter_(new pattern_formatter()) {
   35|      1|#ifndef SPDLOG_DISABLE_DEFAULT_LOGGER
   36|       |// create default logger (ansicolor_stdout_sink_mt or wincolor_stdout_sink_mt in windows).
   37|       |#ifdef _WIN32
   38|       |    auto color_sink = std::make_shared<sinks::wincolor_stdout_sink_mt>();
   39|       |#else
   40|      1|    auto color_sink = std::make_shared<sinks::ansicolor_stdout_sink_mt>();
   41|      1|#endif
   42|       |
   43|      1|    const char *default_logger_name = "";
   44|      1|    default_logger_ = std::make_shared<logger>(default_logger_name, std::move(color_sink));
   45|      1|    loggers_[default_logger_name] = default_logger_;
   46|       |
   47|      1|#endif  // SPDLOG_DISABLE_DEFAULT_LOGGER
   48|      1|}
_ZN6spdlog7details8registryD2Ev:
   50|      1|SPDLOG_INLINE registry::~registry() = default;
_ZN6spdlog7details8registry18set_default_loggerENSt3__110shared_ptrINS_6loggerEEE:
  105|      1|SPDLOG_INLINE void registry::set_default_logger(std::shared_ptr<logger> new_default_logger) {
  106|      1|    std::lock_guard<std::mutex> lock(logger_map_mutex_);
  107|      1|    if (new_default_logger != nullptr) {
  ------------------
  |  Branch (107:9): [True: 1, False: 0]
  ------------------
  108|      1|        loggers_[new_default_logger->name()] = new_default_logger;
  109|      1|    }
  110|      1|    default_logger_ = std::move(new_default_logger);
  111|      1|}
_ZN6spdlog7details8registry13set_formatterENSt3__110unique_ptrINS_9formatterENS2_14default_deleteIS4_EEEE:
  124|  7.91k|SPDLOG_INLINE void registry::set_formatter(std::unique_ptr<formatter> formatter) {
  125|  7.91k|    std::lock_guard<std::mutex> lock(logger_map_mutex_);
  126|  7.91k|    formatter_ = std::move(formatter);
  127|  15.8k|    for (auto &l : loggers_) {
  ------------------
  |  Branch (127:18): [True: 15.8k, False: 7.91k]
  ------------------
  128|  15.8k|        l.second->set_formatter(formatter_->clone());
  129|  15.8k|    }
  130|  7.91k|}
_ZN6spdlog7details8registry17initialize_loggerENSt3__110shared_ptrINS_6loggerEEE:
   62|      1|SPDLOG_INLINE void registry::initialize_logger(std::shared_ptr<logger> new_logger) {
   63|      1|    std::lock_guard<std::mutex> lock(logger_map_mutex_);
   64|      1|    new_logger->set_formatter(formatter_->clone());
   65|       |
   66|      1|    if (err_handler_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 1]
  ------------------
   67|      0|        new_logger->set_error_handler(err_handler_);
   68|      0|    }
   69|       |
   70|       |    // set new level according to previously configured level or default level
   71|      1|    auto it = log_levels_.find(new_logger->name());
   72|      1|    auto new_level = it != log_levels_.end() ? it->second : global_log_level_;
  ------------------
  |  Branch (72:22): [True: 0, False: 1]
  ------------------
   73|      1|    new_logger->set_level(new_level);
   74|       |
   75|      1|    new_logger->flush_on(flush_level_);
   76|       |
   77|      1|    if (backtrace_n_messages_ > 0) {
  ------------------
  |  Branch (77:9): [True: 0, False: 1]
  ------------------
   78|      0|        new_logger->enable_backtrace(backtrace_n_messages_);
   79|      0|    }
   80|       |
   81|      1|    if (automatic_registration_) {
  ------------------
  |  Branch (81:9): [True: 1, False: 0]
  ------------------
   82|      1|        register_logger_(std::move(new_logger));
   83|      1|    }
   84|      1|}
_ZN6spdlog7details8registry16register_logger_ENSt3__110shared_ptrINS_6loggerEEE:
  259|      1|SPDLOG_INLINE void registry::register_logger_(std::shared_ptr<logger> new_logger) {
  260|      1|    const auto &logger_name = new_logger->name();
  261|      1|    throw_if_exists_(logger_name);
  262|      1|    loggers_[logger_name] = std::move(new_logger);
  263|      1|}
_ZN6spdlog7details8registry16throw_if_exists_ERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  253|      1|SPDLOG_INLINE void registry::throw_if_exists_(const std::string &logger_name) {
  254|      1|    if (loggers_.find(logger_name) != loggers_.end()) {
  ------------------
  |  Branch (254:9): [True: 0, False: 1]
  ------------------
  255|      0|        throw_spdlog_ex("logger with name '" + logger_name + "' already exists");
  256|      0|    }
  257|      1|}
_ZN6spdlog7details8registry15get_default_rawEv:
  101|  7.91k|SPDLOG_INLINE logger *registry::get_default_raw() { return default_logger_.get(); }

_ZN6spdlog19synchronous_factory6createINS_5sinks15basic_file_sinkINSt3__15mutexEEEJRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERbRKNS_19file_event_handlersERmEEENS4_10shared_ptrINS_6loggerEEESC_DpOT0_:
   15|      1|    static std::shared_ptr<logger> create(std::string logger_name, SinkArgs &&...args) {
   16|      1|        auto sink = std::make_shared<Sink>(std::forward<SinkArgs>(args)...);
   17|      1|        auto new_logger = std::make_shared<logger>(std::move(logger_name), std::move(sink));
   18|      1|        details::registry::instance().initialize_logger(new_logger);
   19|      1|        return new_logger;
   20|      1|    }

_ZN3fmt3v126detail13ignore_unusedIJbEEEvDpRKT_:
  361|  17.5k|template <typename... T> FMT_CONSTEXPR void ignore_unused(const T&...) {}
_ZNK3fmt3v126detail6bufferIcE8capacityEv:
 1818|  30.8k|  constexpr auto capacity() const noexcept -> size_t { return capacity_; }
_ZN3fmt3v126detail6bufferIcE4dataEv:
 1821|   479k|  FMT_CONSTEXPR auto data() noexcept -> T* { return ptr_; }
_ZNK3fmt3v126detail6bufferIcE4sizeEv:
 1815|  28.4M|  constexpr auto size() const noexcept -> size_t { return size_; }
_ZN3fmt3v126detail6bufferIcEC2EPFvRS3_mEPcmm:
 1790|  28.4M|      : ptr_(p), size_(sz), capacity_(cap), grow_(grow) {}
_ZN3fmt3v126detail6bufferIcE3setEPcm:
 1796|   461k|  FMT_CONSTEXPR void set(T* buf_data, size_t buf_capacity) noexcept {
 1797|   461k|    ptr_ = buf_data;
 1798|   461k|    capacity_ = buf_capacity;
 1799|   461k|  }
_ZNK3fmt3v1217basic_string_viewIcE4dataEv:
  564|  66.9M|  constexpr auto data() const noexcept -> const Char* { return data_; }
_ZN3fmt3v126detail6bufferIcE6appendIcEEvPKT_S7_:
 1855|   837M|      append(const U* begin, const U* end) {
 1856|  1.64G|    while (begin != end) {
  ------------------
  |  Branch (1856:12): [True: 804M, False: 837M]
  ------------------
 1857|   804M|      auto size = size_;
 1858|   804M|      auto free_cap = capacity_ - size;
 1859|   804M|      auto count = to_unsigned(end - begin);
 1860|   804M|      if (free_cap < count) {
  ------------------
  |  Branch (1860:11): [True: 9.14k, False: 804M]
  ------------------
 1861|  9.14k|        grow_(*this, size + count);
 1862|  9.14k|        size = size_;
 1863|  9.14k|        free_cap = capacity_ - size;
 1864|  9.14k|        count = count < free_cap ? count : free_cap;
  ------------------
  |  Branch (1864:17): [True: 7.69k, False: 1.45k]
  ------------------
 1865|  9.14k|      }
 1866|       |      // A loop is faster than memcpy on small sizes.
 1867|   804M|      T* out = ptr_ + size;
 1868|   109G|      for (size_t i = 0; i < count; ++i) out[i] = begin[i];
  ------------------
  |  Branch (1868:26): [True: 108G, False: 804M]
  ------------------
 1869|   804M|      size_ += count;
 1870|   804M|      begin += count;
 1871|   804M|    }
 1872|   837M|  }
_ZN3fmt3v126detail11to_unsignedIlEENSt3__113make_unsignedIT_E4typeES5_:
  439|   994M|FMT_CONSTEXPR auto to_unsigned(Int value) -> make_unsigned_t<Int> {
  440|   994M|  FMT_ASSERT(std::is_unsigned<Int>::value || value >= 0, "negative value");
  ------------------
  |  |  395|  1.98G|    ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \
  |  |  ------------------
  |  |  |  Branch (395:7): [Folded, False: 994M]
  |  |  |  Branch (395:7): [True: 994M, False: 0]
  |  |  ------------------
  |  |  396|   994M|         ? (void)0                                                          \
  |  |  397|   994M|         : ::fmt::assert_fail(__FILE__, __LINE__, (message)))
  ------------------
  441|   994M|  return static_cast<make_unsigned_t<Int>>(value);
  442|   994M|}
_ZNK3fmt3v1217basic_string_viewIcE4sizeEv:
  567|   145M|  constexpr auto size() const noexcept -> size_t { return size_; }
_ZN3fmt3v1217basic_string_viewIcEC2INSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEETnNS4_9enable_ifIXaasr6detail18is_std_string_likeIT_EE5valuesr3std7is_sameINSC_10value_typeEcEE5valueEiE4typeELi0EEERKSC_:
  561|   729k|      : data_(s.data()), size_(s.size()) {}
_ZN3fmt3v1217basic_string_viewIcEC2EPKc:
  543|   352k|  FMT_CONSTEXPR20 basic_string_view(const Char* s) : data_(s) {
  544|   352k|#if FMT_HAS_BUILTIN(__builtin_strlen) || FMT_GCC_VERSION || FMT_CLANG_VERSION
  545|   352k|    if (std::is_same<Char, char>::value && !detail::is_constant_evaluated()) {
  ------------------
  |  Branch (545:9): [True: 0, Folded]
  |  Branch (545:44): [True: 0, Folded]
  ------------------
  546|   352k|      size_ = __builtin_strlen(detail::narrow(s));  // strlen is not constexpr.
  547|   352k|      return;
  548|   352k|    }
  549|      0|#endif
  550|      0|    size_t len = 0;
  551|      0|    while (*s++) ++len;
  ------------------
  |  Branch (551:12): [True: 0, False: 0]
  ------------------
  552|      0|    size_ = len;
  553|      0|  }
_ZN3fmt3v126detail6narrowEPKc:
  469|   352k|constexpr FMT_ALWAYS_INLINE auto narrow(const char* s) -> const char* {
  470|   352k|  return s;
  471|   352k|}
_ZN3fmt3v126detail6bufferIcE5clearEv:
 1825|   138k|  FMT_CONSTEXPR void clear() { size_ = 0; }
_ZN3fmt3v126detail6bufferIcE9push_backERKc:
 1842|  85.7G|  FMT_CONSTEXPR void push_back(const T& value) {
 1843|  85.7G|    try_reserve(size_ + 1);
 1844|  85.7G|    ptr_[size_++] = value;
 1845|  85.7G|  }
_ZN3fmt3v126detail6bufferIcE11try_reserveEm:
 1838|  85.7G|  FMT_CONSTEXPR void try_reserve(size_t new_capacity) {
 1839|  85.7G|    if (new_capacity > capacity_) grow_(*this, new_capacity);
  ------------------
  |  Branch (1839:9): [True: 8.39k, False: 85.7G]
  ------------------
 1840|  85.7G|  }
_ZN3fmt3v126detail11to_unsignedIiEENSt3__113make_unsignedIT_E4typeES5_:
  439|  13.9M|FMT_CONSTEXPR auto to_unsigned(Int value) -> make_unsigned_t<Int> {
  440|  13.9M|  FMT_ASSERT(std::is_unsigned<Int>::value || value >= 0, "negative value");
  ------------------
  |  |  395|  27.9M|    ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \
  |  |  ------------------
  |  |  |  Branch (395:7): [Folded, False: 13.9M]
  |  |  |  Branch (395:7): [True: 13.9M, False: 0]
  |  |  ------------------
  |  |  396|  13.9M|         ? (void)0                                                          \
  |  |  397|  13.9M|         : ::fmt::assert_fail(__FILE__, __LINE__, (message)))
  ------------------
  441|  13.9M|  return static_cast<make_unsigned_t<Int>>(value);
  442|  13.9M|}
_ZN3fmt3v1214basic_appenderIcEC2ERNS0_6detail6bufferIcEE:
 2491|  28.0M|  FMT_CONSTEXPR basic_appender(detail::buffer<T>& buf) : container(&buf) {}
_ZNK3fmt3v1217basic_format_argsINS0_7contextEE3getEi:
 2646|  42.9k|  FMT_CONSTEXPR auto get(int id) const -> format_arg {
 2647|  42.9k|    auto arg = format_arg();
 2648|  42.9k|    if (!is_packed()) {
  ------------------
  |  Branch (2648:9): [True: 0, False: 42.9k]
  ------------------
 2649|      0|      if (id < max_size()) arg = args_[id];
  ------------------
  |  Branch (2649:11): [True: 0, False: 0]
  ------------------
 2650|      0|      return arg;
 2651|      0|    }
 2652|  42.9k|    if (static_cast<unsigned>(id) >= detail::max_packed_args) return arg;
  ------------------
  |  Branch (2652:9): [True: 64, False: 42.8k]
  ------------------
 2653|  42.8k|    arg.type_ = type(id);
 2654|  42.8k|    if (arg.type_ != detail::type::none_type) arg.value_ = values_[id];
  ------------------
  |  Branch (2654:9): [True: 42.8k, False: 48]
  ------------------
 2655|  42.8k|    return arg;
 2656|  42.9k|  }
_ZN3fmt3v1216basic_format_argINS0_7contextEEC2Ev:
 2526|  42.9k|  constexpr basic_format_arg() : type_(detail::type::none_type) {}
_ZN3fmt3v126detail5valueINS0_7contextEEC2Ev:
 2201|  42.9k|  constexpr FMT_INLINE value() : no_value() {}
_ZN3fmt3v129monostateC2Ev:
  335|  42.9k|  constexpr monostate() {}
_ZNK3fmt3v1217basic_format_argsINS0_7contextEE9is_packedEv:
 2602|  42.9k|  constexpr auto is_packed() const -> bool {
 2603|  42.9k|    return (desc_ & detail::is_unpacked_bit) == 0;
 2604|  42.9k|  }
_ZNK3fmt3v1217basic_format_argsINS0_7contextEE4typeEi:
 2609|  42.8k|  FMT_CONSTEXPR auto type(int index) const -> detail::type {
 2610|  42.8k|    int shift = index * detail::packed_arg_bits;
 2611|  42.8k|    unsigned mask = (1 << detail::packed_arg_bits) - 1;
 2612|  42.8k|    return static_cast<detail::type>((desc_ >> shift) & mask);
 2613|  42.8k|  }
_ZNK3fmt3v1216basic_format_argINS0_7contextEE5visitINS0_6detail21default_arg_formatterIcEEEEDTclfp_Li0EEEOT_:
 2544|  4.81k|  FMT_CONSTEXPR FMT_INLINE auto visit(Visitor&& vis) const -> decltype(vis(0)) {
 2545|  4.81k|    using detail::map;
 2546|  4.81k|    switch (type_) {
  ------------------
  |  Branch (2546:13): [True: 4.81k, False: 0]
  ------------------
 2547|     29|    case detail::type::none_type:        break;
  ------------------
  |  Branch (2547:5): [True: 29, False: 4.78k]
  ------------------
 2548|      0|    case detail::type::int_type:         return vis(value_.int_value);
  ------------------
  |  Branch (2548:5): [True: 0, False: 4.81k]
  ------------------
 2549|      0|    case detail::type::uint_type:        return vis(value_.uint_value);
  ------------------
  |  Branch (2549:5): [True: 0, False: 4.81k]
  ------------------
 2550|      0|    case detail::type::long_long_type:   return vis(value_.long_long_value);
  ------------------
  |  Branch (2550:5): [True: 0, False: 4.81k]
  ------------------
 2551|  3.29k|    case detail::type::ulong_long_type:  return vis(value_.ulong_long_value);
  ------------------
  |  Branch (2551:5): [True: 3.29k, False: 1.52k]
  ------------------
 2552|      0|    case detail::type::int128_type:      return vis(map(value_.int128_value));
  ------------------
  |  Branch (2552:5): [True: 0, False: 4.81k]
  ------------------
 2553|      0|    case detail::type::uint128_type:     return vis(map(value_.uint128_value));
  ------------------
  |  Branch (2553:5): [True: 0, False: 4.81k]
  ------------------
 2554|      0|    case detail::type::bool_type:        return vis(value_.bool_value);
  ------------------
  |  Branch (2554:5): [True: 0, False: 4.81k]
  ------------------
 2555|      0|    case detail::type::char_type:        return vis(value_.char_value);
  ------------------
  |  Branch (2555:5): [True: 0, False: 4.81k]
  ------------------
 2556|      0|    case detail::type::float_type:       return vis(value_.float_value);
  ------------------
  |  Branch (2556:5): [True: 0, False: 4.81k]
  ------------------
 2557|      0|    case detail::type::double_type:      return vis(value_.double_value);
  ------------------
  |  Branch (2557:5): [True: 0, False: 4.81k]
  ------------------
 2558|      0|    case detail::type::long_double_type: return vis(value_.long_double_value);
  ------------------
  |  Branch (2558:5): [True: 0, False: 4.81k]
  ------------------
 2559|      0|    case detail::type::cstring_type:     return vis(value_.string.data);
  ------------------
  |  Branch (2559:5): [True: 0, False: 4.81k]
  ------------------
 2560|  1.49k|    case detail::type::string_type:      return vis(value_.string.str());
  ------------------
  |  Branch (2560:5): [True: 1.49k, False: 3.31k]
  ------------------
 2561|      0|    case detail::type::pointer_type:     return vis(value_.pointer);
  ------------------
  |  Branch (2561:5): [True: 0, False: 4.81k]
  ------------------
 2562|      0|    case detail::type::custom_type:      return vis(handle(value_.custom));
  ------------------
  |  Branch (2562:5): [True: 0, False: 4.81k]
  ------------------
 2563|  4.81k|    }
 2564|     29|    return vis(monostate());
 2565|  4.81k|  }
_ZN3fmt3v126detail13get_containerINS0_14basic_appenderIcEEEERNT_14container_typeES5_:
  503|   835M|    typename OutputIt::container_type& {
  504|   835M|  struct accessor : OutputIt {
  505|   835M|    FMT_CONSTEXPR20 accessor(OutputIt base) : OutputIt(base) {}
  506|   835M|    using OutputIt::container;
  507|   835M|  };
  508|   835M|  return *accessor(it).container;
  509|   835M|}
_ZZN3fmt3v126detail13get_containerINS0_14basic_appenderIcEEEERNT_14container_typeES5_EN8accessorC2ES4_:
  505|   835M|    FMT_CONSTEXPR20 accessor(OutputIt base) : OutputIt(base) {}
_ZN3fmt3v126detail6bufferIcE10try_resizeEm:
 1829|  9.13k|  FMT_CONSTEXPR void try_resize(size_t count) {
 1830|  9.13k|    try_reserve(count);
 1831|  9.13k|    size_ = min_of(count, capacity_);
 1832|  9.13k|  }
_ZN3fmt3v126min_ofImEET_S2_S2_:
  347|  9.13k|template <typename T> constexpr auto min_of(T a, T b) -> T {
  348|  9.13k|  return a < b ? a : b;
  ------------------
  |  Branch (348:10): [True: 9.12k, False: 10]
  ------------------
  349|  9.13k|}
_ZN3fmt3v1214basic_appenderIcEppEi:
 2499|  85.7G|  FMT_CONSTEXPR20 auto operator++(int) -> basic_appender { return *this; }
_ZN3fmt3v1214basic_appenderIcEdeEv:
 2497|  85.7G|  FMT_CONSTEXPR20 auto operator*() -> basic_appender& { return *this; }
_ZN3fmt3v1214basic_appenderIcEaSEc:
 2493|  85.7G|  FMT_CONSTEXPR20 auto operator=(T c) -> basic_appender& {
 2494|  85.7G|    container->push_back(c);
 2495|  85.7G|    return *this;
 2496|  85.7G|  }
_ZN3fmt3v126detail4copyIcPcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXaasr23is_back_insert_iteratorIT1_EE5valuesr41has_back_insert_iterator_container_appendIS8_T0_EE5valueEiE4typeELi0EEES8_S9_S9_S8_:
 2084|  53.1M|    -> OutputIt {
 2085|  53.1M|  get_container(out).append(begin, end);
 2086|  53.1M|  return out;
 2087|  53.1M|}
_ZNK3fmt3v1211basic_specs4typeEv:
  744|  37.4k|  constexpr auto type() const -> presentation_type {
  745|  37.4k|    return static_cast<presentation_type>(data_ & type_mask);
  746|  37.4k|  }
_ZNK3fmt3v1211basic_specs9localizedEv:
  792|  19.4k|  constexpr auto localized() const -> bool {
  793|  19.4k|    return (data_ & localized_mask) != 0;
  794|  19.4k|  }
_ZNK3fmt3v1216basic_format_argINS0_7contextEE5visitIRNS0_6detail10loc_writerIcEEEEDTclfp_Li0EEEOT_:
 2544|  5.40k|  FMT_CONSTEXPR FMT_INLINE auto visit(Visitor&& vis) const -> decltype(vis(0)) {
 2545|  5.40k|    using detail::map;
 2546|  5.40k|    switch (type_) {
  ------------------
  |  Branch (2546:13): [True: 5.40k, False: 0]
  ------------------
 2547|      0|    case detail::type::none_type:        break;
  ------------------
  |  Branch (2547:5): [True: 0, False: 5.40k]
  ------------------
 2548|      0|    case detail::type::int_type:         return vis(value_.int_value);
  ------------------
  |  Branch (2548:5): [True: 0, False: 5.40k]
  ------------------
 2549|      0|    case detail::type::uint_type:        return vis(value_.uint_value);
  ------------------
  |  Branch (2549:5): [True: 0, False: 5.40k]
  ------------------
 2550|      0|    case detail::type::long_long_type:   return vis(value_.long_long_value);
  ------------------
  |  Branch (2550:5): [True: 0, False: 5.40k]
  ------------------
 2551|  5.40k|    case detail::type::ulong_long_type:  return vis(value_.ulong_long_value);
  ------------------
  |  Branch (2551:5): [True: 5.40k, False: 0]
  ------------------
 2552|      0|    case detail::type::int128_type:      return vis(map(value_.int128_value));
  ------------------
  |  Branch (2552:5): [True: 0, False: 5.40k]
  ------------------
 2553|      0|    case detail::type::uint128_type:     return vis(map(value_.uint128_value));
  ------------------
  |  Branch (2553:5): [True: 0, False: 5.40k]
  ------------------
 2554|      0|    case detail::type::bool_type:        return vis(value_.bool_value);
  ------------------
  |  Branch (2554:5): [True: 0, False: 5.40k]
  ------------------
 2555|      0|    case detail::type::char_type:        return vis(value_.char_value);
  ------------------
  |  Branch (2555:5): [True: 0, False: 5.40k]
  ------------------
 2556|      0|    case detail::type::float_type:       return vis(value_.float_value);
  ------------------
  |  Branch (2556:5): [True: 0, False: 5.40k]
  ------------------
 2557|      0|    case detail::type::double_type:      return vis(value_.double_value);
  ------------------
  |  Branch (2557:5): [True: 0, False: 5.40k]
  ------------------
 2558|      0|    case detail::type::long_double_type: return vis(value_.long_double_value);
  ------------------
  |  Branch (2558:5): [True: 0, False: 5.40k]
  ------------------
 2559|      0|    case detail::type::cstring_type:     return vis(value_.string.data);
  ------------------
  |  Branch (2559:5): [True: 0, False: 5.40k]
  ------------------
 2560|      0|    case detail::type::string_type:      return vis(value_.string.str());
  ------------------
  |  Branch (2560:5): [True: 0, False: 5.40k]
  ------------------
 2561|      0|    case detail::type::pointer_type:     return vis(value_.pointer);
  ------------------
  |  Branch (2561:5): [True: 0, False: 5.40k]
  ------------------
 2562|      0|    case detail::type::custom_type:      return vis(handle(value_.custom));
  ------------------
  |  Branch (2562:5): [True: 0, False: 5.40k]
  ------------------
 2563|  5.40k|    }
 2564|      0|    return vis(monostate());
 2565|  5.40k|  }
_ZNK3fmt3v1211basic_specs3altEv:
  788|  10.2k|  constexpr auto alt() const -> bool { return (data_ & alternate_mask) != 0; }
_ZNK3fmt3v1211basic_specs5upperEv:
  785|  6.03k|  constexpr auto upper() const -> bool { return (data_ & uppercase_mask) != 0; }
_ZNK3fmt3v1211basic_specs5alignEv:
  751|  33.0k|  constexpr auto align() const -> align {
  752|  33.0k|    return static_cast<fmt::align>((data_ & align_mask) >> align_shift);
  753|  33.0k|  }
_ZNK3fmt3v1211basic_specs9fill_sizeEv:
  797|  32.9k|  constexpr auto fill_size() const -> size_t {
  798|  32.9k|    return (data_ & fill_size_mask) >> fill_size_shift;
  799|  32.9k|  }
_ZNK3fmt3v1211basic_specs9fill_unitIcEET_v:
  810|  6.89k|  template <typename Char> constexpr auto fill_unit() const -> Char {
  811|  6.89k|    using uchar = unsigned char;
  812|  6.89k|    return static_cast<Char>(static_cast<uchar>(fill_data_[0]) |
  813|  6.89k|                             (static_cast<uchar>(fill_data_[1]) << 8) |
  814|  6.89k|                             (static_cast<uchar>(fill_data_[2]) << 16));
  815|  6.89k|  }
_ZNK3fmt3v1211basic_specs4fillIcTnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEEPKS5_v:
  802|  1.18k|  constexpr auto fill() const -> const Char* {
  803|  1.18k|    return fill_data_;
  804|  1.18k|  }
_ZN3fmt3v126detail4copyIcPKcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXaasr23is_back_insert_iteratorIT1_EE5valuesr41has_back_insert_iterator_container_appendIS9_T0_EE5valueEiE4typeELi0EEES9_SA_SA_S9_:
 2084|   781M|    -> OutputIt {
 2085|   781M|  get_container(out).append(begin, end);
 2086|   781M|  return out;
 2087|   781M|}
_ZN3fmt3v126detail11to_unsignedImEENSt3__113make_unsignedIT_E4typeES5_:
  439|  81.8M|FMT_CONSTEXPR auto to_unsigned(Int value) -> make_unsigned_t<Int> {
  440|  81.8M|  FMT_ASSERT(std::is_unsigned<Int>::value || value >= 0, "negative value");
  ------------------
  |  |  395|  81.8M|    ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \
  |  |  ------------------
  |  |  |  Branch (395:7): [True: 81.8M, Folded]
  |  |  |  Branch (395:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  396|  81.8M|         ? (void)0                                                          \
  |  |  397|  81.8M|         : ::fmt::assert_fail(__FILE__, __LINE__, (message)))
  ------------------
  441|  81.8M|  return static_cast<make_unsigned_t<Int>>(value);
  442|  81.8M|}
_ZN3fmt3v1217basic_string_viewIcEC2EPKcm:
  535|   204M|      : data_(s), size_(count) {}
_ZNK3fmt3v1217basic_string_viewIcE5beginEv:
  569|   106M|  constexpr auto begin() const noexcept -> iterator { return data_; }
_ZNK3fmt3v1217basic_string_viewIcE3endEv:
  570|   182M|  constexpr auto end() const noexcept -> iterator { return data_ + size_; }
_ZN3fmt3v126detail6bufferIiE4dataEv:
 1821|  4.98k|  FMT_CONSTEXPR auto data() noexcept -> T* { return ptr_; }
_ZN3fmt3v126detail6bufferIiEC2EPFvRS3_mEPimm:
 1790|  4.98k|      : ptr_(p), size_(sz), capacity_(cap), grow_(grow) {}
_ZN3fmt3v126detail6bufferIiE3setEPim:
 1796|  4.98k|  FMT_CONSTEXPR void set(T* buf_data, size_t buf_capacity) noexcept {
 1797|  4.98k|    ptr_ = buf_data;
 1798|  4.98k|    capacity_ = buf_capacity;
 1799|  4.98k|  }
_ZN3fmt3v126detail6bufferIiE9push_backERKi:
 1842|  4.98k|  FMT_CONSTEXPR void push_back(const T& value) {
 1843|  4.98k|    try_reserve(size_ + 1);
 1844|  4.98k|    ptr_[size_++] = value;
 1845|  4.98k|  }
_ZN3fmt3v126detail6bufferIiE11try_reserveEm:
 1838|  4.98k|  FMT_CONSTEXPR void try_reserve(size_t new_capacity) {
 1839|  4.98k|    if (new_capacity > capacity_) grow_(*this, new_capacity);
  ------------------
  |  Branch (1839:9): [True: 0, False: 4.98k]
  ------------------
 1840|  4.98k|  }
_ZNK3fmt3v126detail6bufferIiE4sizeEv:
 1815|  4.98k|  constexpr auto size() const noexcept -> size_t { return size_; }
_ZN3fmt3v126detail6bufferIiEixIiEERiT_:
 1874|   115k|  template <typename Idx> FMT_CONSTEXPR auto operator[](Idx index) -> T& {
 1875|   115k|    return ptr_[index];
 1876|   115k|  }
_ZNK3fmt3v1217basic_string_viewIcEixEm:
  572|   120k|  constexpr auto operator[](size_t pos) const noexcept -> const Char& {
  573|   120k|    return data_[pos];
  574|   120k|  }
_ZNK3fmt3v1211basic_specs4signEv:
  778|  19.4k|  constexpr auto sign() const -> sign {
  779|  19.4k|    return static_cast<fmt::sign>((data_ & sign_mask) >> sign_shift);
  780|  19.4k|  }
_ZN3fmt3v1212format_specsC2Ev:
  850|  36.8k|  constexpr format_specs() : width(0), precision(-1) {}
_ZN3fmt3v1211basic_specs8set_fillEc:
  817|  1.87k|  FMT_CONSTEXPR void set_fill(char c) {
  818|  1.87k|    fill_data_[0] = c;
  819|  1.87k|    set_fill_size(1);
  820|  1.87k|  }
_ZN3fmt3v1211basic_specs13set_fill_sizeEm:
  738|  4.41k|  FMT_CONSTEXPR void set_fill_size(size_t size) {
  739|  4.41k|    data_ = (data_ & ~fill_size_mask) |
  740|  4.41k|            (static_cast<unsigned>(size) << fill_size_shift);
  741|  4.41k|  }
_ZN3fmt3v1211basic_specs7set_altEv:
  789|  5.94k|  FMT_CONSTEXPR void set_alt() { data_ |= alternate_mask; }
_ZNK3fmt3v126detail12string_valueIcE3strEv:
 2155|  18.2k|  auto str() const -> basic_string_view<Char> { return {data, size}; }
_ZN3fmt3v126detail19parse_format_stringIcNS1_14format_handlerIcEEEEvNS0_17basic_string_viewIT_EEOT0_:
 1657|  7.85k|                                       Handler&& handler) {
 1658|  7.85k|  auto begin = fmt.data(), end = begin + fmt.size();
 1659|  7.85k|  auto p = begin;
 1660|  5.81M|  while (p != end) {
  ------------------
  |  Branch (1660:10): [True: 5.80M, False: 7.69k]
  ------------------
 1661|  5.80M|    auto c = *p++;
 1662|  5.80M|    if (c == '{') {
  ------------------
  |  Branch (1662:9): [True: 43.3k, False: 5.76M]
  ------------------
 1663|  43.3k|      handler.on_text(begin, p - 1);
 1664|  43.3k|      begin = p = parse_replacement_field(p - 1, end, handler);
 1665|  5.76M|    } else if (c == '}') {
  ------------------
  |  Branch (1665:16): [True: 464, False: 5.76M]
  ------------------
 1666|    464|      if (p == end || *p != '}')
  ------------------
  |  Branch (1666:11): [True: 26, False: 438]
  |  Branch (1666:23): [True: 139, False: 299]
  ------------------
 1667|    165|        return handler.on_error("unmatched '}' in format string");
 1668|    299|      handler.on_text(begin, p);
 1669|    299|      begin = ++p;
 1670|    299|    }
 1671|  5.80M|  }
 1672|  7.69k|  handler.on_text(begin, end);
 1673|  7.69k|}
_ZNK3fmt3v127context3outEv:
 2713|  90.6k|  FMT_CONSTEXPR auto out() const -> iterator { return out_; }
_ZN3fmt3v126detail23parse_replacement_fieldIcRNS1_14format_handlerIcEEEEPKT_S8_S8_OT0_:
 1612|  43.3k|    -> const Char* {
 1613|  43.3k|  ++begin;
 1614|  43.3k|  if (begin == end) {
  ------------------
  |  Branch (1614:7): [True: 139, False: 43.2k]
  ------------------
 1615|    139|    handler.on_error("invalid format string");
 1616|    139|    return end;
 1617|    139|  }
 1618|  43.2k|  int arg_id = 0;
 1619|  43.2k|  switch (*begin) {
 1620|    211|  case '}':
  ------------------
  |  Branch (1620:3): [True: 211, False: 43.0k]
  ------------------
 1621|    211|    handler.on_replacement_field(handler.on_arg_id(), begin);
 1622|    211|    return begin + 1;
 1623|  1.03k|  case '{': handler.on_text(begin, begin + 1); return begin + 1;
  ------------------
  |  Branch (1623:3): [True: 1.03k, False: 42.2k]
  ------------------
 1624|  2.38k|  case ':': arg_id = handler.on_arg_id(); break;
  ------------------
  |  Branch (1624:3): [True: 2.38k, False: 40.8k]
  ------------------
 1625|  39.6k|  default:  {
  ------------------
  |  Branch (1625:3): [True: 39.6k, False: 3.63k]
  ------------------
 1626|  39.6k|    struct id_adapter {
 1627|  39.6k|      Handler& handler;
 1628|  39.6k|      int arg_id;
 1629|       |
 1630|  39.6k|      FMT_CONSTEXPR void on_index(int id) { arg_id = handler.on_arg_id(id); }
 1631|  39.6k|      FMT_CONSTEXPR void on_name(basic_string_view<Char> id) {
 1632|  39.6k|        arg_id = handler.on_arg_id(id);
 1633|  39.6k|      }
 1634|  39.6k|    } adapter = {handler, 0};
 1635|  39.6k|    begin = parse_arg_id(begin, end, adapter);
 1636|  39.6k|    arg_id = adapter.arg_id;
 1637|  39.6k|    Char c = begin != end ? *begin : Char();
  ------------------
  |  Branch (1637:14): [True: 39.1k, False: 496]
  ------------------
 1638|  39.6k|    if (c == '}') {
  ------------------
  |  Branch (1638:9): [True: 4.56k, False: 35.0k]
  ------------------
 1639|  4.56k|      handler.on_replacement_field(arg_id, begin);
 1640|  4.56k|      return begin + 1;
 1641|  4.56k|    }
 1642|  35.0k|    if (c != ':') {
  ------------------
  |  Branch (1642:9): [True: 0, False: 35.0k]
  ------------------
 1643|      0|      handler.on_error("missing '}' in format string");
 1644|      0|      return end;
 1645|      0|    }
 1646|  35.0k|    break;
 1647|  35.0k|  }
 1648|  43.2k|  }
 1649|  36.9k|  begin = handler.on_format_specs(arg_id, begin + 1, end);
 1650|  36.9k|  if (begin == end || *begin != '}')
  ------------------
  |  Branch (1650:7): [True: 1.75k, False: 35.1k]
  |  Branch (1650:23): [True: 314, False: 34.8k]
  ------------------
 1651|  1.38k|    return handler.on_error("unknown format specifier"), end;
 1652|  35.5k|  return begin + 1;
 1653|  36.9k|}
_ZNK3fmt3v127context3argEi:
 2703|  42.8k|  FMT_CONSTEXPR auto arg(int id) const -> format_arg { return args_.get(id); }
_ZN3fmt3v1213parse_contextIcE11next_arg_idEv:
  888|  2.90k|  FMT_CONSTEXPR auto next_arg_id() -> int {
  889|  2.90k|    if (next_arg_id_ < 0) {
  ------------------
  |  Branch (889:9): [True: 68, False: 2.83k]
  ------------------
  890|     68|      report_error("cannot switch from manual to automatic argument indexing");
  891|     68|      return 0;
  892|     68|    }
  893|  2.83k|    int id = next_arg_id_++;
  894|  2.83k|    do_check_arg_id(id);
  895|  2.83k|    return id;
  896|  2.90k|  }
_ZN3fmt3v1213parse_contextIcE15do_check_arg_idEi:
 2464|  42.9k|FMT_CONSTEXPR void parse_context<Char>::do_check_arg_id(int arg_id) {
 2465|       |  // Argument id is only checked at compile time during parsing because
 2466|       |  // formatting has its own validation.
 2467|  42.9k|  if (detail::is_constant_evaluated() && use_constexpr_cast) {
  ------------------
  |  Branch (2467:7): [Folded, False: 42.9k]
  |  Branch (2467:42): [True: 0, Folded]
  ------------------
 2468|      0|    auto ctx = static_cast<detail::compile_parse_context<Char>*>(this);
 2469|      0|    if (arg_id >= ctx->num_args()) report_error("argument not found");
  ------------------
  |  Branch (2469:9): [True: 0, False: 0]
  ------------------
 2470|      0|  }
 2471|  42.9k|}
_ZN3fmt3v126detail12parse_arg_idIcRZNS1_23parse_replacement_fieldIcRNS1_14format_handlerIcEEEEPKT_S9_S9_OT0_E10id_adapterEES9_S9_S9_SB_:
 1359|  39.6k|                                Handler&& handler) -> const Char* {
 1360|  39.6k|  Char c = *begin;
 1361|  39.6k|  if (c >= '0' && c <= '9') {
  ------------------
  |  Branch (1361:7): [True: 39.5k, False: 93]
  |  Branch (1361:19): [True: 39.3k, False: 149]
  ------------------
 1362|  39.3k|    int index = 0;
 1363|  39.3k|    if (c != '0')
  ------------------
  |  Branch (1363:9): [True: 25.7k, False: 13.6k]
  ------------------
 1364|  25.7k|      index = parse_nonnegative_int(begin, end, INT_MAX);
 1365|  13.6k|    else
 1366|  13.6k|      ++begin;
 1367|  39.3k|    if (begin == end || (*begin != '}' && *begin != ':'))
  ------------------
  |  Branch (1367:9): [True: 102, False: 39.2k]
  |  Branch (1367:26): [True: 34.7k, False: 4.57k]
  |  Branch (1367:43): [True: 140, False: 34.5k]
  ------------------
 1368|    242|      report_error("invalid format string");
 1369|  39.1k|    else
 1370|  39.1k|      handler.on_index(index);
 1371|  39.3k|    return begin;
 1372|  39.3k|  }
 1373|    242|  if (FMT_OPTIMIZE_SIZE > 1 || !is_name_start(c)) {
  ------------------
  |  |  290|    242|#  define FMT_OPTIMIZE_SIZE 0
  ------------------
  |  Branch (1373:7): [Folded, False: 242]
  |  Branch (1373:32): [True: 132, False: 110]
  ------------------
 1374|    132|    report_error("invalid format string");
 1375|    132|    return begin;
 1376|    132|  }
 1377|    110|  auto it = begin;
 1378|   353k|  do {
 1379|   353k|    ++it;
 1380|   353k|  } while (it != end && (is_name_start(*it) || ('0' <= *it && *it <= '9')));
  ------------------
  |  Branch (1380:12): [True: 353k, False: 56]
  |  Branch (1380:26): [True: 352k, False: 359]
  |  Branch (1380:49): [True: 337, False: 22]
  |  Branch (1380:63): [True: 305, False: 32]
  ------------------
 1381|    110|  handler.on_name({begin, to_unsigned(it - begin)});
 1382|    110|  return it;
 1383|    242|}
_ZN3fmt3v126detail21parse_nonnegative_intIcEEiRPKT_S5_i:
 1323|  47.1k|                                         int error_value) noexcept -> int {
 1324|  47.1k|  FMT_ASSERT(begin != end && '0' <= *begin && *begin <= '9', "");
  ------------------
  |  |  395|   188k|    ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \
  |  |  ------------------
  |  |  |  Branch (395:7): [True: 47.1k, False: 0]
  |  |  |  Branch (395:7): [True: 47.1k, False: 0]
  |  |  |  Branch (395:7): [True: 47.1k, False: 0]
  |  |  ------------------
  |  |  396|  47.1k|         ? (void)0                                                          \
  |  |  397|  47.1k|         : ::fmt::assert_fail(__FILE__, __LINE__, (message)))
  ------------------
 1325|  47.1k|  unsigned value = 0, prev = 0;
 1326|  47.1k|  auto p = begin;
 1327|   153k|  do {
 1328|   153k|    prev = value;
 1329|   153k|    value = value * 10 + unsigned(*p - '0');
 1330|   153k|    ++p;
 1331|   153k|  } while (p != end && '0' <= *p && *p <= '9');
  ------------------
  |  Branch (1331:12): [True: 152k, False: 443]
  |  Branch (1331:24): [True: 152k, False: 564]
  |  Branch (1331:37): [True: 105k, False: 46.1k]
  ------------------
 1332|  47.1k|  auto num_digits = p - begin;
 1333|  47.1k|  begin = p;
 1334|  47.1k|  int digits10 = static_cast<int>(sizeof(int) * CHAR_BIT * 3 / 10);
 1335|  47.1k|  if (num_digits <= digits10) return static_cast<int>(value);
  ------------------
  |  Branch (1335:7): [True: 46.9k, False: 281]
  ------------------
 1336|       |  // Check for overflow.
 1337|    281|  unsigned max = INT_MAX;
 1338|    281|  return num_digits == digits10 + 1 &&
  ------------------
  |  Branch (1338:10): [True: 250, False: 31]
  ------------------
 1339|    250|                 prev * 10ull + unsigned(p[-1] - '0') <= max
  ------------------
  |  Branch (1339:18): [True: 203, False: 47]
  ------------------
 1340|    281|             ? static_cast<int>(value)
 1341|    281|             : error_value;
 1342|  47.1k|}
_ZZN3fmt3v126detail23parse_replacement_fieldIcRNS1_14format_handlerIcEEEEPKT_S8_S8_OT0_EN10id_adapter8on_indexEi:
 1630|  39.1k|      FMT_CONSTEXPR void on_index(int id) { arg_id = handler.on_arg_id(id); }
_ZN3fmt3v1213parse_contextIcE12check_arg_idEi:
  900|  40.1k|  FMT_CONSTEXPR void check_arg_id(int id) {
  901|  40.1k|    if (next_arg_id_ > 0) {
  ------------------
  |  Branch (901:9): [True: 16, False: 40.0k]
  ------------------
  902|     16|      report_error("cannot switch from automatic to manual argument indexing");
  903|     16|      return;
  904|     16|    }
  905|  40.0k|    next_arg_id_ = -1;
  906|  40.0k|    do_check_arg_id(id);
  907|  40.0k|  }
_ZN3fmt3v126detail13is_name_startIcEEbT_:
 1353|   471k|template <typename Char> constexpr auto is_name_start(Char c) -> bool {
 1354|   471k|  return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '_';
  ------------------
  |  Branch (1354:11): [True: 469k, False: 2.39k]
  |  Branch (1354:23): [True: 469k, False: 27]
  |  Branch (1354:37): [True: 1.71k, False: 710]
  |  Branch (1354:49): [True: 1.08k, False: 631]
  |  Branch (1354:62): [True: 571, False: 770]
  ------------------
 1355|   471k|}
_ZZN3fmt3v126detail23parse_replacement_fieldIcRNS1_14format_handlerIcEEEEPKT_S8_S8_OT0_EN10id_adapter7on_nameENS0_17basic_string_viewIcEE:
 1631|    110|      FMT_CONSTEXPR void on_name(basic_string_view<Char> id) {
 1632|    110|        arg_id = handler.on_arg_id(id);
 1633|    110|      }
_ZN3fmt3v1213parse_contextIcE12check_arg_idENS0_17basic_string_viewIcEE:
  908|    196|  FMT_CONSTEXPR void check_arg_id(basic_string_view<Char>) {
  909|    196|    next_arg_id_ = -1;
  910|    196|  }
_ZNK3fmt3v127context6arg_idENS0_17basic_string_viewIcEE:
 2707|    110|  FMT_CONSTEXPR auto arg_id(string_view name) const -> int {
 2708|    110|    return args_.get_id(name);
 2709|    110|  }
_ZNK3fmt3v1217basic_format_argsINS0_7contextEE6get_idIcEEiNS0_17basic_string_viewIT_EE:
 2665|    112|  FMT_CONSTEXPR auto get_id(basic_string_view<Char> name) const -> int {
 2666|    112|    if (!has_named_args()) return -1;
  ------------------
  |  Branch (2666:9): [True: 112, False: 0]
  ------------------
 2667|      0|    const auto& named_args =
 2668|      0|        (is_packed() ? values_[-1] : args_[-1].value_).named_args;
  ------------------
  |  Branch (2668:10): [True: 0, False: 0]
  ------------------
 2669|      0|    for (size_t i = 0; i < named_args.size; ++i) {
  ------------------
  |  Branch (2669:24): [True: 0, False: 0]
  ------------------
 2670|      0|      if (named_args.data[i].name == name) return named_args.data[i].id;
  ------------------
  |  Branch (2670:11): [True: 0, False: 0]
  ------------------
 2671|      0|    }
 2672|      0|    return -1;
 2673|      0|  }
_ZNK3fmt3v1217basic_format_argsINS0_7contextEE14has_named_argsEv:
 2605|    112|  constexpr auto has_named_args() const -> bool {
 2606|    112|    return (desc_ & detail::has_named_args_bit) != 0;
 2607|    112|  }
_ZNK3fmt3v1216basic_format_argINS0_7contextEEcvbEv:
 2533|  38.1k|  constexpr explicit operator bool() const noexcept {
 2534|  38.1k|    return type_ != detail::type::none_type;
 2535|  38.1k|  }
_ZN3fmt3v1216basic_format_argINS0_7contextEE13format_customEPKcRNS0_13parse_contextIcEERS2_:
 2569|  36.8k|      -> bool {
 2570|  36.8k|    if (type_ != detail::type::custom_type) return false;
  ------------------
  |  Branch (2570:9): [True: 36.8k, False: 0]
  ------------------
 2571|      0|    parse_ctx.advance_to(parse_begin);
 2572|      0|    value_.custom.format(value_.custom.value, parse_ctx, ctx);
 2573|      0|    return true;
 2574|  36.8k|  }
_ZN3fmt3v126detail7arg_refIcEC2Ei:
 1290|  74.9k|  FMT_CONSTEXPR arg_ref(int idx = 0) : index(idx) {}
_ZN3fmt3v126detail18parse_format_specsIcEEPKT_S5_S5_RNS1_20dynamic_format_specsIS3_EERNS0_13parse_contextIS3_EENS1_4typeE:
 1474|  36.8k|    -> const Char* {
 1475|  36.8k|  auto c = '\0';
 1476|  36.8k|  if (end - begin > 1) {
  ------------------
  |  Branch (1476:7): [True: 36.3k, False: 542]
  ------------------
 1477|  36.3k|    auto next = to_ascii(begin[1]);
 1478|  36.3k|    c = parse_align(next) == align::none ? to_ascii(*begin) : '\0';
  ------------------
  |  Branch (1478:9): [True: 33.9k, False: 2.32k]
  ------------------
 1479|  36.3k|  } else {
 1480|    542|    if (begin == end) return begin;
  ------------------
  |  Branch (1480:9): [True: 138, False: 404]
  ------------------
 1481|    404|    c = to_ascii(*begin);
 1482|    404|  }
 1483|       |
 1484|  36.7k|  struct {
 1485|  36.7k|    state current_state = state::start;
 1486|  36.7k|    FMT_CONSTEXPR void operator()(state s, bool valid = true) {
 1487|  36.7k|      if (current_state >= s || !valid)
 1488|  36.7k|        report_error("invalid format specifier");
 1489|  36.7k|      current_state = s;
 1490|  36.7k|    }
 1491|  36.7k|  } enter_state;
 1492|       |
 1493|  36.7k|  using pres = presentation_type;
 1494|  36.7k|  constexpr auto integral_set = sint_set | uint_set | bool_set | char_set;
 1495|  36.7k|  struct {
 1496|  36.7k|    const Char*& begin;
 1497|  36.7k|    format_specs& specs;
 1498|  36.7k|    type arg_type;
 1499|       |
 1500|  36.7k|    FMT_CONSTEXPR auto operator()(pres pres_type, int set) -> const Char* {
 1501|  36.7k|      if (!in(arg_type, set)) report_error("invalid format specifier");
 1502|  36.7k|      specs.set_type(pres_type);
 1503|  36.7k|      return begin + 1;
 1504|  36.7k|    }
 1505|  36.7k|  } parse_presentation_type{begin, specs, arg_type};
 1506|       |
 1507|  78.2k|  for (;;) {
 1508|  78.2k|    switch (c) {
 1509|  2.69k|    case '<':
  ------------------
  |  Branch (1509:5): [True: 2.69k, False: 75.5k]
  ------------------
 1510|  2.94k|    case '>':
  ------------------
  |  Branch (1510:5): [True: 246, False: 77.9k]
  ------------------
 1511|  3.92k|    case '^':
  ------------------
  |  Branch (1511:5): [True: 983, False: 77.2k]
  ------------------
 1512|  3.92k|      enter_state(state::align);
 1513|  3.92k|      specs.set_align(parse_align(c));
 1514|  3.92k|      ++begin;
 1515|  3.92k|      break;
 1516|     14|    case '+':
  ------------------
  |  Branch (1516:5): [True: 14, False: 78.2k]
  ------------------
 1517|     18|    case ' ':
  ------------------
  |  Branch (1517:5): [True: 4, False: 78.2k]
  ------------------
 1518|     18|      specs.set_sign(c == ' ' ? sign::space : sign::plus);
  ------------------
  |  Branch (1518:22): [True: 4, False: 14]
  ------------------
 1519|     18|      FMT_FALLTHROUGH;
  ------------------
  |  |  181|     18|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
 1520|     22|    case '-':
  ------------------
  |  Branch (1520:5): [True: 4, False: 78.2k]
  ------------------
 1521|     22|      enter_state(state::sign, in(arg_type, sint_set | float_set));
 1522|     22|      ++begin;
 1523|     22|      break;
 1524|  5.95k|    case '#':
  ------------------
  |  Branch (1524:5): [True: 5.95k, False: 72.2k]
  ------------------
 1525|  5.95k|      enter_state(state::hash, is_arithmetic_type(arg_type));
 1526|  5.95k|      specs.set_alt();
 1527|  5.95k|      ++begin;
 1528|  5.95k|      break;
 1529|  2.11k|    case '0':
  ------------------
  |  Branch (1529:5): [True: 2.11k, False: 76.0k]
  ------------------
 1530|  2.11k|      enter_state(state::zero);
 1531|  2.11k|      if (!is_arithmetic_type(arg_type))
  ------------------
  |  Branch (1531:11): [True: 5, False: 2.11k]
  ------------------
 1532|      5|        report_error("format specifier requires numeric argument");
 1533|  2.11k|      if (specs.align() == align::none) {
  ------------------
  |  Branch (1533:11): [True: 1.87k, False: 245]
  ------------------
 1534|       |        // Ignore 0 if align is specified for compatibility with std::format.
 1535|  1.87k|        specs.set_align(align::numeric);
 1536|  1.87k|        specs.set_fill('0');
 1537|  1.87k|      }
 1538|  2.11k|      ++begin;
 1539|  2.11k|      break;
 1540|       |      // clang-format off
 1541|  8.46k|    case '1': case '2': case '3': case '4': case '5':
  ------------------
  |  Branch (1541:5): [True: 2.21k, False: 75.9k]
  |  Branch (1541:15): [True: 1.41k, False: 76.8k]
  |  Branch (1541:25): [True: 2.45k, False: 75.7k]
  |  Branch (1541:35): [True: 1.08k, False: 77.1k]
  |  Branch (1541:45): [True: 1.29k, False: 76.9k]
  ------------------
 1542|  19.6k|    case '6': case '7': case '8': case '9': case '{':
  ------------------
  |  Branch (1542:5): [True: 1.66k, False: 76.5k]
  |  Branch (1542:15): [True: 6.86k, False: 71.3k]
  |  Branch (1542:25): [True: 715, False: 77.4k]
  |  Branch (1542:35): [True: 828, False: 77.3k]
  |  Branch (1542:45): [True: 1.09k, False: 77.1k]
  ------------------
 1543|       |      // clang-format on
 1544|  19.6k|      enter_state(state::width);
 1545|  19.6k|      begin = parse_width(begin, end, specs, specs.width_ref, ctx);
 1546|  19.6k|      break;
 1547|  2.76k|    case '.':
  ------------------
  |  Branch (1547:5): [True: 2.76k, False: 75.4k]
  ------------------
 1548|  2.76k|      enter_state(state::precision,
 1549|  2.76k|                  in(arg_type, float_set | string_set | cstring_set));
 1550|  2.76k|      begin = parse_precision(begin, end, specs, specs.precision_ref, ctx);
 1551|  2.76k|      break;
 1552|  5.43k|    case 'L':
  ------------------
  |  Branch (1552:5): [True: 5.43k, False: 72.7k]
  ------------------
 1553|  5.43k|      enter_state(state::locale, is_arithmetic_type(arg_type));
 1554|  5.43k|      specs.set_localized();
 1555|  5.43k|      ++begin;
 1556|  5.43k|      break;
 1557|  1.03k|    case 'd': return parse_presentation_type(pres::dec, integral_set);
  ------------------
  |  Branch (1557:5): [True: 1.03k, False: 77.1k]
  ------------------
 1558|  1.56k|    case 'X': specs.set_upper(); FMT_FALLTHROUGH;
  ------------------
  |  |  181|  1.56k|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
  |  Branch (1558:5): [True: 1.56k, False: 76.6k]
  ------------------
 1559|  3.10k|    case 'x': return parse_presentation_type(pres::hex, integral_set);
  ------------------
  |  Branch (1559:5): [True: 1.54k, False: 76.6k]
  ------------------
 1560|  3.46k|    case 'o': return parse_presentation_type(pres::oct, integral_set);
  ------------------
  |  Branch (1560:5): [True: 3.46k, False: 74.7k]
  ------------------
 1561|    604|    case 'B': specs.set_upper(); FMT_FALLTHROUGH;
  ------------------
  |  |  181|    604|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
  |  Branch (1561:5): [True: 604, False: 77.6k]
  ------------------
 1562|  3.71k|    case 'b': return parse_presentation_type(pres::bin, integral_set);
  ------------------
  |  Branch (1562:5): [True: 3.11k, False: 75.1k]
  ------------------
 1563|      4|    case 'E': specs.set_upper(); FMT_FALLTHROUGH;
  ------------------
  |  |  181|      4|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
  |  Branch (1563:5): [True: 4, False: 78.2k]
  ------------------
 1564|      9|    case 'e': return parse_presentation_type(pres::exp, float_set);
  ------------------
  |  Branch (1564:5): [True: 5, False: 78.2k]
  ------------------
 1565|      1|    case 'F': specs.set_upper(); FMT_FALLTHROUGH;
  ------------------
  |  |  181|      1|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
  |  Branch (1565:5): [True: 1, False: 78.2k]
  ------------------
 1566|      2|    case 'f': return parse_presentation_type(pres::fixed, float_set);
  ------------------
  |  Branch (1566:5): [True: 1, False: 78.2k]
  ------------------
 1567|      3|    case 'G': specs.set_upper(); FMT_FALLTHROUGH;
  ------------------
  |  |  181|      3|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
  |  Branch (1567:5): [True: 3, False: 78.2k]
  ------------------
 1568|      7|    case 'g': return parse_presentation_type(pres::general, float_set);
  ------------------
  |  Branch (1568:5): [True: 4, False: 78.2k]
  ------------------
 1569|      2|    case 'A': specs.set_upper(); FMT_FALLTHROUGH;
  ------------------
  |  |  181|      2|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
  |  Branch (1569:5): [True: 2, False: 78.2k]
  ------------------
 1570|      4|    case 'a': return parse_presentation_type(pres::hexfloat, float_set);
  ------------------
  |  Branch (1570:5): [True: 2, False: 78.2k]
  ------------------
 1571|  1.21k|    case 'c':
  ------------------
  |  Branch (1571:5): [True: 1.21k, False: 76.9k]
  ------------------
 1572|  1.21k|      if (arg_type == type::bool_type) report_error("invalid format specifier");
  ------------------
  |  Branch (1572:11): [True: 0, False: 1.21k]
  ------------------
 1573|  1.21k|      return parse_presentation_type(pres::chr, integral_set);
 1574|    465|    case 's':
  ------------------
  |  Branch (1574:5): [True: 465, False: 77.7k]
  ------------------
 1575|    465|      return parse_presentation_type(pres::string,
 1576|    465|                                     bool_set | string_set | cstring_set);
 1577|     12|    case 'p':
  ------------------
  |  Branch (1577:5): [True: 12, False: 78.2k]
  ------------------
 1578|     12|      return parse_presentation_type(pres::pointer, pointer_set | cstring_set);
 1579|  11.6k|    case '?':
  ------------------
  |  Branch (1579:5): [True: 11.6k, False: 66.5k]
  ------------------
 1580|  11.6k|      return parse_presentation_type(pres::debug,
 1581|  11.6k|                                     char_set | string_set | cstring_set);
 1582|  10.3k|    case '}': return begin;
  ------------------
  |  Branch (1582:5): [True: 10.3k, False: 67.8k]
  ------------------
 1583|  3.30k|    default:  {
  ------------------
  |  Branch (1583:5): [True: 3.30k, False: 74.9k]
  ------------------
 1584|  3.30k|      if (*begin == '}') return begin;
  ------------------
  |  Branch (1584:11): [True: 645, False: 2.66k]
  ------------------
 1585|       |      // Parse fill and alignment.
 1586|  2.66k|      auto fill_end = begin + code_point_length(begin);
 1587|  2.66k|      if (end - fill_end <= 0) {
  ------------------
  |  Branch (1587:11): [True: 14, False: 2.64k]
  ------------------
 1588|     14|        report_error("invalid format specifier");
 1589|     14|        return begin;
 1590|     14|      }
 1591|  2.64k|      if (*begin == '{') {
  ------------------
  |  Branch (1591:11): [True: 1, False: 2.64k]
  ------------------
 1592|      1|        report_error("invalid fill character '{'");
 1593|      1|        return begin;
 1594|      1|      }
 1595|  2.64k|      auto alignment = parse_align(to_ascii(*fill_end));
 1596|  2.64k|      enter_state(state::align, alignment != align::none);
 1597|  2.64k|      specs.set_fill(
 1598|  2.64k|          basic_string_view<Char>(begin, to_unsigned(fill_end - begin)));
 1599|  2.64k|      specs.set_align(alignment);
 1600|  2.64k|      begin = fill_end + 1;
 1601|  2.64k|    }
 1602|  78.2k|    }
 1603|  42.0k|    if (begin == end) return begin;
  ------------------
  |  Branch (1603:9): [True: 519, False: 41.5k]
  ------------------
 1604|  41.5k|    c = to_ascii(*begin);
 1605|  41.5k|  }
 1606|  36.7k|}
_ZN3fmt3v126detail8to_asciiIcTnNSt3__19enable_ifIXsr3std11is_integralIT_EE5valueEiE4typeELi0EEEcS5_:
 1307|   114k|constexpr auto to_ascii(Char c) -> char {
 1308|   114k|  return c <= 0xff ? static_cast<char>(c) : '\0';
  ------------------
  |  Branch (1308:10): [True: 114k, False: 0]
  ------------------
 1309|   114k|}
_ZN3fmt3v126detail11parse_alignEc:
 1344|  42.8k|FMT_CONSTEXPR inline auto parse_align(char c) -> align {
 1345|  42.8k|  switch (c) {
  ------------------
  |  Branch (1345:11): [True: 8.78k, False: 34.0k]
  ------------------
 1346|  4.27k|  case '<': return align::left;
  ------------------
  |  Branch (1346:3): [True: 4.27k, False: 38.5k]
  ------------------
 1347|  2.71k|  case '>': return align::right;
  ------------------
  |  Branch (1347:3): [True: 2.71k, False: 40.1k]
  ------------------
 1348|  1.79k|  case '^': return align::center;
  ------------------
  |  Branch (1348:3): [True: 1.79k, False: 41.0k]
  ------------------
 1349|  42.8k|  }
 1350|  34.0k|  return align::none;
 1351|  42.8k|}
_ZZN3fmt3v126detail18parse_format_specsIcEEPKT_S5_S5_RNS1_20dynamic_format_specsIS3_EERNS0_13parse_contextIS3_EENS1_4typeEENUt_clENS1_5stateEb:
 1486|  42.4k|    FMT_CONSTEXPR void operator()(state s, bool valid = true) {
 1487|  42.4k|      if (current_state >= s || !valid)
  ------------------
  |  Branch (1487:11): [True: 113, False: 42.3k]
  |  Branch (1487:33): [True: 75, False: 42.2k]
  ------------------
 1488|    188|        report_error("invalid format specifier");
 1489|  42.4k|      current_state = s;
 1490|  42.4k|    }
_ZN3fmt3v1211basic_specs9set_alignENS0_5alignE:
  754|  8.32k|  FMT_CONSTEXPR void set_align(fmt::align a) {
  755|  8.32k|    data_ = (data_ & ~align_mask) | (static_cast<unsigned>(a) << align_shift);
  756|  8.32k|  }
_ZN3fmt3v1211basic_specs8set_signENS0_4signE:
  781|     18|  FMT_CONSTEXPR void set_sign(fmt::sign s) {
  782|     18|    data_ = (data_ & ~sign_mask) | (static_cast<unsigned>(s) << sign_shift);
  783|     18|  }
_ZN3fmt3v126detail2inENS1_4typeEi:
 1040|  27.4k|constexpr auto in(type t, int set) -> bool {
 1041|  27.4k|  return ((set >> static_cast<int>(t)) & 1) != 0;
 1042|  27.4k|}
_ZN3fmt3v126detail18is_arithmetic_typeENS1_4typeE:
 1035|  13.4k|constexpr auto is_arithmetic_type(type t) -> bool {
 1036|  13.4k|  return t > type::none_type && t <= type::last_numeric_type;
  ------------------
  |  Branch (1036:10): [True: 13.4k, False: 0]
  |  Branch (1036:33): [True: 13.4k, False: 17]
  ------------------
 1037|  13.4k|}
_ZN3fmt3v126detail11parse_widthIcEEPKT_S5_S5_RNS0_12format_specsERNS1_7arg_refIS3_EERNS0_13parse_contextIS3_EE:
 1445|  19.6k|                               parse_context<Char>& ctx) -> const Char* {
 1446|  19.6k|  auto result = parse_dynamic_spec(begin, end, specs.width, width_ref, ctx);
 1447|  19.6k|  specs.set_dynamic_width(result.kind);
 1448|  19.6k|  return result.end;
 1449|  19.6k|}
_ZN3fmt3v126detail18parse_dynamic_specIcEENS1_25parse_dynamic_spec_resultIT_EEPKS4_S7_RiRNS1_7arg_refIS4_EERNS0_13parse_contextIS4_EE:
 1413|  22.3k|    -> parse_dynamic_spec_result<Char> {
 1414|  22.3k|  FMT_ASSERT(begin != end, "");
  ------------------
  |  |  395|  22.3k|    ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \
  |  |  ------------------
  |  |  |  Branch (395:6): [True: 22.3k, False: 0]
  |  |  ------------------
  |  |  396|  22.3k|         ? (void)0                                                          \
  |  |  397|  22.3k|         : ::fmt::assert_fail(__FILE__, __LINE__, (message)))
  ------------------
 1415|  22.3k|  auto kind = arg_id_kind::none;
 1416|  22.3k|  if ('0' <= *begin && *begin <= '9') {
  ------------------
  |  Branch (1416:7): [True: 22.3k, False: 18]
  |  Branch (1416:24): [True: 20.8k, False: 1.47k]
  ------------------
 1417|  20.8k|    int val = parse_nonnegative_int(begin, end, -1);
 1418|  20.8k|    if (val == -1) report_error("number is too big");
  ------------------
  |  Branch (1418:9): [True: 33, False: 20.8k]
  ------------------
 1419|  20.8k|    value = val;
 1420|  20.8k|  } else {
 1421|  1.48k|    if (*begin == '{') {
  ------------------
  |  Branch (1421:9): [True: 1.45k, False: 29]
  ------------------
 1422|  1.45k|      ++begin;
 1423|  1.45k|      if (begin != end) {
  ------------------
  |  Branch (1423:11): [True: 1.45k, False: 2]
  ------------------
 1424|  1.45k|        Char c = *begin;
 1425|  1.45k|        if (c == '}' || c == ':') {
  ------------------
  |  Branch (1425:13): [True: 301, False: 1.15k]
  |  Branch (1425:25): [True: 6, False: 1.15k]
  ------------------
 1426|    307|          int id = ctx.next_arg_id();
 1427|    307|          ref = id;
 1428|    307|          kind = arg_id_kind::index;
 1429|    307|          ctx.check_dynamic_spec(id);
 1430|  1.15k|        } else {
 1431|  1.15k|          begin = parse_arg_id(begin, end,
 1432|  1.15k|                               dynamic_spec_handler<Char>{ctx, ref, kind});
 1433|  1.15k|        }
 1434|  1.45k|      }
 1435|  1.45k|      if (begin != end && *begin == '}') return {++begin, kind};
  ------------------
  |  Branch (1435:11): [True: 1.29k, False: 161]
  |  Branch (1435:27): [True: 1.25k, False: 40]
  ------------------
 1436|  1.45k|    }
 1437|    230|    report_error("invalid format string");
 1438|    230|  }
 1439|  21.1k|  return {begin, kind};
 1440|  22.3k|}
_ZN3fmt3v1213parse_contextIcE18check_dynamic_specEi:
 2474|  1.26k|FMT_CONSTEXPR void parse_context<Char>::check_dynamic_spec(int arg_id) {
 2475|  1.26k|  using detail::compile_parse_context;
 2476|  1.26k|  if (detail::is_constant_evaluated() && use_constexpr_cast)
  ------------------
  |  Branch (2476:7): [Folded, False: 1.26k]
  |  Branch (2476:42): [True: 0, Folded]
  ------------------
 2477|      0|    static_cast<compile_parse_context<Char>*>(this)->check_dynamic_spec(arg_id);
 2478|  1.26k|}
_ZN3fmt3v126detail12parse_arg_idIcNS1_20dynamic_spec_handlerIcEEEEPKT_S7_S7_OT0_:
 1359|  1.15k|                                Handler&& handler) -> const Char* {
 1360|  1.15k|  Char c = *begin;
 1361|  1.15k|  if (c >= '0' && c <= '9') {
  ------------------
  |  Branch (1361:7): [True: 1.13k, False: 15]
  |  Branch (1361:19): [True: 1.03k, False: 97]
  ------------------
 1362|  1.03k|    int index = 0;
 1363|  1.03k|    if (c != '0')
  ------------------
  |  Branch (1363:9): [True: 616, False: 422]
  ------------------
 1364|    616|      index = parse_nonnegative_int(begin, end, INT_MAX);
 1365|    422|    else
 1366|    422|      ++begin;
 1367|  1.03k|    if (begin == end || (*begin != '}' && *begin != ':'))
  ------------------
  |  Branch (1367:9): [True: 41, False: 997]
  |  Branch (1367:26): [True: 42, False: 955]
  |  Branch (1367:43): [True: 30, False: 12]
  ------------------
 1368|     71|      report_error("invalid format string");
 1369|    967|    else
 1370|    967|      handler.on_index(index);
 1371|  1.03k|    return begin;
 1372|  1.03k|  }
 1373|    112|  if (FMT_OPTIMIZE_SIZE > 1 || !is_name_start(c)) {
  ------------------
  |  |  290|    112|#  define FMT_OPTIMIZE_SIZE 0
  ------------------
  |  Branch (1373:7): [Folded, False: 112]
  |  Branch (1373:32): [True: 26, False: 86]
  ------------------
 1374|     26|    report_error("invalid format string");
 1375|     26|    return begin;
 1376|     26|  }
 1377|     86|  auto it = begin;
 1378|   118k|  do {
 1379|   118k|    ++it;
 1380|   118k|  } while (it != end && (is_name_start(*it) || ('0' <= *it && *it <= '9')));
  ------------------
  |  Branch (1380:12): [True: 118k, False: 52]
  |  Branch (1380:26): [True: 118k, False: 253]
  |  Branch (1380:49): [True: 236, False: 17]
  |  Branch (1380:63): [True: 219, False: 17]
  ------------------
 1381|     86|  handler.on_name({begin, to_unsigned(it - begin)});
 1382|     86|  return it;
 1383|    112|}
_ZN3fmt3v126detail20dynamic_spec_handlerIcE8on_indexEi:
 1390|    967|  FMT_CONSTEXPR void on_index(int id) {
 1391|    967|    ref = id;
 1392|    967|    kind = arg_id_kind::index;
 1393|    967|    ctx.check_arg_id(id);
 1394|    967|    ctx.check_dynamic_spec(id);
 1395|    967|  }
_ZN3fmt3v126detail20dynamic_spec_handlerIcE7on_nameENS0_17basic_string_viewIcEE:
 1396|     86|  FMT_CONSTEXPR void on_name(basic_string_view<Char> id) {
 1397|     86|    ref = id;
 1398|     86|    kind = arg_id_kind::name;
 1399|     86|    ctx.check_arg_id(id);
 1400|     86|  }
_ZN3fmt3v126detail7arg_refIcEC2ENS0_17basic_string_viewIcEE:
 1291|     86|  FMT_CONSTEXPR arg_ref(basic_string_view<Char> n) : name(n) {}
_ZN3fmt3v1211basic_specs17set_dynamic_widthENS0_11arg_id_kindE:
  761|  19.4k|  FMT_CONSTEXPR void set_dynamic_width(arg_id_kind w) {
  762|  19.4k|    data_ = (data_ & ~width_mask) | (static_cast<unsigned>(w) << width_shift);
  763|  19.4k|  }
_ZN3fmt3v126detail15parse_precisionIcEEPKT_S5_S5_RNS0_12format_specsERNS1_7arg_refIS3_EERNS0_13parse_contextIS3_EE:
 1455|  2.75k|                                   parse_context<Char>& ctx) -> const Char* {
 1456|  2.75k|  ++begin;
 1457|  2.75k|  if (begin == end) {
  ------------------
  |  Branch (1457:7): [True: 2, False: 2.74k]
  ------------------
 1458|      2|    report_error("invalid precision");
 1459|      2|    return begin;
 1460|      2|  }
 1461|  2.74k|  auto result =
 1462|  2.74k|      parse_dynamic_spec(begin, end, specs.precision, precision_ref, ctx);
 1463|  2.74k|  specs.set_dynamic_precision(result.kind);
 1464|  2.74k|  return result.end;
 1465|  2.75k|}
_ZN3fmt3v1211basic_specs21set_dynamic_precisionENS0_11arg_id_kindE:
  769|  2.68k|  FMT_CONSTEXPR void set_dynamic_precision(arg_id_kind p) {
  770|  2.68k|    data_ = (data_ & ~precision_mask) |
  771|  2.68k|            (static_cast<unsigned>(p) << precision_shift);
  772|  2.68k|  }
_ZN3fmt3v1211basic_specs13set_localizedEv:
  795|  5.42k|  FMT_CONSTEXPR void set_localized() { data_ |= localized_mask; }
_ZZN3fmt3v126detail18parse_format_specsIcEEPKT_S5_S5_RNS1_20dynamic_format_specsIS3_EERNS0_13parse_contextIS3_EENS1_4typeEENUt0_clENS0_17presentation_typeEi:
 1500|  24.6k|    FMT_CONSTEXPR auto operator()(pres pres_type, int set) -> const Char* {
 1501|  24.6k|      if (!in(arg_type, set)) report_error("invalid format specifier");
  ------------------
  |  Branch (1501:11): [True: 65, False: 24.6k]
  ------------------
 1502|  24.6k|      specs.set_type(pres_type);
 1503|  24.6k|      return begin + 1;
 1504|  24.6k|    }
_ZN3fmt3v1211basic_specs8set_typeENS0_17presentation_typeE:
  747|  24.6k|  FMT_CONSTEXPR void set_type(presentation_type t) {
  748|  24.6k|    data_ = (data_ & ~type_mask) | static_cast<unsigned>(t);
  749|  24.6k|  }
_ZN3fmt3v1211basic_specs9set_upperEv:
  786|  2.17k|  FMT_CONSTEXPR void set_upper() { data_ |= uppercase_mask; }
_ZN3fmt3v126detail17code_point_lengthIcEEiPKT_:
 1313|  2.66k|FMT_CONSTEXPR auto code_point_length(const Char* begin) -> int {
 1314|  2.66k|  if (const_check(sizeof(Char) != 1)) return 1;
  ------------------
  |  Branch (1314:7): [Folded, False: 2.66k]
  ------------------
 1315|  2.66k|  auto c = static_cast<unsigned char>(*begin);
 1316|  2.66k|  return static_cast<int>((0x3a55000000000000ull >> (2 * (c >> 3))) & 3) + 1;
 1317|  2.66k|}
_ZN3fmt3v1211basic_specs8set_fillIcEEvNS0_17basic_string_viewIT_EE:
  823|  2.54k|  FMT_CONSTEXPR void set_fill(basic_string_view<Char> s) {
  824|  2.54k|    auto size = s.size();
  825|  2.54k|    set_fill_size(size);
  826|  2.54k|    if (size == 1) {
  ------------------
  |  Branch (826:9): [True: 1.39k, False: 1.15k]
  ------------------
  827|  1.39k|      unsigned uchar = static_cast<detail::unsigned_char<Char>>(s[0]);
  828|  1.39k|      fill_data_[0] = static_cast<char>(uchar);
  829|  1.39k|      fill_data_[1] = static_cast<char>(uchar >> 8);
  830|  1.39k|      fill_data_[2] = static_cast<char>(uchar >> 16);
  831|  1.39k|      return;
  832|  1.39k|    }
  833|  1.15k|    FMT_ASSERT(size <= max_fill_size, "invalid fill");
  ------------------
  |  |  395|  1.15k|    ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \
  |  |  ------------------
  |  |  |  Branch (395:6): [True: 1.15k, False: 0]
  |  |  ------------------
  |  |  396|  1.15k|         ? (void)0                                                          \
  |  |  397|  1.15k|         : ::fmt::assert_fail(__FILE__, __LINE__, (message)))
  ------------------
  834|  4.40k|    for (size_t i = 0; i < size; ++i)
  ------------------
  |  Branch (834:24): [True: 3.25k, False: 1.15k]
  ------------------
  835|  3.25k|      fill_data_[i & 3] = static_cast<char>(s[i]);
  836|  1.15k|  }
_ZNK3fmt3v1216basic_format_argINS0_7contextEE4typeEv:
 2536|  36.8k|  auto type() const -> detail::type { return type_; }
_ZNK3fmt3v1211basic_specs7dynamicEv:
  774|  36.3k|  constexpr auto dynamic() const -> bool {
  775|  36.3k|    return (data_ & (width_mask | precision_mask)) != 0;
  776|  36.3k|  }
_ZNK3fmt3v127context3argENS0_17basic_string_viewIcEE:
 2704|      2|  inline auto arg(string_view name) const -> format_arg {
 2705|      2|    return args_.get(name);
 2706|      2|  }
_ZNK3fmt3v1217basic_format_argsINS0_7contextEE3getIcEENS0_16basic_format_argIS2_EENS0_17basic_string_viewIT_EE:
 2659|      2|  auto get(basic_string_view<Char> name) const -> format_arg {
 2660|      2|    int id = get_id(name);
 2661|      2|    return id >= 0 ? get(id) : format_arg();
  ------------------
  |  Branch (2661:12): [True: 0, False: 2]
  ------------------
 2662|      2|  }
_ZNK3fmt3v1216basic_format_argINS0_7contextEE5visitINS0_6detail19dynamic_spec_getterEEEDTclfp_Li0EEEOT_:
 2544|  1.21k|  FMT_CONSTEXPR FMT_INLINE auto visit(Visitor&& vis) const -> decltype(vis(0)) {
 2545|  1.21k|    using detail::map;
 2546|  1.21k|    switch (type_) {
  ------------------
  |  Branch (2546:13): [True: 1.21k, False: 0]
  ------------------
 2547|      0|    case detail::type::none_type:        break;
  ------------------
  |  Branch (2547:5): [True: 0, False: 1.21k]
  ------------------
 2548|      0|    case detail::type::int_type:         return vis(value_.int_value);
  ------------------
  |  Branch (2548:5): [True: 0, False: 1.21k]
  ------------------
 2549|      0|    case detail::type::uint_type:        return vis(value_.uint_value);
  ------------------
  |  Branch (2549:5): [True: 0, False: 1.21k]
  ------------------
 2550|      0|    case detail::type::long_long_type:   return vis(value_.long_long_value);
  ------------------
  |  Branch (2550:5): [True: 0, False: 1.21k]
  ------------------
 2551|  1.21k|    case detail::type::ulong_long_type:  return vis(value_.ulong_long_value);
  ------------------
  |  Branch (2551:5): [True: 1.21k, False: 3]
  ------------------
 2552|      0|    case detail::type::int128_type:      return vis(map(value_.int128_value));
  ------------------
  |  Branch (2552:5): [True: 0, False: 1.21k]
  ------------------
 2553|      0|    case detail::type::uint128_type:     return vis(map(value_.uint128_value));
  ------------------
  |  Branch (2553:5): [True: 0, False: 1.21k]
  ------------------
 2554|      0|    case detail::type::bool_type:        return vis(value_.bool_value);
  ------------------
  |  Branch (2554:5): [True: 0, False: 1.21k]
  ------------------
 2555|      0|    case detail::type::char_type:        return vis(value_.char_value);
  ------------------
  |  Branch (2555:5): [True: 0, False: 1.21k]
  ------------------
 2556|      0|    case detail::type::float_type:       return vis(value_.float_value);
  ------------------
  |  Branch (2556:5): [True: 0, False: 1.21k]
  ------------------
 2557|      0|    case detail::type::double_type:      return vis(value_.double_value);
  ------------------
  |  Branch (2557:5): [True: 0, False: 1.21k]
  ------------------
 2558|      0|    case detail::type::long_double_type: return vis(value_.long_double_value);
  ------------------
  |  Branch (2558:5): [True: 0, False: 1.21k]
  ------------------
 2559|      0|    case detail::type::cstring_type:     return vis(value_.string.data);
  ------------------
  |  Branch (2559:5): [True: 0, False: 1.21k]
  ------------------
 2560|      3|    case detail::type::string_type:      return vis(value_.string.str());
  ------------------
  |  Branch (2560:5): [True: 3, False: 1.21k]
  ------------------
 2561|      0|    case detail::type::pointer_type:     return vis(value_.pointer);
  ------------------
  |  Branch (2561:5): [True: 0, False: 1.21k]
  ------------------
 2562|      0|    case detail::type::custom_type:      return vis(handle(value_.custom));
  ------------------
  |  Branch (2562:5): [True: 0, False: 1.21k]
  ------------------
 2563|  1.21k|    }
 2564|      0|    return vis(monostate());
 2565|  1.21k|  }
_ZNK3fmt3v1211basic_specs13dynamic_widthEv:
  758|  1.23k|  constexpr auto dynamic_width() const -> arg_id_kind {
  759|  1.23k|    return static_cast<arg_id_kind>((data_ & width_mask) >> width_shift);
  760|  1.23k|  }
_ZNK3fmt3v1211basic_specs17dynamic_precisionEv:
  765|  1.16k|  FMT_CONSTEXPR auto dynamic_precision() const -> arg_id_kind {
  766|  1.16k|    return static_cast<arg_id_kind>((data_ & precision_mask) >>
  767|  1.16k|                                    precision_shift);
  768|  1.16k|  }
_ZNK3fmt3v1216basic_format_argINS0_7contextEE5visitINS0_6detail13arg_formatterIcEEEEDTclfp_Li0EEEOT_:
 2544|  36.2k|  FMT_CONSTEXPR FMT_INLINE auto visit(Visitor&& vis) const -> decltype(vis(0)) {
 2545|  36.2k|    using detail::map;
 2546|  36.2k|    switch (type_) {
  ------------------
  |  Branch (2546:13): [True: 36.2k, False: 0]
  ------------------
 2547|      0|    case detail::type::none_type:        break;
  ------------------
  |  Branch (2547:5): [True: 0, False: 36.2k]
  ------------------
 2548|      0|    case detail::type::int_type:         return vis(value_.int_value);
  ------------------
  |  Branch (2548:5): [True: 0, False: 36.2k]
  ------------------
 2549|      0|    case detail::type::uint_type:        return vis(value_.uint_value);
  ------------------
  |  Branch (2549:5): [True: 0, False: 36.2k]
  ------------------
 2550|      0|    case detail::type::long_long_type:   return vis(value_.long_long_value);
  ------------------
  |  Branch (2550:5): [True: 0, False: 36.2k]
  ------------------
 2551|  19.4k|    case detail::type::ulong_long_type:  return vis(value_.ulong_long_value);
  ------------------
  |  Branch (2551:5): [True: 19.4k, False: 16.7k]
  ------------------
 2552|      0|    case detail::type::int128_type:      return vis(map(value_.int128_value));
  ------------------
  |  Branch (2552:5): [True: 0, False: 36.2k]
  ------------------
 2553|      0|    case detail::type::uint128_type:     return vis(map(value_.uint128_value));
  ------------------
  |  Branch (2553:5): [True: 0, False: 36.2k]
  ------------------
 2554|      0|    case detail::type::bool_type:        return vis(value_.bool_value);
  ------------------
  |  Branch (2554:5): [True: 0, False: 36.2k]
  ------------------
 2555|      0|    case detail::type::char_type:        return vis(value_.char_value);
  ------------------
  |  Branch (2555:5): [True: 0, False: 36.2k]
  ------------------
 2556|      0|    case detail::type::float_type:       return vis(value_.float_value);
  ------------------
  |  Branch (2556:5): [True: 0, False: 36.2k]
  ------------------
 2557|      0|    case detail::type::double_type:      return vis(value_.double_value);
  ------------------
  |  Branch (2557:5): [True: 0, False: 36.2k]
  ------------------
 2558|      0|    case detail::type::long_double_type: return vis(value_.long_double_value);
  ------------------
  |  Branch (2558:5): [True: 0, False: 36.2k]
  ------------------
 2559|      0|    case detail::type::cstring_type:     return vis(value_.string.data);
  ------------------
  |  Branch (2559:5): [True: 0, False: 36.2k]
  ------------------
 2560|  16.7k|    case detail::type::string_type:      return vis(value_.string.str());
  ------------------
  |  Branch (2560:5): [True: 16.7k, False: 19.4k]
  ------------------
 2561|      0|    case detail::type::pointer_type:     return vis(value_.pointer);
  ------------------
  |  Branch (2561:5): [True: 0, False: 36.2k]
  ------------------
 2562|      0|    case detail::type::custom_type:      return vis(handle(value_.custom));
  ------------------
  |  Branch (2562:5): [True: 0, False: 36.2k]
  ------------------
 2563|  36.2k|    }
 2564|      0|    return vis(monostate());
 2565|  36.2k|  }
_ZN3fmt3v1216basic_format_argINS0_7contextEEC2IRyEEOT_:
 2531|  5.40k|      : value_(val), type_(detail::stored_type_constant<T, Context>::value) {}
_ZN3fmt3v126detail5valueINS0_7contextEEC2Ey:
 2213|  21.2k|      : ulong_long_value(x) {}
_ZN3fmt3v126detail4copyIcPKcPcTnNSt3__19enable_ifIXntaasr23is_back_insert_iteratorIT1_EE5valueoosr41has_back_insert_iterator_container_appendIS8_T0_EE5valuesr48has_back_insert_iterator_container_insert_at_endIS8_S9_EE5valueEiE4typeELi0EEES8_S9_S9_S8_:
 2108|  33.1k|FMT_CONSTEXPR auto copy(InputIt begin, InputIt end, OutputIt out) -> OutputIt {
 2109|   111k|  while (begin != end) *out++ = static_cast<T>(*begin++);
  ------------------
  |  Branch (2109:10): [True: 78.0k, False: 33.1k]
  ------------------
 2110|  33.1k|  return out;
 2111|  33.1k|}
_ZN3fmt3v126detail4copyIccNS0_14basic_appenderIcEEEET1_NS0_17basic_string_viewIT0_EES5_:
 2114|  1.01k|FMT_CONSTEXPR auto copy(basic_string_view<V> s, OutputIt out) -> OutputIt {
 2115|  1.01k|  return copy<T>(s.begin(), s.end(), out);
 2116|  1.01k|}
_ZN3fmt3v126detail15counting_bufferIcEC2Ev:
 2048|  28.0M|  FMT_CONSTEXPR counting_buffer() : buffer<T>(grow, data_, 0, buffer_size) {}
_ZNK3fmt3v126detail15counting_bufferIcE5countEv:
 2050|  28.0M|  constexpr auto count() const noexcept -> size_t {
 2051|  28.0M|    return count_ + this->size();
 2052|  28.0M|  }
_ZN3fmt3v126detail4copyIcPKcZNS1_5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SD_NS0_17basic_string_viewISA_EERKNS0_12format_specsEE23bounded_output_iteratorTnNS9_IXntaasr23is_back_insert_iteratorIT1_EE5valueoosr41has_back_insert_iterator_container_appendISK_SD_EE5valuesr48has_back_insert_iterator_container_insert_at_endISK_SD_EE5valueEiE4typeELi0EEESK_SD_SD_SK_:
 2108|  31.4M|FMT_CONSTEXPR auto copy(InputIt begin, InputIt end, OutputIt out) -> OutputIt {
 2109|  41.3M|  while (begin != end) *out++ = static_cast<T>(*begin++);
  ------------------
  |  Branch (2109:10): [True: 9.82M, False: 31.4M]
  ------------------
 2110|  31.4M|  return out;
 2111|  31.4M|}
_ZN3fmt3v126detail4copyIcPcZNS1_5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SC_NS0_17basic_string_viewIS9_EERKNS0_12format_specsEE23bounded_output_iteratorTnNS8_IXntaasr23is_back_insert_iteratorIT1_EE5valueoosr41has_back_insert_iterator_container_appendISJ_SC_EE5valuesr48has_back_insert_iterator_container_insert_at_endISJ_SC_EE5valueEiE4typeELi0EEESJ_SC_SC_SJ_:
 2108|  28.7M|FMT_CONSTEXPR auto copy(InputIt begin, InputIt end, OutputIt out) -> OutputIt {
 2109|  86.3M|  while (begin != end) *out++ = static_cast<T>(*begin++);
  ------------------
  |  Branch (2109:10): [True: 57.6M, False: 28.7M]
  ------------------
 2110|  28.7M|  return out;
 2111|  28.7M|}
_ZNK3fmt3v127context6localeEv:
 2718|  36.2k|  FMT_CONSTEXPR auto locale() const -> locale_ref { return loc_; }
_ZN3fmt3v1213parse_contextIcEC2ENS0_17basic_string_viewIcEEi:
  872|  7.85k|      : fmt_(fmt), next_arg_id_(next_arg_id) {}
_ZN3fmt3v127contextC2ENS0_14basic_appenderIcEENS0_17basic_format_argsIS1_EENS0_10locale_refE:
 2698|  7.85k|      : out_(out), args_(args), loc_(loc) {}
_ZN3fmt3v1210locale_refC2Ev:
  925|  7.91k|  constexpr locale_ref() : locale_(nullptr) {}
_ZN3fmt3v126detail6bufferIcE5beginEv:
 1808|   138k|  auto begin() noexcept -> T* { return ptr_; }
_ZN3fmt3v126detail6bufferIcE3endEv:
 1809|   138k|  auto end() noexcept -> T* { return ptr_ + size_; }
_ZNK3fmt3v126detail6bufferIcE4dataEv:
 1822|  4.95k|  FMT_CONSTEXPR auto data() const noexcept -> const T* { return ptr_; }
_ZN3fmt3v126detail10get_bufferIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr18is_buffer_appenderIT0_EE5valueEiE4typeELi0EEERNS1_6bufferIT_EES7_:
 2136|  7.91k|auto get_buffer(OutputIt out) -> buffer<T>& {
 2137|  7.91k|  return get_container(out);
 2138|  7.91k|}
_ZN3fmt3v126detail12get_iteratorIcNS0_14basic_appenderIcEEEET0_RNS1_6bufferIT_EES5_:
 2145|  4.95k|auto get_iterator(buffer<T>&, OutputIt out) -> OutputIt {
 2146|  4.95k|  return out;
 2147|  4.95k|}
_ZN3fmt3v1210vformat_toINS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr6detail18is_output_iteratorINS4_9remove_cvINS4_16remove_referenceIT_E4typeEE4typeEcEE5valueEiE4typeELi0EEESC_OS8_NS0_17basic_string_viewIcEENS0_17basic_format_argsINS0_7contextEEE:
 2855|  7.91k|    -> remove_cvref_t<OutputIt> {
 2856|  7.91k|  auto&& buf = detail::get_buffer<char>(out);
 2857|  7.91k|  detail::vformat_to(buf, fmt, args, {});
 2858|  7.91k|  return detail::get_iterator(buf, out);
 2859|  7.91k|}
_ZN3fmt3v1216make_format_argsINS0_7contextEJKmS3_KNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEELi3ELi0ELy3396EEENS0_6detail16format_arg_storeIT_XT1_EXT2_EXT3_EEEDpRT0_:
 2825|  7.91k|    -> detail::format_arg_store<Context, NUM_ARGS, NUM_NAMED_ARGS, DESC> {
 2826|       |  // Suppress warnings for pathological types convertible to detail::value.
 2827|  7.91k|  FMT_PRAGMA_GCC(diagnostic ignored "-Wconversion")
 2828|  7.91k|  return {{args...}};
 2829|  7.91k|}
_ZN3fmt3v126detail5valueINS0_7contextEEC2Em:
 2210|  15.8k|      : value(ulong_type(x)) {}
_ZN3fmt3v126detail5valueINS0_7contextEEC2INSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEcTnNS6_9enable_ifIXntsr3std10is_pointerIT_EE5valueEiE4typeELi0EEERKSE_:
 2248|  7.91k|  FMT_CONSTEXPR value(const T& x FMT_BUILTIN) {
 2249|  7.91k|    static_assert(std::is_same<C, char_type>::value,
 2250|  7.91k|                  "mixing character types is disallowed");
 2251|  7.91k|    auto sv = to_string_view(x);
 2252|  7.91k|    string.data = sv.data();
 2253|  7.91k|    string.size = sv.size();
 2254|  7.91k|  }
_ZN3fmt3v126detail14to_string_viewINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEETnNS3_9enable_ifIXsr18is_std_string_likeIT_EE5valueEiE4typeELi0EEENS0_17basic_string_viewINSB_10value_typeEEERKSB_:
  963|  7.91k|    -> basic_string_view<typename T::value_type> {
  964|  7.91k|  return s;
  965|  7.91k|}
_ZN3fmt3v1217basic_format_argsINS0_7contextEEC2ILi3ELi0ELy3396ETnNSt3__19enable_ifIXleT_LNS0_6detail3$_1E15EEiE4typeELi0EEERKNS7_16format_arg_storeIS2_XT_EXT0_EXT1_EEE:
 2629|  7.91k|      : desc_(DESC | (NUM_NAMED_ARGS != 0 ? +detail::has_named_args_bit : 0)),
  ------------------
  |  Branch (2629:23): [Folded, False: 7.91k]
  ------------------
 2630|  7.91k|        values_(s.args) {}
_ZNK3fmt3v127fstringIJRKmS3_RKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEE3getEv:
 2791|  7.91k|  auto get() const -> string_view { return str; }
_ZN3fmt3v127fstringIJRKmS3_RKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEC2IPKcTnNS4_9enable_ifIXsr3std14is_convertibleIRKT_NS0_17basic_string_viewIcEEEE5valueEiE4typeELi0EEESK_:
 2768|  7.91k|  FMT_CONSTEVAL FMT_ALWAYS_INLINE fstring(const S& s) : str(s) {
 2769|  7.91k|    auto sv = string_view(str);
 2770|  7.91k|    if (FMT_USE_CONSTEVAL)
  ------------------
  |  |  120|  7.91k|#  define FMT_USE_CONSTEVAL 0
  |  |  ------------------
  |  |  |  Branch (120:29): [Folded, False: 7.91k]
  |  |  ------------------
  ------------------
 2771|      0|      detail::parse_format_string<char>(sv, checker(sv, arg_pack()));
 2772|       |#ifdef FMT_ENFORCE_COMPILE_STRING
 2773|       |    static_assert(
 2774|       |        FMT_USE_CONSTEVAL && sizeof(s) != 0,
 2775|       |        "FMT_ENFORCE_COMPILE_STRING requires format strings to use FMT_STRING");
 2776|       |#endif
 2777|  7.91k|  }

_ZN3fmt3v126detail10vformat_toERNS1_6bufferIcEENS0_17basic_string_viewIcEENS0_17basic_format_argsINS0_7contextEEENS0_10locale_refE:
 1452|  7.91k|                         locale_ref loc) {
 1453|  7.91k|  auto out = appender(buf);
 1454|  7.91k|  if (fmt.size() == 2 && equal2(fmt.data(), "{}"))
  ------------------
  |  Branch (1454:7): [True: 167, False: 7.74k]
  |  Branch (1454:26): [True: 56, False: 111]
  ------------------
 1455|     56|    return args.get(0).visit(default_arg_formatter<char>{out});
 1456|  7.85k|  parse_format_string(fmt,
 1457|  7.85k|                      format_handler<>{parse_context<>(fmt), {out, args, loc}});
 1458|  7.85k|}
_ZN3fmt3v126detail9write_locENS0_14basic_appenderIcEENS0_9loc_valueERKNS0_12format_specsENS0_10locale_refE:
  126|  5.40k|                        const format_specs& specs, locale_ref loc) -> bool {
  127|  5.40k|  auto locale = loc.get<std::locale>();
  128|       |  // We cannot use the num_put<char> facet because it may produce output in
  129|       |  // a wrong encoding.
  130|  5.40k|  using facet = format_facet<std::locale>;
  131|  5.40k|  if (std::has_facet<facet>(locale))
  ------------------
  |  Branch (131:7): [True: 0, False: 5.40k]
  ------------------
  132|      0|    return use_facet<facet>(locale).put(out, value, specs);
  133|  5.40k|  return facet(locale).put(out, value, specs);
  134|  5.40k|}
_ZNK3fmt3v1210locale_ref3getINSt3__16localeEEET_v:
   62|  5.40k|template <typename Locale> auto locale_ref::get() const -> Locale {
   63|  5.40k|  using namespace detail;
   64|  5.40k|  static_assert(std::is_same<Locale, locale>::value, "");
   65|  5.40k|#if FMT_USE_LOCALE
   66|  5.40k|  if (locale_) return *static_cast<const locale*>(locale_);
  ------------------
  |  Branch (66:7): [True: 0, False: 5.40k]
  ------------------
   67|  5.40k|#endif
   68|  5.40k|  return locale();
   69|  5.40k|}
_ZN3fmt3v1212format_facetINSt3__16localeEEC2ERS3_:
  150|  5.40k|template <typename Locale> format_facet<Locale>::format_facet(Locale& loc) {
  151|  5.40k|  auto& np = detail::use_facet<detail::numpunct<char>>(loc);
  152|  5.40k|  grouping_ = np.grouping();
  153|  5.40k|  if (!grouping_.empty()) separator_ = std::string(1, np.thousands_sep());
  ------------------
  |  Branch (153:7): [True: 0, False: 5.40k]
  ------------------
  154|  5.40k|}
_ZNK3fmt3v1212format_facetINSt3__16localeEE6do_putENS0_14basic_appenderIcEENS0_9loc_valueERKNS0_12format_specsE:
  159|  5.40k|    appender out, loc_value val, const format_specs& specs) const -> bool {
  160|  5.40k|  return val.visit(
  161|  5.40k|      detail::loc_writer<>{out, specs, separator_, grouping_, decimal_point_});
  162|  5.40k|}
_ZN3fmt3v126detail12is_printableEj:
 1794|  42.6M|FMT_FUNC auto is_printable(uint32_t cp) -> bool {
 1795|  42.6M|  static constexpr singleton singletons0[] = {
 1796|  42.6M|      {0x00, 1},  {0x03, 5},  {0x05, 6},  {0x06, 3},  {0x07, 6},  {0x08, 8},
 1797|  42.6M|      {0x09, 17}, {0x0a, 28}, {0x0b, 25}, {0x0c, 20}, {0x0d, 16}, {0x0e, 13},
 1798|  42.6M|      {0x0f, 4},  {0x10, 3},  {0x12, 18}, {0x13, 9},  {0x16, 1},  {0x17, 5},
 1799|  42.6M|      {0x18, 2},  {0x19, 3},  {0x1a, 7},  {0x1c, 2},  {0x1d, 1},  {0x1f, 22},
 1800|  42.6M|      {0x20, 3},  {0x2b, 3},  {0x2c, 2},  {0x2d, 11}, {0x2e, 1},  {0x30, 3},
 1801|  42.6M|      {0x31, 2},  {0x32, 1},  {0xa7, 2},  {0xa9, 2},  {0xaa, 4},  {0xab, 8},
 1802|  42.6M|      {0xfa, 2},  {0xfb, 5},  {0xfd, 4},  {0xfe, 3},  {0xff, 9},
 1803|  42.6M|  };
 1804|  42.6M|  static constexpr unsigned char singletons0_lower[] = {
 1805|  42.6M|      0xad, 0x78, 0x79, 0x8b, 0x8d, 0xa2, 0x30, 0x57, 0x58, 0x8b, 0x8c, 0x90,
 1806|  42.6M|      0x1c, 0x1d, 0xdd, 0x0e, 0x0f, 0x4b, 0x4c, 0xfb, 0xfc, 0x2e, 0x2f, 0x3f,
 1807|  42.6M|      0x5c, 0x5d, 0x5f, 0xb5, 0xe2, 0x84, 0x8d, 0x8e, 0x91, 0x92, 0xa9, 0xb1,
 1808|  42.6M|      0xba, 0xbb, 0xc5, 0xc6, 0xc9, 0xca, 0xde, 0xe4, 0xe5, 0xff, 0x00, 0x04,
 1809|  42.6M|      0x11, 0x12, 0x29, 0x31, 0x34, 0x37, 0x3a, 0x3b, 0x3d, 0x49, 0x4a, 0x5d,
 1810|  42.6M|      0x84, 0x8e, 0x92, 0xa9, 0xb1, 0xb4, 0xba, 0xbb, 0xc6, 0xca, 0xce, 0xcf,
 1811|  42.6M|      0xe4, 0xe5, 0x00, 0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31, 0x34, 0x3a,
 1812|  42.6M|      0x3b, 0x45, 0x46, 0x49, 0x4a, 0x5e, 0x64, 0x65, 0x84, 0x91, 0x9b, 0x9d,
 1813|  42.6M|      0xc9, 0xce, 0xcf, 0x0d, 0x11, 0x29, 0x45, 0x49, 0x57, 0x64, 0x65, 0x8d,
 1814|  42.6M|      0x91, 0xa9, 0xb4, 0xba, 0xbb, 0xc5, 0xc9, 0xdf, 0xe4, 0xe5, 0xf0, 0x0d,
 1815|  42.6M|      0x11, 0x45, 0x49, 0x64, 0x65, 0x80, 0x84, 0xb2, 0xbc, 0xbe, 0xbf, 0xd5,
 1816|  42.6M|      0xd7, 0xf0, 0xf1, 0x83, 0x85, 0x8b, 0xa4, 0xa6, 0xbe, 0xbf, 0xc5, 0xc7,
 1817|  42.6M|      0xce, 0xcf, 0xda, 0xdb, 0x48, 0x98, 0xbd, 0xcd, 0xc6, 0xce, 0xcf, 0x49,
 1818|  42.6M|      0x4e, 0x4f, 0x57, 0x59, 0x5e, 0x5f, 0x89, 0x8e, 0x8f, 0xb1, 0xb6, 0xb7,
 1819|  42.6M|      0xbf, 0xc1, 0xc6, 0xc7, 0xd7, 0x11, 0x16, 0x17, 0x5b, 0x5c, 0xf6, 0xf7,
 1820|  42.6M|      0xfe, 0xff, 0x80, 0x0d, 0x6d, 0x71, 0xde, 0xdf, 0x0e, 0x0f, 0x1f, 0x6e,
 1821|  42.6M|      0x6f, 0x1c, 0x1d, 0x5f, 0x7d, 0x7e, 0xae, 0xaf, 0xbb, 0xbc, 0xfa, 0x16,
 1822|  42.6M|      0x17, 0x1e, 0x1f, 0x46, 0x47, 0x4e, 0x4f, 0x58, 0x5a, 0x5c, 0x5e, 0x7e,
 1823|  42.6M|      0x7f, 0xb5, 0xc5, 0xd4, 0xd5, 0xdc, 0xf0, 0xf1, 0xf5, 0x72, 0x73, 0x8f,
 1824|  42.6M|      0x74, 0x75, 0x96, 0x2f, 0x5f, 0x26, 0x2e, 0x2f, 0xa7, 0xaf, 0xb7, 0xbf,
 1825|  42.6M|      0xc7, 0xcf, 0xd7, 0xdf, 0x9a, 0x40, 0x97, 0x98, 0x30, 0x8f, 0x1f, 0xc0,
 1826|  42.6M|      0xc1, 0xce, 0xff, 0x4e, 0x4f, 0x5a, 0x5b, 0x07, 0x08, 0x0f, 0x10, 0x27,
 1827|  42.6M|      0x2f, 0xee, 0xef, 0x6e, 0x6f, 0x37, 0x3d, 0x3f, 0x42, 0x45, 0x90, 0x91,
 1828|  42.6M|      0xfe, 0xff, 0x53, 0x67, 0x75, 0xc8, 0xc9, 0xd0, 0xd1, 0xd8, 0xd9, 0xe7,
 1829|  42.6M|      0xfe, 0xff,
 1830|  42.6M|  };
 1831|  42.6M|  static constexpr singleton singletons1[] = {
 1832|  42.6M|      {0x00, 6},  {0x01, 1}, {0x03, 1},  {0x04, 2}, {0x08, 8},  {0x09, 2},
 1833|  42.6M|      {0x0a, 5},  {0x0b, 2}, {0x0e, 4},  {0x10, 1}, {0x11, 2},  {0x12, 5},
 1834|  42.6M|      {0x13, 17}, {0x14, 1}, {0x15, 2},  {0x17, 2}, {0x19, 13}, {0x1c, 5},
 1835|  42.6M|      {0x1d, 8},  {0x24, 1}, {0x6a, 3},  {0x6b, 2}, {0xbc, 2},  {0xd1, 2},
 1836|  42.6M|      {0xd4, 12}, {0xd5, 9}, {0xd6, 2},  {0xd7, 2}, {0xda, 1},  {0xe0, 5},
 1837|  42.6M|      {0xe1, 2},  {0xe8, 2}, {0xee, 32}, {0xf0, 4}, {0xf8, 2},  {0xf9, 2},
 1838|  42.6M|      {0xfa, 2},  {0xfb, 1},
 1839|  42.6M|  };
 1840|  42.6M|  static constexpr unsigned char singletons1_lower[] = {
 1841|  42.6M|      0x0c, 0x27, 0x3b, 0x3e, 0x4e, 0x4f, 0x8f, 0x9e, 0x9e, 0x9f, 0x06, 0x07,
 1842|  42.6M|      0x09, 0x36, 0x3d, 0x3e, 0x56, 0xf3, 0xd0, 0xd1, 0x04, 0x14, 0x18, 0x36,
 1843|  42.6M|      0x37, 0x56, 0x57, 0x7f, 0xaa, 0xae, 0xaf, 0xbd, 0x35, 0xe0, 0x12, 0x87,
 1844|  42.6M|      0x89, 0x8e, 0x9e, 0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31, 0x34, 0x3a,
 1845|  42.6M|      0x45, 0x46, 0x49, 0x4a, 0x4e, 0x4f, 0x64, 0x65, 0x5c, 0xb6, 0xb7, 0x1b,
 1846|  42.6M|      0x1c, 0x07, 0x08, 0x0a, 0x0b, 0x14, 0x17, 0x36, 0x39, 0x3a, 0xa8, 0xa9,
 1847|  42.6M|      0xd8, 0xd9, 0x09, 0x37, 0x90, 0x91, 0xa8, 0x07, 0x0a, 0x3b, 0x3e, 0x66,
 1848|  42.6M|      0x69, 0x8f, 0x92, 0x6f, 0x5f, 0xee, 0xef, 0x5a, 0x62, 0x9a, 0x9b, 0x27,
 1849|  42.6M|      0x28, 0x55, 0x9d, 0xa0, 0xa1, 0xa3, 0xa4, 0xa7, 0xa8, 0xad, 0xba, 0xbc,
 1850|  42.6M|      0xc4, 0x06, 0x0b, 0x0c, 0x15, 0x1d, 0x3a, 0x3f, 0x45, 0x51, 0xa6, 0xa7,
 1851|  42.6M|      0xcc, 0xcd, 0xa0, 0x07, 0x19, 0x1a, 0x22, 0x25, 0x3e, 0x3f, 0xc5, 0xc6,
 1852|  42.6M|      0x04, 0x20, 0x23, 0x25, 0x26, 0x28, 0x33, 0x38, 0x3a, 0x48, 0x4a, 0x4c,
 1853|  42.6M|      0x50, 0x53, 0x55, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x63, 0x65, 0x66,
 1854|  42.6M|      0x6b, 0x73, 0x78, 0x7d, 0x7f, 0x8a, 0xa4, 0xaa, 0xaf, 0xb0, 0xc0, 0xd0,
 1855|  42.6M|      0xae, 0xaf, 0x79, 0xcc, 0x6e, 0x6f, 0x93,
 1856|  42.6M|  };
 1857|  42.6M|  static constexpr unsigned char normal0[] = {
 1858|  42.6M|      0x00, 0x20, 0x5f, 0x22, 0x82, 0xdf, 0x04, 0x82, 0x44, 0x08, 0x1b, 0x04,
 1859|  42.6M|      0x06, 0x11, 0x81, 0xac, 0x0e, 0x80, 0xab, 0x35, 0x28, 0x0b, 0x80, 0xe0,
 1860|  42.6M|      0x03, 0x19, 0x08, 0x01, 0x04, 0x2f, 0x04, 0x34, 0x04, 0x07, 0x03, 0x01,
 1861|  42.6M|      0x07, 0x06, 0x07, 0x11, 0x0a, 0x50, 0x0f, 0x12, 0x07, 0x55, 0x07, 0x03,
 1862|  42.6M|      0x04, 0x1c, 0x0a, 0x09, 0x03, 0x08, 0x03, 0x07, 0x03, 0x02, 0x03, 0x03,
 1863|  42.6M|      0x03, 0x0c, 0x04, 0x05, 0x03, 0x0b, 0x06, 0x01, 0x0e, 0x15, 0x05, 0x3a,
 1864|  42.6M|      0x03, 0x11, 0x07, 0x06, 0x05, 0x10, 0x07, 0x57, 0x07, 0x02, 0x07, 0x15,
 1865|  42.6M|      0x0d, 0x50, 0x04, 0x43, 0x03, 0x2d, 0x03, 0x01, 0x04, 0x11, 0x06, 0x0f,
 1866|  42.6M|      0x0c, 0x3a, 0x04, 0x1d, 0x25, 0x5f, 0x20, 0x6d, 0x04, 0x6a, 0x25, 0x80,
 1867|  42.6M|      0xc8, 0x05, 0x82, 0xb0, 0x03, 0x1a, 0x06, 0x82, 0xfd, 0x03, 0x59, 0x07,
 1868|  42.6M|      0x15, 0x0b, 0x17, 0x09, 0x14, 0x0c, 0x14, 0x0c, 0x6a, 0x06, 0x0a, 0x06,
 1869|  42.6M|      0x1a, 0x06, 0x59, 0x07, 0x2b, 0x05, 0x46, 0x0a, 0x2c, 0x04, 0x0c, 0x04,
 1870|  42.6M|      0x01, 0x03, 0x31, 0x0b, 0x2c, 0x04, 0x1a, 0x06, 0x0b, 0x03, 0x80, 0xac,
 1871|  42.6M|      0x06, 0x0a, 0x06, 0x21, 0x3f, 0x4c, 0x04, 0x2d, 0x03, 0x74, 0x08, 0x3c,
 1872|  42.6M|      0x03, 0x0f, 0x03, 0x3c, 0x07, 0x38, 0x08, 0x2b, 0x05, 0x82, 0xff, 0x11,
 1873|  42.6M|      0x18, 0x08, 0x2f, 0x11, 0x2d, 0x03, 0x20, 0x10, 0x21, 0x0f, 0x80, 0x8c,
 1874|  42.6M|      0x04, 0x82, 0x97, 0x19, 0x0b, 0x15, 0x88, 0x94, 0x05, 0x2f, 0x05, 0x3b,
 1875|  42.6M|      0x07, 0x02, 0x0e, 0x18, 0x09, 0x80, 0xb3, 0x2d, 0x74, 0x0c, 0x80, 0xd6,
 1876|  42.6M|      0x1a, 0x0c, 0x05, 0x80, 0xff, 0x05, 0x80, 0xdf, 0x0c, 0xee, 0x0d, 0x03,
 1877|  42.6M|      0x84, 0x8d, 0x03, 0x37, 0x09, 0x81, 0x5c, 0x14, 0x80, 0xb8, 0x08, 0x80,
 1878|  42.6M|      0xcb, 0x2a, 0x38, 0x03, 0x0a, 0x06, 0x38, 0x08, 0x46, 0x08, 0x0c, 0x06,
 1879|  42.6M|      0x74, 0x0b, 0x1e, 0x03, 0x5a, 0x04, 0x59, 0x09, 0x80, 0x83, 0x18, 0x1c,
 1880|  42.6M|      0x0a, 0x16, 0x09, 0x4c, 0x04, 0x80, 0x8a, 0x06, 0xab, 0xa4, 0x0c, 0x17,
 1881|  42.6M|      0x04, 0x31, 0xa1, 0x04, 0x81, 0xda, 0x26, 0x07, 0x0c, 0x05, 0x05, 0x80,
 1882|  42.6M|      0xa5, 0x11, 0x81, 0x6d, 0x10, 0x78, 0x28, 0x2a, 0x06, 0x4c, 0x04, 0x80,
 1883|  42.6M|      0x8d, 0x04, 0x80, 0xbe, 0x03, 0x1b, 0x03, 0x0f, 0x0d,
 1884|  42.6M|  };
 1885|  42.6M|  static constexpr unsigned char normal1[] = {
 1886|  42.6M|      0x5e, 0x22, 0x7b, 0x05, 0x03, 0x04, 0x2d, 0x03, 0x66, 0x03, 0x01, 0x2f,
 1887|  42.6M|      0x2e, 0x80, 0x82, 0x1d, 0x03, 0x31, 0x0f, 0x1c, 0x04, 0x24, 0x09, 0x1e,
 1888|  42.6M|      0x05, 0x2b, 0x05, 0x44, 0x04, 0x0e, 0x2a, 0x80, 0xaa, 0x06, 0x24, 0x04,
 1889|  42.6M|      0x24, 0x04, 0x28, 0x08, 0x34, 0x0b, 0x01, 0x80, 0x90, 0x81, 0x37, 0x09,
 1890|  42.6M|      0x16, 0x0a, 0x08, 0x80, 0x98, 0x39, 0x03, 0x63, 0x08, 0x09, 0x30, 0x16,
 1891|  42.6M|      0x05, 0x21, 0x03, 0x1b, 0x05, 0x01, 0x40, 0x38, 0x04, 0x4b, 0x05, 0x2f,
 1892|  42.6M|      0x04, 0x0a, 0x07, 0x09, 0x07, 0x40, 0x20, 0x27, 0x04, 0x0c, 0x09, 0x36,
 1893|  42.6M|      0x03, 0x3a, 0x05, 0x1a, 0x07, 0x04, 0x0c, 0x07, 0x50, 0x49, 0x37, 0x33,
 1894|  42.6M|      0x0d, 0x33, 0x07, 0x2e, 0x08, 0x0a, 0x81, 0x26, 0x52, 0x4e, 0x28, 0x08,
 1895|  42.6M|      0x2a, 0x56, 0x1c, 0x14, 0x17, 0x09, 0x4e, 0x04, 0x1e, 0x0f, 0x43, 0x0e,
 1896|  42.6M|      0x19, 0x07, 0x0a, 0x06, 0x48, 0x08, 0x27, 0x09, 0x75, 0x0b, 0x3f, 0x41,
 1897|  42.6M|      0x2a, 0x06, 0x3b, 0x05, 0x0a, 0x06, 0x51, 0x06, 0x01, 0x05, 0x10, 0x03,
 1898|  42.6M|      0x05, 0x80, 0x8b, 0x62, 0x1e, 0x48, 0x08, 0x0a, 0x80, 0xa6, 0x5e, 0x22,
 1899|  42.6M|      0x45, 0x0b, 0x0a, 0x06, 0x0d, 0x13, 0x39, 0x07, 0x0a, 0x36, 0x2c, 0x04,
 1900|  42.6M|      0x10, 0x80, 0xc0, 0x3c, 0x64, 0x53, 0x0c, 0x48, 0x09, 0x0a, 0x46, 0x45,
 1901|  42.6M|      0x1b, 0x48, 0x08, 0x53, 0x1d, 0x39, 0x81, 0x07, 0x46, 0x0a, 0x1d, 0x03,
 1902|  42.6M|      0x47, 0x49, 0x37, 0x03, 0x0e, 0x08, 0x0a, 0x06, 0x39, 0x07, 0x0a, 0x81,
 1903|  42.6M|      0x36, 0x19, 0x80, 0xb7, 0x01, 0x0f, 0x32, 0x0d, 0x83, 0x9b, 0x66, 0x75,
 1904|  42.6M|      0x0b, 0x80, 0xc4, 0x8a, 0xbc, 0x84, 0x2f, 0x8f, 0xd1, 0x82, 0x47, 0xa1,
 1905|  42.6M|      0xb9, 0x82, 0x39, 0x07, 0x2a, 0x04, 0x02, 0x60, 0x26, 0x0a, 0x46, 0x0a,
 1906|  42.6M|      0x28, 0x05, 0x13, 0x82, 0xb0, 0x5b, 0x65, 0x4b, 0x04, 0x39, 0x07, 0x11,
 1907|  42.6M|      0x40, 0x05, 0x0b, 0x02, 0x0e, 0x97, 0xf8, 0x08, 0x84, 0xd6, 0x2a, 0x09,
 1908|  42.6M|      0xa2, 0xf7, 0x81, 0x1f, 0x31, 0x03, 0x11, 0x04, 0x08, 0x81, 0x8c, 0x89,
 1909|  42.6M|      0x04, 0x6b, 0x05, 0x0d, 0x03, 0x09, 0x07, 0x10, 0x93, 0x60, 0x80, 0xf6,
 1910|  42.6M|      0x0a, 0x73, 0x08, 0x6e, 0x17, 0x46, 0x80, 0x9a, 0x14, 0x0c, 0x57, 0x09,
 1911|  42.6M|      0x19, 0x80, 0x87, 0x81, 0x47, 0x03, 0x85, 0x42, 0x0f, 0x15, 0x85, 0x50,
 1912|  42.6M|      0x2b, 0x80, 0xd5, 0x2d, 0x03, 0x1a, 0x04, 0x02, 0x81, 0x70, 0x3a, 0x05,
 1913|  42.6M|      0x01, 0x85, 0x00, 0x80, 0xd7, 0x29, 0x4c, 0x04, 0x0a, 0x04, 0x02, 0x83,
 1914|  42.6M|      0x11, 0x44, 0x4c, 0x3d, 0x80, 0xc2, 0x3c, 0x06, 0x01, 0x04, 0x55, 0x05,
 1915|  42.6M|      0x1b, 0x34, 0x02, 0x81, 0x0e, 0x2c, 0x04, 0x64, 0x0c, 0x56, 0x0a, 0x80,
 1916|  42.6M|      0xae, 0x38, 0x1d, 0x0d, 0x2c, 0x04, 0x09, 0x07, 0x02, 0x0e, 0x06, 0x80,
 1917|  42.6M|      0x9a, 0x83, 0xd8, 0x08, 0x0d, 0x03, 0x0d, 0x03, 0x74, 0x0c, 0x59, 0x07,
 1918|  42.6M|      0x0c, 0x14, 0x0c, 0x04, 0x38, 0x08, 0x0a, 0x06, 0x28, 0x08, 0x22, 0x4e,
 1919|  42.6M|      0x81, 0x54, 0x0c, 0x15, 0x03, 0x03, 0x05, 0x07, 0x09, 0x19, 0x07, 0x07,
 1920|  42.6M|      0x09, 0x03, 0x0d, 0x07, 0x29, 0x80, 0xcb, 0x25, 0x0a, 0x84, 0x06,
 1921|  42.6M|  };
 1922|  42.6M|  auto lower = static_cast<uint16_t>(cp);
 1923|  42.6M|  if (cp < 0x10000) {
  ------------------
  |  Branch (1923:7): [True: 28.7M, False: 13.8M]
  ------------------
 1924|  28.7M|    return is_printable(lower, singletons0,
 1925|  28.7M|                        sizeof(singletons0) / sizeof(*singletons0),
 1926|  28.7M|                        singletons0_lower, normal0, sizeof(normal0));
 1927|  28.7M|  }
 1928|  13.8M|  if (cp < 0x20000) {
  ------------------
  |  Branch (1928:7): [True: 23.2k, False: 13.8M]
  ------------------
 1929|  23.2k|    return is_printable(lower, singletons1,
 1930|  23.2k|                        sizeof(singletons1) / sizeof(*singletons1),
 1931|  23.2k|                        singletons1_lower, normal1, sizeof(normal1));
 1932|  23.2k|  }
 1933|  13.8M|  if (0x2a6de <= cp && cp < 0x2a700) return false;
  ------------------
  |  Branch (1933:7): [True: 13.8M, False: 730]
  |  Branch (1933:24): [True: 326, False: 13.8M]
  ------------------
 1934|  13.8M|  if (0x2b735 <= cp && cp < 0x2b740) return false;
  ------------------
  |  Branch (1934:7): [True: 13.8M, False: 1.32k]
  |  Branch (1934:24): [True: 464, False: 13.8M]
  ------------------
 1935|  13.8M|  if (0x2b81e <= cp && cp < 0x2b820) return false;
  ------------------
  |  Branch (1935:7): [True: 13.8M, False: 1.33k]
  |  Branch (1935:24): [True: 299, False: 13.8M]
  ------------------
 1936|  13.8M|  if (0x2cea2 <= cp && cp < 0x2ceb0) return false;
  ------------------
  |  Branch (1936:7): [True: 13.8M, False: 1.67k]
  |  Branch (1936:24): [True: 2.37k, False: 13.8M]
  ------------------
 1937|  13.8M|  if (0x2ebe1 <= cp && cp < 0x2f800) return false;
  ------------------
  |  Branch (1937:7): [True: 13.8M, False: 1.73k]
  |  Branch (1937:24): [True: 587, False: 13.8M]
  ------------------
 1938|  13.8M|  if (0x2fa1e <= cp && cp < 0x30000) return false;
  ------------------
  |  Branch (1938:7): [True: 13.8M, False: 1.89k]
  |  Branch (1938:24): [True: 1.41k, False: 13.8M]
  ------------------
 1939|  13.8M|  if (0x3134b <= cp && cp < 0xe0100) return false;
  ------------------
  |  Branch (1939:7): [True: 13.8M, False: 2.43k]
  |  Branch (1939:24): [True: 9.46k, False: 13.8M]
  ------------------
 1940|  13.8M|  if (0xe01f0 <= cp && cp < 0x110000) return false;
  ------------------
  |  Branch (1940:7): [True: 13.8M, False: 2.51k]
  |  Branch (1940:24): [True: 10.8k, False: 13.8M]
  ------------------
 1941|  13.8M|  return cp < 0x110000;
 1942|  13.8M|}
_ZN3fmt3v126detail12is_printableEtPKNS1_9singletonEmPKhS6_m:
 1766|  28.7M|    -> bool {
 1767|  28.7M|  auto upper = x >> 8;
 1768|  28.7M|  auto lower_start = 0;
 1769|  60.1M|  for (size_t i = 0; i < singletons_size; ++i) {
  ------------------
  |  Branch (1769:22): [True: 60.0M, False: 2.55k]
  ------------------
 1770|  60.0M|    auto s = singletons[i];
 1771|  60.0M|    auto lower_end = lower_start + s.lower_count;
 1772|  60.0M|    if (upper < s.upper) break;
  ------------------
  |  Branch (1772:9): [True: 28.7M, False: 31.3M]
  ------------------
 1773|  31.3M|    if (upper == s.upper) {
  ------------------
  |  Branch (1773:9): [True: 28.7M, False: 2.59M]
  ------------------
 1774|  57.6M|      for (auto j = lower_start; j < lower_end; ++j) {
  ------------------
  |  Branch (1774:34): [True: 28.8M, False: 28.7M]
  ------------------
 1775|  28.8M|        if (singleton_lowers[j] == (x & 0xff)) return false;
  ------------------
  |  Branch (1775:13): [True: 16.5k, False: 28.8M]
  ------------------
 1776|  28.8M|      }
 1777|  28.7M|    }
 1778|  31.3M|    lower_start = lower_end;
 1779|  31.3M|  }
 1780|       |
 1781|  28.7M|  auto xsigned = static_cast<int>(x);
 1782|  28.7M|  auto current = true;
 1783|   104M|  for (size_t i = 0; i < normal_size; ++i) {
  ------------------
  |  Branch (1783:22): [True: 104M, False: 447]
  ------------------
 1784|   104M|    auto v = static_cast<int>(normal[i]);
 1785|   104M|    auto len = (v & 0x80) != 0 ? (v & 0x7f) << 8 | normal[++i] : v;
  ------------------
  |  Branch (1785:16): [True: 1.85M, False: 102M]
  ------------------
 1786|   104M|    xsigned -= len;
 1787|   104M|    if (xsigned < 0) break;
  ------------------
  |  Branch (1787:9): [True: 28.7M, False: 75.8M]
  ------------------
 1788|  75.8M|    current = !current;
 1789|  75.8M|  }
 1790|  28.7M|  return current;
 1791|  28.7M|}
_ZN3fmt3v1212report_errorEPKc:
  138|  2.96k|FMT_FUNC void report_error(const char* message) {
  139|       |#if FMT_MSC_VERSION || defined(__NVCC__)
  140|       |  // Silence unreachable code warnings in MSVC and NVCC because these
  141|       |  // are nearly impossible to fix in a generic code.
  142|       |  volatile bool b = true;
  143|       |  if (!b) return;
  144|       |#endif
  145|  2.96k|  FMT_THROW(format_error(message));
  ------------------
  |  |  175|  2.96k|#  define FMT_THROW(x) throw x
  ------------------
  146|  2.96k|}

_ZN3fmt3v1219basic_memory_bufferIcLm250ENS0_6detail9allocatorIcEEEC2ERKS4_:
  840|   438k|      : detail::buffer<T>(grow), alloc_(alloc) {
  841|   438k|    this->set(store_, SIZE);
  842|   438k|    if (detail::is_constant_evaluated()) detail::fill_n(store_, SIZE, T());
  ------------------
  |  Branch (842:9): [Folded, False: 438k]
  ------------------
  843|   438k|  }
_ZN3fmt3v1219basic_memory_bufferIcLm250ENS0_6detail9allocatorIcEEE4growERNS2_6bufferIcEEm:
  810|  17.5k|  static FMT_CONSTEXPR20 void grow(detail::buffer<T>& buf, size_t size) {
  811|  17.5k|    detail::abort_fuzzing_if(size > 5000);
  812|  17.5k|    auto& self = static_cast<basic_memory_buffer&>(buf);
  813|  17.5k|    const size_t max_size =
  814|  17.5k|        std::allocator_traits<Allocator>::max_size(self.alloc_);
  815|  17.5k|    size_t old_capacity = buf.capacity();
  816|  17.5k|    size_t new_capacity = old_capacity + old_capacity / 2;
  817|  17.5k|    if (size > new_capacity)
  ------------------
  |  Branch (817:9): [True: 3.52k, False: 14.0k]
  ------------------
  818|  3.52k|      new_capacity = size;
  819|  14.0k|    else if (new_capacity > max_size)
  ------------------
  |  Branch (819:14): [True: 0, False: 14.0k]
  ------------------
  820|      0|      new_capacity = max_of(size, max_size);
  821|  17.5k|    T* old_data = buf.data();
  822|  17.5k|    T* new_data = self.alloc_.allocate(new_capacity);
  823|       |    // Suppress a bogus -Wstringop-overflow in gcc 13.1 (#3481).
  824|  17.5k|    detail::assume(buf.size() <= new_capacity);
  825|       |    // The following code doesn't throw, so the raw pointer above doesn't leak.
  826|  17.5k|    memcpy(new_data, old_data, buf.size() * sizeof(T));
  827|  17.5k|    self.set(new_data, new_capacity);
  828|       |    // deallocate must not throw according to the standard, but even if it does,
  829|       |    // the buffer already uses the new storage and will deallocate it in
  830|       |    // destructor.
  831|  17.5k|    if (old_data != self.store_) self.alloc_.deallocate(old_data, old_capacity);
  ------------------
  |  Branch (831:9): [True: 12.5k, False: 5.03k]
  ------------------
  832|  17.5k|  }
_ZN3fmt3v126detail16abort_fuzzing_ifEb:
  252|  17.5k|FMT_CONSTEXPR inline void abort_fuzzing_if(bool condition) {
  253|  17.5k|  ignore_unused(condition);
  254|       |#ifdef FMT_FUZZ
  255|       |  if (condition) throw std::runtime_error("fuzzing limit reached");
  256|       |#endif
  257|  17.5k|}
_ZN3fmt3v126detail9allocatorIcE8allocateEm:
  749|  17.5k|  auto allocate(size_t n) -> T* {
  750|  17.5k|    FMT_ASSERT(n <= max_value<size_t>() / sizeof(T), "");
  ------------------
  |  |  395|  17.5k|    ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \
  |  |  ------------------
  |  |  |  Branch (395:6): [True: 17.5k, False: 0]
  |  |  ------------------
  |  |  396|  17.5k|         ? (void)0                                                          \
  |  |  397|  17.5k|         : ::fmt::assert_fail(__FILE__, __LINE__, (message)))
  ------------------
  751|  17.5k|    T* p = static_cast<T*>(malloc(n * sizeof(T)));
  752|  17.5k|    if (!p) FMT_THROW(std::bad_alloc());
  ------------------
  |  |  175|      0|#  define FMT_THROW(x) throw x
  ------------------
  |  Branch (752:9): [True: 0, False: 17.5k]
  ------------------
  753|  17.5k|    return p;
  754|  17.5k|  }
_ZN3fmt3v126detail9max_valueImEET_v:
  427|  17.5k|template <typename T> constexpr auto max_value() -> T {
  428|  17.5k|  return (std::numeric_limits<T>::max)();
  429|  17.5k|}
_ZN3fmt3v126detail6assumeEb:
  479|  17.5k|FMT_INLINE void assume(bool condition) {
  480|  17.5k|  (void)condition;
  481|  17.5k|#if FMT_HAS_BUILTIN(__builtin_assume) && !FMT_ICC_VERSION
  482|  17.5k|  __builtin_assume(condition);
  483|       |#elif FMT_GCC_VERSION
  484|       |  if (!condition) __builtin_unreachable();
  485|       |#endif
  486|  17.5k|}
_ZN3fmt3v126detail9allocatorIcE10deallocateEPcm:
  756|  17.5k|  void deallocate(T* p, size_t) { free(p); }
_ZN3fmt3v1219basic_memory_bufferIcLm250ENS0_6detail9allocatorIcEEED2Ev:
  844|   438k|  FMT_CONSTEXPR20 ~basic_memory_buffer() { deallocate(); }
_ZN3fmt3v1219basic_memory_bufferIcLm250ENS0_6detail9allocatorIcEEE10deallocateEv:
  805|   438k|  FMT_CONSTEXPR20 void deallocate() {
  806|   438k|    T* data = this->data();
  807|   438k|    if (data != store_) alloc_.deallocate(data, this->capacity());
  ------------------
  |  Branch (807:9): [True: 5.03k, False: 433k]
  ------------------
  808|   438k|  }
_ZN3fmt3v1210format_intC2Ei:
 4190|   195k|  FMT_CONSTEXPR20 explicit format_int(int value) : str_(format_signed(value)) {}
_ZN3fmt3v1210format_int13format_signedIiEEPcT_:
 4180|   195k|  FMT_CONSTEXPR20 auto format_signed(Int value) -> char* {
 4181|   195k|    auto abs_value = static_cast<detail::uint32_or_64_or_128_t<Int>>(value);
 4182|   195k|    bool negative = value < 0;
 4183|   195k|    if (negative) abs_value = 0 - abs_value;
  ------------------
  |  Branch (4183:9): [True: 0, False: 195k]
  ------------------
 4184|   195k|    auto begin = format_unsigned(abs_value);
 4185|   195k|    if (negative) *--begin = '-';
  ------------------
  |  Branch (4185:9): [True: 0, False: 195k]
  ------------------
 4186|   195k|    return begin;
 4187|   195k|  }
_ZN3fmt3v1210format_int15format_unsignedIjEEPcT_:
 4174|   225k|  FMT_CONSTEXPR20 auto format_unsigned(UInt value) -> char* {
 4175|   225k|    auto n = static_cast<detail::uint32_or_64_or_128_t<UInt>>(value);
 4176|   225k|    return detail::do_format_decimal(buffer_, n, buffer_size - 1);
 4177|   225k|  }
_ZN3fmt3v126detail17do_format_decimalIcjEEPT_S4_T0_i:
 1220|   225k|    -> Char* {
 1221|   225k|  FMT_ASSERT(size >= count_digits(value), "invalid digit count");
  ------------------
  |  |  395|   225k|    ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \
  |  |  ------------------
  |  |  |  Branch (395:6): [True: 225k, False: 0]
  |  |  ------------------
  |  |  396|   225k|         ? (void)0                                                          \
  |  |  397|   225k|         : ::fmt::assert_fail(__FILE__, __LINE__, (message)))
  ------------------
 1222|   225k|  unsigned n = to_unsigned(size);
 1223|   428k|  while (value >= 100) {
  ------------------
  |  Branch (1223:10): [True: 203k, False: 225k]
  ------------------
 1224|       |    // Integer division is slow so do it for a group of two digits instead
 1225|       |    // of for every digit. The idea comes from the talk by Alexandrescu
 1226|       |    // "Three Optimization Tips for C++". See speed-test for a comparison.
 1227|   203k|    n -= 2;
 1228|   203k|    write2digits(out + n, static_cast<unsigned>(value % 100));
 1229|   203k|    value /= 100;
 1230|   203k|  }
 1231|   225k|  if (value >= 10) {
  ------------------
  |  Branch (1231:7): [True: 195k, False: 29.2k]
  ------------------
 1232|   195k|    n -= 2;
 1233|   195k|    write2digits(out + n, static_cast<unsigned>(value));
 1234|   195k|  } else {
 1235|  29.2k|    out[--n] = static_cast<Char>('0' + value);
 1236|  29.2k|  }
 1237|   225k|  return out + n;
 1238|   225k|}
_ZN3fmt3v126detail12count_digitsEj:
 1146|   239k|FMT_CONSTEXPR20 inline auto count_digits(uint32_t n) -> int {
 1147|   239k|#ifdef FMT_BUILTIN_CLZ
 1148|   239k|  if (!is_constant_evaluated() && !FMT_OPTIMIZE_SIZE) return do_count_digits(n);
  ------------------
  |  |  290|      0|#  define FMT_OPTIMIZE_SIZE 0
  ------------------
  |  Branch (1148:7): [True: 0, Folded]
  |  Branch (1148:35): [True: 0, Folded]
  ------------------
 1149|      0|#endif
 1150|      0|  return count_digits_fallback(n);
 1151|   239k|}
_ZN3fmt3v126detail15do_count_digitsEj:
 1123|   239k|FMT_INLINE auto do_count_digits(uint32_t n) -> int {
 1124|       |// An optimization by Kendall Willets from https://bit.ly/3uOIQrB.
 1125|       |// This increments the upper 32 bits (log10(T) - 1) when >= T is added.
 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
 1127|   239k|  static constexpr uint64_t table[] = {
 1128|   239k|      FMT_INC(0),          FMT_INC(0),          FMT_INC(0),           // 8
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(0),          FMT_INC(0),          FMT_INC(0),           // 8
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(0),          FMT_INC(0),          FMT_INC(0),           // 8
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
 1129|   239k|      FMT_INC(10),         FMT_INC(10),         FMT_INC(10),          // 64
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(10),         FMT_INC(10),         FMT_INC(10),          // 64
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(10),         FMT_INC(10),         FMT_INC(10),          // 64
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
 1130|   239k|      FMT_INC(100),        FMT_INC(100),        FMT_INC(100),         // 512
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(100),        FMT_INC(100),        FMT_INC(100),         // 512
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(100),        FMT_INC(100),        FMT_INC(100),         // 512
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
 1131|   239k|      FMT_INC(1000),       FMT_INC(1000),       FMT_INC(1000),        // 4096
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(1000),       FMT_INC(1000),       FMT_INC(1000),        // 4096
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(1000),       FMT_INC(1000),       FMT_INC(1000),        // 4096
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
 1132|   239k|      FMT_INC(10000),      FMT_INC(10000),      FMT_INC(10000),       // 32k
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(10000),      FMT_INC(10000),      FMT_INC(10000),       // 32k
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(10000),      FMT_INC(10000),      FMT_INC(10000),       // 32k
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
 1133|   239k|      FMT_INC(100000),     FMT_INC(100000),     FMT_INC(100000),      // 256k
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(100000),     FMT_INC(100000),     FMT_INC(100000),      // 256k
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(100000),     FMT_INC(100000),     FMT_INC(100000),      // 256k
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
 1134|   239k|      FMT_INC(1000000),    FMT_INC(1000000),    FMT_INC(1000000),     // 2048k
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(1000000),    FMT_INC(1000000),    FMT_INC(1000000),     // 2048k
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(1000000),    FMT_INC(1000000),    FMT_INC(1000000),     // 2048k
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
 1135|   239k|      FMT_INC(10000000),   FMT_INC(10000000),   FMT_INC(10000000),    // 16M
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(10000000),   FMT_INC(10000000),   FMT_INC(10000000),    // 16M
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(10000000),   FMT_INC(10000000),   FMT_INC(10000000),    // 16M
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
 1136|   239k|      FMT_INC(100000000),  FMT_INC(100000000),  FMT_INC(100000000),   // 128M
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(100000000),  FMT_INC(100000000),  FMT_INC(100000000),   // 128M
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(100000000),  FMT_INC(100000000),  FMT_INC(100000000),   // 128M
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
 1137|   239k|      FMT_INC(1000000000), FMT_INC(1000000000), FMT_INC(1000000000),  // 1024M
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(1000000000), FMT_INC(1000000000), FMT_INC(1000000000),  // 1024M
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(1000000000), FMT_INC(1000000000), FMT_INC(1000000000),  // 1024M
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
 1138|   239k|      FMT_INC(1000000000), FMT_INC(1000000000)                        // 4B
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
                    FMT_INC(1000000000), FMT_INC(1000000000)                        // 4B
  ------------------
  |  | 1126|   239k|#  define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T)
  ------------------
 1139|   239k|  };
 1140|   239k|  auto inc = table[FMT_BUILTIN_CLZ(n | 1) ^ 31];
  ------------------
  |  |  206|   239k|#    define FMT_BUILTIN_CLZ(n) __builtin_clz(n)
  ------------------
 1141|   239k|  return static_cast<int>((n + inc) >> 32);
 1142|   239k|}
_ZN3fmt3v126detail12write2digitsIcEEvPT_m:
 1206|  1.26M|FMT_CONSTEXPR20 FMT_INLINE void write2digits(Char* out, size_t value) {
 1207|  1.26M|  if (!is_constant_evaluated() && std::is_same<Char, char>::value &&
  ------------------
  |  Branch (1207:7): [True: 0, Folded]
  |  Branch (1207:35): [True: 0, Folded]
  ------------------
 1208|  1.26M|      !FMT_OPTIMIZE_SIZE) {
  ------------------
  |  |  290|      0|#  define FMT_OPTIMIZE_SIZE 0
  ------------------
  |  Branch (1208:7): [True: 0, Folded]
  ------------------
 1209|  1.26M|    memcpy(out, digits2(value), 2);
 1210|  1.26M|    return;
 1211|  1.26M|  }
 1212|      0|  *out++ = static_cast<Char>('0' + value / 10);
 1213|      0|  *out = static_cast<Char>('0' + value % 10);
 1214|      0|}
_ZN3fmt3v126detail7digits2Em:
 1036|  1.26M|inline auto digits2(size_t value) -> const char* {
 1037|       |  // Align data since unaligned access may be slower when crossing a
 1038|       |  // hardware-specific boundary.
 1039|  1.26M|  alignas(2) static const char data[] =
 1040|  1.26M|      "0001020304050607080910111213141516171819"
 1041|  1.26M|      "2021222324252627282930313233343536373839"
 1042|  1.26M|      "4041424344454647484950515253545556575859"
 1043|  1.26M|      "6061626364656667686970717273747576777879"
 1044|  1.26M|      "8081828384858687888990919293949596979899";
 1045|  1.26M|  return &data[value * 2];
 1046|  1.26M|}
_ZNK3fmt3v1210format_int4dataEv:
 4209|  1.29M|  FMT_CONSTEXPR20 auto data() const -> const char* { return str_; }
_ZNK3fmt3v1210format_int4sizeEv:
 4203|   645k|  FMT_CONSTEXPR20 auto size() const -> size_t {
 4204|   645k|    return detail::to_unsigned(buffer_ - str_ + buffer_size - 1);
 4205|   645k|  }
_ZN3fmt3v126detail6equal2EPKcS3_:
 1200|    167|inline auto equal2(const char* lhs, const char* rhs) -> bool {
 1201|    167|  return memcmp(lhs, rhs, 2) == 0;
 1202|    167|}
_ZN3fmt3v126detail10to_pointerIcEEPT_NS0_14basic_appenderIS3_EEm:
  531|  8.27k|FMT_CONSTEXPR20 auto to_pointer(basic_appender<T> it, size_t n) -> T* {
  532|  8.27k|  buffer<T>& buf = get_container(it);
  533|  8.27k|  buf.try_reserve(buf.size() + n);
  534|  8.27k|  auto size = buf.size();
  535|  8.27k|  if (buf.capacity() < size + n) return nullptr;
  ------------------
  |  Branch (535:7): [True: 0, False: 8.27k]
  ------------------
  536|  8.27k|  buf.try_resize(size + n);
  537|  8.27k|  return buf.data() + size;
  538|  8.27k|}
_ZN3fmt3v126detail12count_digitsEm:
 1096|   727k|FMT_CONSTEXPR20 inline auto count_digits(uint64_t n) -> int {
 1097|   727k|#ifdef FMT_BUILTIN_CLZLL
 1098|   727k|  if (!is_constant_evaluated() && !FMT_OPTIMIZE_SIZE) return do_count_digits(n);
  ------------------
  |  |  290|      0|#  define FMT_OPTIMIZE_SIZE 0
  ------------------
  |  Branch (1098:7): [True: 0, Folded]
  |  Branch (1098:35): [True: 0, Folded]
  ------------------
 1099|      0|#endif
 1100|      0|  return count_digits_fallback(n);
 1101|   727k|}
_ZN3fmt3v126detail15do_count_digitsEm:
 1076|   727k|inline auto do_count_digits(uint64_t n) -> int {
 1077|       |  // This has comparable performance to the version by Kendall Willets
 1078|       |  // (https://github.com/fmtlib/format-benchmark/blob/master/digits10)
 1079|       |  // but uses smaller tables.
 1080|       |  // Maps bsr(n) to ceil(log10(pow(2, bsr(n) + 1) - 1)).
 1081|   727k|  static constexpr uint8_t bsr2log10[] = {
 1082|   727k|      1,  1,  1,  2,  2,  2,  3,  3,  3,  4,  4,  4,  4,  5,  5,  5,
 1083|   727k|      6,  6,  6,  7,  7,  7,  7,  8,  8,  8,  9,  9,  9,  10, 10, 10,
 1084|   727k|      10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15,
 1085|   727k|      15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20};
 1086|   727k|  auto t = bsr2log10[FMT_BUILTIN_CLZLL(n | 1) ^ 63];
  ------------------
  |  |  209|   727k|#    define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n)
  ------------------
 1087|   727k|  static constexpr uint64_t zero_or_powers_of_10[] = {
 1088|   727k|      0, 0, FMT_POWERS_OF_10(1U), FMT_POWERS_OF_10(1000000000ULL),
  ------------------
  |  | 1030|   727k|  factor * 10, (factor) * 100, (factor) * 1000, (factor) * 10000, \
  |  | 1031|   727k|      (factor) * 100000, (factor) * 1000000, (factor) * 10000000, \
  |  | 1032|   727k|      (factor) * 100000000, (factor) * 1000000000
  ------------------
                    0, 0, FMT_POWERS_OF_10(1U), FMT_POWERS_OF_10(1000000000ULL),
  ------------------
  |  | 1030|   727k|  factor * 10, (factor) * 100, (factor) * 1000, (factor) * 10000, \
  |  | 1031|   727k|      (factor) * 100000, (factor) * 1000000, (factor) * 10000000, \
  |  | 1032|   727k|      (factor) * 100000000, (factor) * 1000000000
  ------------------
 1089|   727k|      10000000000000000000ULL};
 1090|   727k|  return t - (n < zero_or_powers_of_10[t]);
 1091|   727k|}
_ZN3fmt3v126detail14format_decimalIcmEEPT_S4_T0_i:
 1242|  3.29k|                                             int num_digits) -> Char* {
 1243|  3.29k|  do_format_decimal(out, value, num_digits);
 1244|  3.29k|  return out + num_digits;
 1245|  3.29k|}
_ZN3fmt3v126detail17do_format_decimalIcmEEPT_S4_T0_i:
 1220|   432k|    -> Char* {
 1221|   432k|  FMT_ASSERT(size >= count_digits(value), "invalid digit count");
  ------------------
  |  |  395|   432k|    ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \
  |  |  ------------------
  |  |  |  Branch (395:6): [True: 432k, False: 0]
  |  |  ------------------
  |  |  396|   432k|         ? (void)0                                                          \
  |  |  397|   432k|         : ::fmt::assert_fail(__FILE__, __LINE__, (message)))
  ------------------
 1222|   432k|  unsigned n = to_unsigned(size);
 1223|  1.19M|  while (value >= 100) {
  ------------------
  |  Branch (1223:10): [True: 760k, False: 432k]
  ------------------
 1224|       |    // Integer division is slow so do it for a group of two digits instead
 1225|       |    // of for every digit. The idea comes from the talk by Alexandrescu
 1226|       |    // "Three Optimization Tips for C++". See speed-test for a comparison.
 1227|   760k|    n -= 2;
 1228|   760k|    write2digits(out + n, static_cast<unsigned>(value % 100));
 1229|   760k|    value /= 100;
 1230|   760k|  }
 1231|   432k|  if (value >= 10) {
  ------------------
  |  Branch (1231:7): [True: 102k, False: 329k]
  ------------------
 1232|   102k|    n -= 2;
 1233|   102k|    write2digits(out + n, static_cast<unsigned>(value));
 1234|   329k|  } else {
 1235|   329k|    out[--n] = static_cast<Char>('0' + value);
 1236|   329k|  }
 1237|   432k|  return out + n;
 1238|   432k|}
_ZN3fmt3v126detail14format_decimalIcmNS0_14basic_appenderIcEETnNSt3__19enable_ifIXntsr3std10is_pointerINS5_9remove_cvINS5_16remove_referenceIT1_E4typeEE4typeEEE5valueEiE4typeELi0EEES9_S9_T0_i:
 1250|  1.70k|    -> OutputIt {
 1251|  1.70k|  if (auto ptr = to_pointer<Char>(out, to_unsigned(num_digits))) {
  ------------------
  |  Branch (1251:12): [True: 1.70k, False: 0]
  ------------------
 1252|  1.70k|    do_format_decimal(ptr, value, num_digits);
 1253|  1.70k|    return out;
 1254|  1.70k|  }
 1255|       |  // Buffer is large enough to hold all digits (digits10 + 1).
 1256|      0|  char buffer[digits10<UInt>() + 1];
 1257|      0|  if (is_constant_evaluated()) fill_n(buffer, sizeof(buffer), '\0');
  ------------------
  |  Branch (1257:7): [Folded, False: 0]
  ------------------
 1258|      0|  do_format_decimal(buffer, value, num_digits);
 1259|      0|  return copy_noinline<Char>(buffer, buffer + num_digits, out);
 1260|  1.70k|}
_ZN3fmt3v126detail21default_arg_formatterIcEclIyTnNSt3__19enable_ifIXsr10is_builtinIT_EE5valueEiE4typeELi0EEEvS7_:
 3660|  3.29k|  void operator()(T value) {
 3661|  3.29k|    write<Char>(out, value);
 3662|  3.29k|  }
_ZN3fmt3v126detail5writeIcNS0_14basic_appenderIcEEyTnNSt3__19enable_ifIXaaaasr11is_integralIT1_EE5valuentsr3std7is_sameIS7_bEE5valuentsr3std7is_sameIS7_T_EE5valueEiE4typeELi0EEET0_SB_S7_:
 2295|  3.29k|FMT_CONSTEXPR auto write(OutputIt out, T value) -> OutputIt {
 2296|  3.29k|  auto abs_value = static_cast<uint32_or_64_or_128_t<T>>(value);
 2297|  3.29k|  bool negative = is_negative(value);
 2298|       |  // Don't do -abs_value since it trips unsigned-integer-overflow sanitizer.
 2299|  3.29k|  if (negative) abs_value = ~abs_value + 1;
  ------------------
  |  Branch (2299:7): [True: 0, False: 3.29k]
  ------------------
 2300|  3.29k|  int num_digits = count_digits(abs_value);
 2301|  3.29k|  auto size = (negative ? 1 : 0) + static_cast<size_t>(num_digits);
  ------------------
  |  Branch (2301:16): [True: 0, False: 3.29k]
  ------------------
 2302|  3.29k|  if (auto ptr = to_pointer<Char>(out, size)) {
  ------------------
  |  Branch (2302:12): [True: 3.29k, False: 0]
  ------------------
 2303|  3.29k|    if (negative) *ptr++ = static_cast<Char>('-');
  ------------------
  |  Branch (2303:9): [True: 0, False: 3.29k]
  ------------------
 2304|  3.29k|    format_decimal<Char>(ptr, abs_value, num_digits);
 2305|  3.29k|    return out;
 2306|  3.29k|  }
 2307|      0|  if (negative) *out++ = static_cast<Char>('-');
  ------------------
  |  Branch (2307:7): [True: 0, False: 0]
  ------------------
 2308|      0|  return format_decimal<Char>(out, abs_value, num_digits);
 2309|  3.29k|}
_ZN3fmt3v126detail11is_negativeIyTnNSt3__19enable_ifIXntsr9is_signedIT_EE5valueEiE4typeELi0EEEbS5_:
 1015|  23.9k|constexpr auto is_negative(T) -> bool {
 1016|  23.9k|  return false;
 1017|  23.9k|}
_ZNK3fmt3v1212format_facetINSt3__16localeEE3putENS0_14basic_appenderIcEENS0_9loc_valueERKNS0_12format_specsE:
 3913|  5.40k|      -> bool {
 3914|  5.40k|    return do_put(out, val, specs);
 3915|  5.40k|  }
_ZN3fmt3v129loc_value5visitINS0_6detail10loc_writerIcEEEEDTclfp_Li0EEEOT_:
 3885|  5.40k|  template <typename Visitor> auto visit(Visitor&& vis) -> decltype(vis(0)) {
 3886|  5.40k|    return value_.visit(vis);
 3887|  5.40k|  }
_ZN3fmt3v126detail9write_intINS0_14basic_appenderIcEEmcEET_S5_T0_jRKNS0_12format_specsERKNS1_14digit_groupingIT1_EE:
 1941|  5.40k|    -> OutputIt {
 1942|  5.40k|  static_assert(std::is_same<uint64_or_128_t<UInt>, UInt>::value, "");
 1943|  5.40k|  int num_digits = 0;
 1944|  5.40k|  auto buffer = memory_buffer();
 1945|  5.40k|  switch (specs.type()) {
 1946|      0|  default: FMT_ASSERT(false, ""); FMT_FALLTHROUGH;
  ------------------
  |  |  395|      0|    ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \
  |  |  ------------------
  |  |  |  Branch (395:6): [Folded, False: 0]
  |  |  ------------------
  |  |  396|      0|         ? (void)0                                                          \
  |  |  397|      0|         : ::fmt::assert_fail(__FILE__, __LINE__, (message)))
  ------------------
                default: FMT_ASSERT(false, ""); FMT_FALLTHROUGH;
  ------------------
  |  |  181|      0|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
  |  Branch (1946:3): [True: 0, False: 5.40k]
  ------------------
 1947|  1.36k|  case presentation_type::none:
  ------------------
  |  Branch (1947:3): [True: 1.36k, False: 4.04k]
  ------------------
 1948|  1.70k|  case presentation_type::dec:
  ------------------
  |  Branch (1948:3): [True: 335, False: 5.07k]
  ------------------
 1949|  1.70k|    num_digits = count_digits(value);
 1950|  1.70k|    format_decimal<char>(appender(buffer), value, num_digits);
 1951|  1.70k|    break;
 1952|  1.58k|  case presentation_type::hex:
  ------------------
  |  Branch (1952:3): [True: 1.58k, False: 3.82k]
  ------------------
 1953|  1.58k|    if (specs.alt())
  ------------------
  |  Branch (1953:9): [True: 784, False: 798]
  ------------------
 1954|    784|      prefix_append(prefix, unsigned(specs.upper() ? 'X' : 'x') << 8 | '0');
  ------------------
  |  Branch (1954:38): [True: 566, False: 218]
  ------------------
 1955|  1.58k|    num_digits = count_digits<4>(value);
 1956|  1.58k|    format_base2e<char>(4, appender(buffer), value, num_digits, specs.upper());
 1957|  1.58k|    break;
 1958|    877|  case presentation_type::oct:
  ------------------
  |  Branch (1958:3): [True: 877, False: 4.53k]
  ------------------
 1959|    877|    num_digits = count_digits<3>(value);
 1960|       |    // Octal prefix '0' is counted as a digit, so only add it if precision
 1961|       |    // is not greater than the number of digits.
 1962|    877|    if (specs.alt() && specs.precision <= num_digits && value != 0)
  ------------------
  |  Branch (1962:9): [True: 516, False: 361]
  |  Branch (1962:24): [True: 516, False: 0]
  |  Branch (1962:57): [True: 321, False: 195]
  ------------------
 1963|    321|      prefix_append(prefix, '0');
 1964|    877|    format_base2e<char>(3, appender(buffer), value, num_digits);
 1965|    877|    break;
 1966|    821|  case presentation_type::bin:
  ------------------
  |  Branch (1966:3): [True: 821, False: 4.58k]
  ------------------
 1967|    821|    if (specs.alt())
  ------------------
  |  Branch (1967:9): [True: 416, False: 405]
  ------------------
 1968|    416|      prefix_append(prefix, unsigned(specs.upper() ? 'B' : 'b') << 8 | '0');
  ------------------
  |  Branch (1968:38): [True: 70, False: 346]
  ------------------
 1969|    821|    num_digits = count_digits<1>(value);
 1970|    821|    format_base2e<char>(1, appender(buffer), value, num_digits);
 1971|    821|    break;
 1972|    425|  case presentation_type::chr:
  ------------------
  |  Branch (1972:3): [True: 425, False: 4.98k]
  ------------------
 1973|    425|    return write_char<Char>(out, static_cast<Char>(value), specs);
 1974|  5.40k|  }
 1975|       |
 1976|  4.98k|  unsigned size = (prefix != 0 ? prefix >> 24 : 0) + to_unsigned(num_digits) +
  ------------------
  |  Branch (1976:20): [True: 1.52k, False: 3.46k]
  ------------------
 1977|  4.98k|                  to_unsigned(grouping.count_separators(num_digits));
 1978|  4.98k|  return write_padded<Char, align::right>(
 1979|  4.98k|      out, specs, size, size, [&](reserve_iterator<OutputIt> it) {
 1980|  4.98k|        for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8)
 1981|  4.98k|          *it++ = static_cast<Char>(p & 0xff);
 1982|  4.98k|        return grouping.apply(it, string_view(buffer.data(), buffer.size()));
 1983|  4.98k|      });
 1984|  5.40k|}
_ZN3fmt3v1219basic_memory_bufferIcLm500ENS0_6detail9allocatorIcEEEC2ERKS4_:
  840|  5.40k|      : detail::buffer<T>(grow), alloc_(alloc) {
  841|  5.40k|    this->set(store_, SIZE);
  842|  5.40k|    if (detail::is_constant_evaluated()) detail::fill_n(store_, SIZE, T());
  ------------------
  |  Branch (842:9): [Folded, False: 5.40k]
  ------------------
  843|  5.40k|  }
_ZN3fmt3v126detail13prefix_appendERjj:
 1932|  4.39k|FMT_CONSTEXPR inline void prefix_append(unsigned& prefix, unsigned value) {
 1933|  4.39k|  prefix |= prefix != 0 ? value << 8 : value;
  ------------------
  |  Branch (1933:13): [True: 0, False: 4.39k]
  ------------------
 1934|  4.39k|  prefix += (1u + (value > 0xff ? 1 : 0)) << 24;
  ------------------
  |  Branch (1934:20): [True: 2.94k, False: 1.44k]
  ------------------
 1935|  4.39k|}
_ZN3fmt3v126detail12count_digitsILi4EmEEiT0_:
 1105|  1.58k|FMT_CONSTEXPR auto count_digits(UInt n) -> int {
 1106|  1.58k|#ifdef FMT_BUILTIN_CLZ
 1107|  1.58k|  if (!is_constant_evaluated() && num_bits<UInt>() == 32)
  ------------------
  |  Branch (1107:7): [True: 0, Folded]
  |  Branch (1107:35): [Folded, False: 0]
  ------------------
 1108|      0|    return (FMT_BUILTIN_CLZ(static_cast<uint32_t>(n) | 1) ^ 31) / BITS + 1;
  ------------------
  |  |  206|      0|#    define FMT_BUILTIN_CLZ(n) __builtin_clz(n)
  ------------------
 1109|  1.58k|#endif
 1110|       |  // Lambda avoids unreachable code warnings from NVHPC.
 1111|  1.58k|  return [](UInt m) {
 1112|  1.58k|    int num_digits = 0;
 1113|  1.58k|    do {
 1114|  1.58k|      ++num_digits;
 1115|  1.58k|    } while ((m >>= BITS) != 0);
 1116|  1.58k|    return num_digits;
 1117|  1.58k|  }(n);
 1118|  1.58k|}
_ZZN3fmt3v126detail12count_digitsILi4EmEEiT0_ENKUlmE_clEm:
 1111|  1.58k|  return [](UInt m) {
 1112|  1.58k|    int num_digits = 0;
 1113|  24.9k|    do {
 1114|  24.9k|      ++num_digits;
 1115|  24.9k|    } while ((m >>= BITS) != 0);
  ------------------
  |  Branch (1115:14): [True: 23.3k, False: 1.58k]
  ------------------
 1116|  1.58k|    return num_digits;
 1117|  1.58k|  }(n);
_ZN3fmt3v126detail13format_base2eIcNS0_14basic_appenderIcEEmTnNSt3__19enable_ifIXsr23is_back_insert_iteratorIT0_EE5valueEiE4typeELi0EEES7_iS7_T1_ib:
 1287|  3.28k|    -> OutputIt {
 1288|  3.28k|  if (auto ptr = to_pointer<Char>(out, to_unsigned(num_digits))) {
  ------------------
  |  Branch (1288:12): [True: 3.28k, False: 0]
  ------------------
 1289|  3.28k|    format_base2e(base_bits, ptr, value, num_digits, upper);
 1290|  3.28k|    return out;
 1291|  3.28k|  }
 1292|       |  // Make buffer large enough for any base.
 1293|      0|  char buffer[num_bits<UInt>()];
 1294|      0|  if (is_constant_evaluated()) fill_n(buffer, sizeof(buffer), '\0');
  ------------------
  |  Branch (1294:7): [Folded, False: 0]
  ------------------
 1295|      0|  format_base2e(base_bits, buffer, value, num_digits, upper);
 1296|      0|  return detail::copy_noinline<Char>(buffer, buffer + num_digits, out);
 1297|  3.28k|}
_ZN3fmt3v126detail13format_base2eIcmEEPT_iS4_T0_ib:
 1278|  3.28k|                                 int num_digits, bool upper = false) -> Char* {
 1279|  3.28k|  do_format_base2e(base_bits, out, value, num_digits, upper);
 1280|  3.28k|  return out + num_digits;
 1281|  3.28k|}
_ZN3fmt3v126detail16do_format_base2eIcmEEPT_iS4_T0_ib:
 1264|  10.2k|                                    int size, bool upper = false) -> Char* {
 1265|  10.2k|  out += size;
 1266|   295k|  do {
 1267|   295k|    const char* digits = upper ? "0123456789ABCDEF" : "0123456789abcdef";
  ------------------
  |  Branch (1267:26): [True: 23.5k, False: 272k]
  ------------------
 1268|   295k|    unsigned digit = static_cast<unsigned>(value & ((1u << base_bits) - 1));
 1269|   295k|    *--out = static_cast<Char>(base_bits < 4 ? static_cast<char>('0' + digit)
  ------------------
  |  Branch (1269:32): [True: 248k, False: 47.0k]
  ------------------
 1270|   295k|                                             : digits[digit]);
 1271|   295k|  } while ((value >>= base_bits) != 0);
  ------------------
  |  Branch (1271:12): [True: 285k, False: 10.2k]
  ------------------
 1272|  10.2k|  return out;
 1273|  10.2k|}
_ZN3fmt3v126detail12count_digitsILi3EmEEiT0_:
 1105|    877|FMT_CONSTEXPR auto count_digits(UInt n) -> int {
 1106|    877|#ifdef FMT_BUILTIN_CLZ
 1107|    877|  if (!is_constant_evaluated() && num_bits<UInt>() == 32)
  ------------------
  |  Branch (1107:7): [True: 0, Folded]
  |  Branch (1107:35): [Folded, False: 0]
  ------------------
 1108|      0|    return (FMT_BUILTIN_CLZ(static_cast<uint32_t>(n) | 1) ^ 31) / BITS + 1;
  ------------------
  |  |  206|      0|#    define FMT_BUILTIN_CLZ(n) __builtin_clz(n)
  ------------------
 1109|    877|#endif
 1110|       |  // Lambda avoids unreachable code warnings from NVHPC.
 1111|    877|  return [](UInt m) {
 1112|    877|    int num_digits = 0;
 1113|    877|    do {
 1114|    877|      ++num_digits;
 1115|    877|    } while ((m >>= BITS) != 0);
 1116|    877|    return num_digits;
 1117|    877|  }(n);
 1118|    877|}
_ZZN3fmt3v126detail12count_digitsILi3EmEEiT0_ENKUlmE_clEm:
 1111|    877|  return [](UInt m) {
 1112|    877|    int num_digits = 0;
 1113|  13.7k|    do {
 1114|  13.7k|      ++num_digits;
 1115|  13.7k|    } while ((m >>= BITS) != 0);
  ------------------
  |  Branch (1115:14): [True: 12.8k, False: 877]
  ------------------
 1116|    877|    return num_digits;
 1117|    877|  }(n);
_ZN3fmt3v126detail12count_digitsILi1EmEEiT0_:
 1105|    821|FMT_CONSTEXPR auto count_digits(UInt n) -> int {
 1106|    821|#ifdef FMT_BUILTIN_CLZ
 1107|    821|  if (!is_constant_evaluated() && num_bits<UInt>() == 32)
  ------------------
  |  Branch (1107:7): [True: 0, Folded]
  |  Branch (1107:35): [Folded, False: 0]
  ------------------
 1108|      0|    return (FMT_BUILTIN_CLZ(static_cast<uint32_t>(n) | 1) ^ 31) / BITS + 1;
  ------------------
  |  |  206|      0|#    define FMT_BUILTIN_CLZ(n) __builtin_clz(n)
  ------------------
 1109|    821|#endif
 1110|       |  // Lambda avoids unreachable code warnings from NVHPC.
 1111|    821|  return [](UInt m) {
 1112|    821|    int num_digits = 0;
 1113|    821|    do {
 1114|    821|      ++num_digits;
 1115|    821|    } while ((m >>= BITS) != 0);
 1116|    821|    return num_digits;
 1117|    821|  }(n);
 1118|    821|}
_ZZN3fmt3v126detail12count_digitsILi1EmEEiT0_ENKUlmE_clEm:
 1111|    821|  return [](UInt m) {
 1112|    821|    int num_digits = 0;
 1113|  51.2k|    do {
 1114|  51.2k|      ++num_digits;
 1115|  51.2k|    } while ((m >>= BITS) != 0);
  ------------------
  |  Branch (1115:14): [True: 50.3k, False: 821]
  ------------------
 1116|    821|    return num_digits;
 1117|    821|  }(n);
_ZN3fmt3v126detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format_specsE:
 1859|  1.20k|                              const format_specs& specs) -> OutputIt {
 1860|  1.20k|  bool is_debug = specs.type() == presentation_type::debug;
 1861|  1.20k|  return write_padded<Char>(out, specs, 1, [=](reserve_iterator<OutputIt> it) {
 1862|  1.20k|    if (is_debug) return write_escaped_char(it, value);
 1863|  1.20k|    *it++ = value;
 1864|  1.20k|    return it;
 1865|  1.20k|  });
 1866|  1.20k|}
_ZN3fmt3v126detail12write_paddedIcLNS0_5alignE1ENS0_14basic_appenderIcEEZNS1_10write_charIcS5_EET0_S7_T_RKNS0_12format_specsEEUlS5_E_EET1_SD_SB_mOT2_:
 1709|  1.20k|                            size_t size, F&& f) -> OutputIt {
 1710|  1.20k|  return write_padded<Char, default_align>(out, specs, size, size, f);
 1711|  1.20k|}
_ZN3fmt3v126detail12write_paddedIcLNS0_5alignE1ENS0_14basic_appenderIcEERZNS1_10write_charIcS5_EET0_S7_T_RKNS0_12format_specsEEUlS5_E_EET1_SE_SB_mmOT2_:
 1688|  1.20k|                                size_t size, size_t width, F&& f) -> OutputIt {
 1689|  1.20k|  static_assert(default_align == align::left || default_align == align::right,
 1690|  1.20k|                "");
 1691|  1.20k|  unsigned spec_width = to_unsigned(specs.width);
 1692|  1.20k|  size_t padding = spec_width > width ? spec_width - width : 0;
  ------------------
  |  Branch (1692:20): [True: 548, False: 657]
  ------------------
 1693|       |  // Shifts are encoded as string literals because static constexpr is not
 1694|       |  // supported in constexpr functions.
 1695|  1.20k|  auto* shifts =
 1696|  1.20k|      default_align == align::left ? "\x1f\x1f\x00\x01" : "\x00\x1f\x00\x01";
  ------------------
  |  Branch (1696:7): [True: 1.20k, Folded]
  ------------------
 1697|  1.20k|  size_t left_padding = padding >> shifts[static_cast<int>(specs.align())];
 1698|  1.20k|  size_t right_padding = padding - left_padding;
 1699|  1.20k|  auto it = reserve(out, size + padding * specs.fill_size());
 1700|  1.20k|  if (left_padding != 0) it = fill<Char>(it, left_padding, specs);
  ------------------
  |  Branch (1700:7): [True: 356, False: 849]
  ------------------
 1701|  1.20k|  it = f(it);
 1702|  1.20k|  if (right_padding != 0) it = fill<Char>(it, right_padding, specs);
  ------------------
  |  Branch (1702:7): [True: 194, False: 1.01k]
  ------------------
 1703|  1.20k|  return base_iterator(out, it);
 1704|  1.20k|}
_ZN3fmt3v126detail7reserveIcEENS0_14basic_appenderIT_EES5_m:
  506|  36.2k|    -> basic_appender<T> {
  507|  36.2k|  buffer<T>& buf = get_container(it);
  508|  36.2k|  buf.try_reserve(buf.size() + n);
  509|  36.2k|  return it;
  510|  36.2k|}
_ZN3fmt3v126detail4fillIcNS0_14basic_appenderIcEEEET0_S5_mRKNS0_11basic_specsE:
 1673|  8.08k|                                     const basic_specs& specs) -> OutputIt {
 1674|  8.08k|  auto fill_size = specs.fill_size();
 1675|  8.08k|  if (fill_size == 1) return detail::fill_n(it, n, specs.fill_unit<Char>());
  ------------------
  |  Branch (1675:7): [True: 6.89k, False: 1.18k]
  ------------------
 1676|  1.18k|  if (const Char* data = specs.fill<Char>()) {
  ------------------
  |  Branch (1676:19): [True: 1.18k, False: 0]
  ------------------
 1677|   748M|    for (size_t i = 0; i < n; ++i) it = copy<Char>(data, data + fill_size, it);
  ------------------
  |  Branch (1677:24): [True: 748M, False: 1.18k]
  ------------------
 1678|  1.18k|  }
 1679|  1.18k|  return it;
 1680|  8.08k|}
_ZN3fmt3v126detail6fill_nINS0_14basic_appenderIcEEmcEET_S5_T0_RKT1_:
  558|  6.89k|    -> OutputIt {
  559|  82.6G|  for (Size i = 0; i < count; ++i) *out++ = value;
  ------------------
  |  Branch (559:20): [True: 82.6G, False: 6.89k]
  ------------------
  560|  6.89k|  return out;
  561|  6.89k|}
_ZZN3fmt3v126detail10write_charIcNS0_14basic_appenderIcEEEET0_S5_T_RKNS0_12format_specsEENKUlS4_E_clES4_:
 1861|  1.20k|  return write_padded<Char>(out, specs, 1, [=](reserve_iterator<OutputIt> it) {
 1862|  1.20k|    if (is_debug) return write_escaped_char(it, value);
  ------------------
  |  Branch (1862:9): [True: 0, False: 1.20k]
  ------------------
 1863|  1.20k|    *it++ = value;
 1864|  1.20k|    return it;
 1865|  1.20k|  });
_ZN3fmt3v126detail12needs_escapeEj:
 1740|   121M|inline auto needs_escape(uint32_t cp) -> bool {
 1741|   121M|  if (cp < 0x20 || cp == 0x7f || cp == '"' || cp == '\\') return true;
  ------------------
  |  Branch (1741:7): [True: 78.2M, False: 43.3M]
  |  Branch (1741:20): [True: 42.3k, False: 43.2M]
  |  Branch (1741:34): [True: 611k, False: 42.6M]
  |  Branch (1741:47): [True: 6.49k, False: 42.6M]
  ------------------
 1742|  42.6M|  if (const_check(FMT_OPTIMIZE_SIZE > 1)) return false;
  ------------------
  |  |  290|  42.6M|#  define FMT_OPTIMIZE_SIZE 0
  ------------------
  |  Branch (1742:7): [Folded, False: 42.6M]
  ------------------
 1743|  42.6M|  return !is_printable(cp);
 1744|  42.6M|}
_ZN3fmt3v126detail16write_escaped_cpINS0_14basic_appenderIcEEcEET_S5_RKNS1_18find_escape_resultIT0_EE:
 1790|  61.3M|    -> OutputIt {
 1791|  61.3M|  auto c = static_cast<Char>(escape.cp);
 1792|  61.3M|  switch (escape.cp) {
 1793|   657k|  case '\n':
  ------------------
  |  Branch (1793:3): [True: 657k, False: 60.7M]
  ------------------
 1794|   657k|    *out++ = static_cast<Char>('\\');
 1795|   657k|    c = static_cast<Char>('n');
 1796|   657k|    break;
 1797|   109k|  case '\r':
  ------------------
  |  Branch (1797:3): [True: 109k, False: 61.2M]
  ------------------
 1798|   109k|    *out++ = static_cast<Char>('\\');
 1799|   109k|    c = static_cast<Char>('r');
 1800|   109k|    break;
 1801|  6.87M|  case '\t':
  ------------------
  |  Branch (1801:3): [True: 6.87M, False: 54.4M]
  ------------------
 1802|  6.87M|    *out++ = static_cast<Char>('\\');
 1803|  6.87M|    c = static_cast<Char>('t');
 1804|  6.87M|    break;
 1805|   589k|  case '"':  FMT_FALLTHROUGH;
  ------------------
  |  |  181|   589k|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
  |  Branch (1805:3): [True: 589k, False: 60.7M]
  ------------------
 1806|   589k|  case '\'': FMT_FALLTHROUGH;
  ------------------
  |  |  181|   589k|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
  |  Branch (1806:3): [True: 0, False: 61.3M]
  ------------------
 1807|   593k|  case '\\': *out++ = static_cast<Char>('\\'); break;
  ------------------
  |  Branch (1807:3): [True: 3.27k, False: 61.3M]
  ------------------
 1808|  53.1M|  default:
  ------------------
  |  Branch (1808:3): [True: 53.1M, False: 8.23M]
  ------------------
 1809|  53.1M|    if (escape.cp < 0x100) return write_codepoint<2, Char>(out, 'x', escape.cp);
  ------------------
  |  Branch (1809:9): [True: 44.9M, False: 8.23M]
  ------------------
 1810|  8.23M|    if (escape.cp < 0x10000)
  ------------------
  |  Branch (1810:9): [True: 35.9k, False: 8.19M]
  ------------------
 1811|  35.9k|      return write_codepoint<4, Char>(out, 'u', escape.cp);
 1812|  8.19M|    if (escape.cp < 0x110000)
  ------------------
  |  Branch (1812:9): [True: 24.9k, False: 8.17M]
  ------------------
 1813|  24.9k|      return write_codepoint<8, Char>(out, 'U', escape.cp);
 1814|  8.17M|    for (Char escape_char : basic_string_view<Char>(
  ------------------
  |  Branch (1814:27): [True: 8.17M, False: 8.17M]
  ------------------
 1815|  8.17M|             escape.begin, to_unsigned(escape.end - escape.begin))) {
 1816|  8.17M|      out = write_codepoint<2, Char>(out, 'x',
 1817|  8.17M|                                     static_cast<uint32_t>(escape_char) & 0xFF);
 1818|  8.17M|    }
 1819|  8.17M|    return out;
 1820|  61.3M|  }
 1821|  8.23M|  *out++ = c;
 1822|  8.23M|  return out;
 1823|  61.3M|}
_ZN3fmt3v126detail15write_codepointILm2EcNS0_14basic_appenderIcEEEET1_S5_cj:
 1779|  53.0M|auto write_codepoint(OutputIt out, char prefix, uint32_t cp) -> OutputIt {
 1780|  53.0M|  *out++ = static_cast<Char>('\\');
 1781|  53.0M|  *out++ = static_cast<Char>(prefix);
 1782|  53.0M|  Char buf[width];
 1783|  53.0M|  fill_n(buf, width, static_cast<Char>('0'));
 1784|  53.0M|  format_base2e(4, buf, cp, width);
 1785|  53.0M|  return copy<Char>(buf, buf + width, out);
 1786|  53.0M|}
_ZN3fmt3v126detail6fill_nIcmEEPT_S4_T0_c:
  563|  81.8M|FMT_CONSTEXPR20 auto fill_n(T* out, Size count, char value) -> T* {
  564|  81.8M|  if (is_constant_evaluated()) return fill_n<T*, Size, T>(out, count, value);
  ------------------
  |  Branch (564:7): [Folded, False: 81.8M]
  ------------------
  565|  81.8M|  static_assert(sizeof(T) == 1,
  566|  81.8M|                "sizeof(T) must be 1 to use char for initialization");
  567|  81.8M|  std::memset(out, value, to_unsigned(count));
  568|  81.8M|  return out + count;
  569|  81.8M|}
_ZN3fmt3v126detail13format_base2eIcjEEPT_iS4_T0_ib:
 1278|  81.8M|                                 int num_digits, bool upper = false) -> Char* {
 1279|  81.8M|  do_format_base2e(base_bits, out, value, num_digits, upper);
 1280|  81.8M|  return out + num_digits;
 1281|  81.8M|}
_ZN3fmt3v126detail16do_format_base2eIcjEEPT_iS4_T0_ib:
 1264|  81.8M|                                    int size, bool upper = false) -> Char* {
 1265|  81.8M|  out += size;
 1266|   102M|  do {
 1267|   102M|    const char* digits = upper ? "0123456789ABCDEF" : "0123456789abcdef";
  ------------------
  |  Branch (1267:26): [True: 0, False: 102M]
  ------------------
 1268|   102M|    unsigned digit = static_cast<unsigned>(value & ((1u << base_bits) - 1));
 1269|   102M|    *--out = static_cast<Char>(base_bits < 4 ? static_cast<char>('0' + digit)
  ------------------
  |  Branch (1269:32): [True: 0, False: 102M]
  ------------------
 1270|   102M|                                             : digits[digit]);
 1271|   102M|  } while ((value >>= base_bits) != 0);
  ------------------
  |  Branch (1271:12): [True: 20.4M, False: 81.8M]
  ------------------
 1272|  81.8M|  return out;
 1273|  81.8M|}
_ZN3fmt3v126detail15write_codepointILm4EcNS0_14basic_appenderIcEEEET1_S5_cj:
 1779|  35.9k|auto write_codepoint(OutputIt out, char prefix, uint32_t cp) -> OutputIt {
 1780|  35.9k|  *out++ = static_cast<Char>('\\');
 1781|  35.9k|  *out++ = static_cast<Char>(prefix);
 1782|  35.9k|  Char buf[width];
 1783|  35.9k|  fill_n(buf, width, static_cast<Char>('0'));
 1784|  35.9k|  format_base2e(4, buf, cp, width);
 1785|  35.9k|  return copy<Char>(buf, buf + width, out);
 1786|  35.9k|}
_ZN3fmt3v126detail15write_codepointILm8EcNS0_14basic_appenderIcEEEET1_S5_cj:
 1779|  24.9k|auto write_codepoint(OutputIt out, char prefix, uint32_t cp) -> OutputIt {
 1780|  24.9k|  *out++ = static_cast<Char>('\\');
 1781|  24.9k|  *out++ = static_cast<Char>(prefix);
 1782|  24.9k|  Char buf[width];
 1783|  24.9k|  fill_n(buf, width, static_cast<Char>('0'));
 1784|  24.9k|  format_base2e(4, buf, cp, width);
 1785|  24.9k|  return copy<Char>(buf, buf + width, out);
 1786|  24.9k|}
_ZN3fmt3v126detail13base_iteratorINS0_14basic_appenderIcEEEET_S5_S5_:
  550|  32.2k|constexpr auto base_iterator(Iterator, Iterator it) -> Iterator {
  551|  32.2k|  return it;
  552|  32.2k|}
_ZNK3fmt3v126detail14digit_groupingIcE16count_separatorsEi:
 1901|  4.98k|  auto count_separators(int num_digits) const -> int {
 1902|  4.98k|    int count = 0;
 1903|  4.98k|    auto state = initial_state();
 1904|  4.98k|    while (num_digits > next(state)) ++count;
  ------------------
  |  Branch (1904:12): [True: 0, False: 4.98k]
  ------------------
 1905|  4.98k|    return count;
 1906|  4.98k|  }
_ZNK3fmt3v126detail14digit_groupingIcE13initial_stateEv:
 1877|  9.96k|  auto initial_state() const -> next_state { return {grouping_.begin(), 0}; }
_ZNK3fmt3v126detail14digit_groupingIcE4nextERNS3_10next_stateE:
 1880|  9.96k|  auto next(next_state& state) const -> int {
 1881|  9.96k|    if (thousands_sep_.empty()) return max_value<int>();
  ------------------
  |  Branch (1881:9): [True: 9.96k, False: 0]
  ------------------
 1882|      0|    if (state.group == grouping_.end()) return state.pos += grouping_.back();
  ------------------
  |  Branch (1882:9): [True: 0, False: 0]
  ------------------
 1883|      0|    if (*state.group <= 0 || *state.group == max_value<char>())
  ------------------
  |  Branch (1883:9): [True: 0, False: 0]
  |  Branch (1883:30): [True: 0, False: 0]
  ------------------
 1884|      0|      return max_value<int>();
 1885|      0|    state.pos += *state.group++;
 1886|      0|    return state.pos;
 1887|      0|  }
_ZN3fmt3v126detail9max_valueIiEET_v:
  427|  11.1k|template <typename T> constexpr auto max_value() -> T {
  428|  11.1k|  return (std::numeric_limits<T>::max)();
  429|  11.1k|}
_ZN3fmt3v126detail12write_paddedIcLNS0_5alignE2ENS0_14basic_appenderIcEEZNS1_9write_intIS5_mcEET_S7_T0_jRKNS0_12format_specsERKNS1_14digit_groupingIT1_EEEUlS5_E_EESD_SD_SB_mmOT2_:
 1688|  4.98k|                                size_t size, size_t width, F&& f) -> OutputIt {
 1689|  4.98k|  static_assert(default_align == align::left || default_align == align::right,
 1690|  4.98k|                "");
 1691|  4.98k|  unsigned spec_width = to_unsigned(specs.width);
 1692|  4.98k|  size_t padding = spec_width > width ? spec_width - width : 0;
  ------------------
  |  Branch (1692:20): [True: 1.30k, False: 3.67k]
  ------------------
 1693|       |  // Shifts are encoded as string literals because static constexpr is not
 1694|       |  // supported in constexpr functions.
 1695|  4.98k|  auto* shifts =
 1696|  4.98k|      default_align == align::left ? "\x1f\x1f\x00\x01" : "\x00\x1f\x00\x01";
  ------------------
  |  Branch (1696:7): [Folded, False: 4.98k]
  ------------------
 1697|  4.98k|  size_t left_padding = padding >> shifts[static_cast<int>(specs.align())];
 1698|  4.98k|  size_t right_padding = padding - left_padding;
 1699|  4.98k|  auto it = reserve(out, size + padding * specs.fill_size());
 1700|  4.98k|  if (left_padding != 0) it = fill<Char>(it, left_padding, specs);
  ------------------
  |  Branch (1700:7): [True: 992, False: 3.99k]
  ------------------
 1701|  4.98k|  it = f(it);
 1702|  4.98k|  if (right_padding != 0) it = fill<Char>(it, right_padding, specs);
  ------------------
  |  Branch (1702:7): [True: 404, False: 4.57k]
  ------------------
 1703|  4.98k|  return base_iterator(out, it);
 1704|  4.98k|}
_ZZN3fmt3v126detail9write_intINS0_14basic_appenderIcEEmcEET_S5_T0_jRKNS0_12format_specsERKNS1_14digit_groupingIT1_EEENKUlS4_E_clES4_:
 1979|  4.98k|      out, specs, size, size, [&](reserve_iterator<OutputIt> it) {
 1980|  7.70k|        for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8)
  ------------------
  |  Branch (1980:46): [True: 2.72k, False: 4.98k]
  ------------------
 1981|  2.72k|          *it++ = static_cast<Char>(p & 0xff);
 1982|  4.98k|        return grouping.apply(it, string_view(buffer.data(), buffer.size()));
 1983|  4.98k|      });
_ZNK3fmt3v126detail14digit_groupingIcE5applyINS0_14basic_appenderIcEEcEET_S7_NS0_17basic_string_viewIT0_EE:
 1910|  4.98k|  auto apply(Out out, basic_string_view<C> digits) const -> Out {
 1911|  4.98k|    auto num_digits = static_cast<int>(digits.size());
 1912|  4.98k|    auto separators = basic_memory_buffer<int>();
 1913|  4.98k|    separators.push_back(0);
 1914|  4.98k|    auto state = initial_state();
 1915|  4.98k|    while (int i = next(state)) {
  ------------------
  |  Branch (1915:16): [True: 4.98k, False: 0]
  ------------------
 1916|  4.98k|      if (i >= num_digits) break;
  ------------------
  |  Branch (1916:11): [True: 4.98k, False: 0]
  ------------------
 1917|      0|      separators.push_back(i);
 1918|      0|    }
 1919|  4.98k|    for (int i = 0, sep_index = static_cast<int>(separators.size() - 1);
 1920|   120k|         i < num_digits; ++i) {
  ------------------
  |  Branch (1920:10): [True: 115k, False: 4.98k]
  ------------------
 1921|   115k|      if (num_digits - i == separators[sep_index]) {
  ------------------
  |  Branch (1921:11): [True: 0, False: 115k]
  ------------------
 1922|      0|        out = copy<Char>(thousands_sep_.data(),
 1923|      0|                         thousands_sep_.data() + thousands_sep_.size(), out);
 1924|      0|        --sep_index;
 1925|      0|      }
 1926|   115k|      *out++ = static_cast<Char>(digits[to_unsigned(i)]);
 1927|   115k|    }
 1928|  4.98k|    return out;
 1929|  4.98k|  }
_ZN3fmt3v1219basic_memory_bufferIiLm500ENS0_6detail9allocatorIiEEEC2ERKS4_:
  840|  4.98k|      : detail::buffer<T>(grow), alloc_(alloc) {
  841|  4.98k|    this->set(store_, SIZE);
  842|  4.98k|    if (detail::is_constant_evaluated()) detail::fill_n(store_, SIZE, T());
  ------------------
  |  Branch (842:9): [Folded, False: 4.98k]
  ------------------
  843|  4.98k|  }
_ZN3fmt3v1219basic_memory_bufferIiLm500ENS0_6detail9allocatorIiEEED2Ev:
  844|  4.98k|  FMT_CONSTEXPR20 ~basic_memory_buffer() { deallocate(); }
_ZN3fmt3v1219basic_memory_bufferIiLm500ENS0_6detail9allocatorIiEEE10deallocateEv:
  805|  4.98k|  FMT_CONSTEXPR20 void deallocate() {
  806|  4.98k|    T* data = this->data();
  807|  4.98k|    if (data != store_) alloc_.deallocate(data, this->capacity());
  ------------------
  |  Branch (807:9): [True: 0, False: 4.98k]
  ------------------
  808|  4.98k|  }
_ZN3fmt3v1219basic_memory_bufferIcLm500ENS0_6detail9allocatorIcEEED2Ev:
  844|  5.40k|  FMT_CONSTEXPR20 ~basic_memory_buffer() { deallocate(); }
_ZN3fmt3v1219basic_memory_bufferIcLm500ENS0_6detail9allocatorIcEEE10deallocateEv:
  805|  5.40k|  FMT_CONSTEXPR20 void deallocate() {
  806|  5.40k|    T* data = this->data();
  807|  5.40k|    if (data != store_) alloc_.deallocate(data, this->capacity());
  ------------------
  |  Branch (807:9): [True: 0, False: 5.40k]
  ------------------
  808|  5.40k|  }
_ZN3fmt3v126detail14digit_groupingIcEC2ENSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEESA_:
 1897|  5.40k|      : grouping_(std::move(grouping)), thousands_sep_(std::move(sep)) {}
_ZN3fmt3v126detail10loc_writerIcEclIyTnNSt3__19enable_ifIXsr10is_integerIT_EE5valueEiE4typeELi0EEEbS7_:
 2027|  5.40k|  auto operator()(T value) -> bool {
 2028|  5.40k|    auto arg = make_write_int_arg(value, specs.sign());
 2029|  5.40k|    write_int(out, static_cast<uint64_or_128_t<T>>(arg.abs_value), arg.prefix,
 2030|  5.40k|              specs, digit_grouping<Char>(grouping, sep));
 2031|  5.40k|    return true;
 2032|  5.40k|  }
_ZN3fmt3v126detail18make_write_int_argIyEENS1_13write_int_argINSt3__111conditionalIXaalecl8num_bitsIT_EELi32EntLi0EEjNS5_IXlecl8num_bitsIS6_EELi64EEmoE4typeEE4typeEEES6_NS0_4signE:
 2006|  19.4k|    -> write_int_arg<uint32_or_64_or_128_t<T>> {
 2007|  19.4k|  auto prefix = 0u;
 2008|  19.4k|  auto abs_value = static_cast<uint32_or_64_or_128_t<T>>(value);
 2009|  19.4k|  if (is_negative(value)) {
  ------------------
  |  Branch (2009:7): [True: 0, False: 19.4k]
  ------------------
 2010|      0|    prefix = 0x01000000 | '-';
 2011|      0|    abs_value = 0 - abs_value;
 2012|  19.4k|  } else {
 2013|  19.4k|    constexpr unsigned prefixes[4] = {0, 0, 0x1000000u | '+', 0x1000000u | ' '};
 2014|  19.4k|    prefix = prefixes[static_cast<int>(s)];
 2015|  19.4k|  }
 2016|  19.4k|  return {abs_value, prefix};
 2017|  19.4k|}
_ZN3fmt3v126detail12size_paddingC2EijRKNS0_12format_specsE:
 2047|  5.99k|      : size((prefix >> 24) + to_unsigned(num_digits)), padding(0) {
 2048|  5.99k|    if (specs.align() == align::numeric) {
  ------------------
  |  Branch (2048:9): [True: 1.03k, False: 4.96k]
  ------------------
 2049|  1.03k|      auto width = to_unsigned(specs.width);
 2050|  1.03k|      if (width > size) {
  ------------------
  |  Branch (2050:11): [True: 456, False: 574]
  ------------------
 2051|    456|        padding = width - size;
 2052|    456|        size = width;
 2053|    456|      }
 2054|  4.96k|    } else if (specs.precision > num_digits) {
  ------------------
  |  Branch (2054:16): [True: 0, False: 4.96k]
  ------------------
 2055|      0|      size = (prefix >> 24) + to_unsigned(specs.precision);
 2056|      0|      padding = to_unsigned(specs.precision - num_digits);
 2057|      0|    }
 2058|  5.99k|  }
_ZN3fmt3v126detail6fill_nINS0_14basic_appenderIcEEjcEET_S5_T0_RKT1_:
  558|  5.99k|    -> OutputIt {
  559|  2.86G|  for (Size i = 0; i < count; ++i) *out++ = value;
  ------------------
  |  Branch (559:20): [True: 2.86G, False: 5.99k]
  ------------------
  560|  5.99k|  return out;
  561|  5.99k|}
_ZN3fmt3v126detail13copy_noinlineIcPKcNS0_14basic_appenderIcEEEET1_T0_S8_S7_:
  573|  51.1k|                                              OutputIt out) -> OutputIt {
  574|  51.1k|  return copy<OutChar>(begin, end, out);
  575|  51.1k|}
_ZN3fmt3v126detail5writeIcNS0_14basic_appenderIcEEEET0_S5_NS0_17basic_string_viewIT_EE:
 3583|  1.49k|    -> OutputIt {
 3584|  1.49k|  return copy_noinline<Char>(value.begin(), value.end(), out);
 3585|  1.49k|}
_ZN3fmt3v126detail21default_arg_formatterIcEclINS0_17basic_string_viewIcEETnNSt3__19enable_ifIXsr10is_builtinIT_EE5valueEiE4typeELi0EEEvS9_:
 3660|  1.49k|  void operator()(T value) {
 3661|  1.49k|    write<Char>(out, value);
 3662|  1.49k|  }
_ZN3fmt3v126detail21default_arg_formatterIcEclENS0_9monostateE:
 3657|     29|  void operator()(monostate) { report_error("argument not found"); }
_ZN3fmt3v126detail14format_handlerIcE7on_textEPKcS5_:
 3764|  49.6k|  void on_text(const Char* begin, const Char* end) {
 3765|  49.6k|    copy_noinline<Char>(begin, end, ctx.out());
 3766|  49.6k|  }
_ZN3fmt3v126detail14format_handlerIcE20on_replacement_fieldEiPKc:
 3780|  4.76k|  FMT_INLINE void on_replacement_field(int id, const Char*) {
 3781|  4.76k|    ctx.arg(id).visit(default_arg_formatter<Char>{ctx.out()});
 3782|  4.76k|  }
_ZN3fmt3v126detail14format_handlerIcE9on_arg_idEv:
 3768|  2.59k|  FMT_CONSTEXPR auto on_arg_id() -> int { return parse_ctx.next_arg_id(); }
_ZN3fmt3v126detail14format_handlerIcE9on_arg_idEi:
 3769|  39.1k|  FMT_CONSTEXPR auto on_arg_id(int id) -> int {
 3770|  39.1k|    parse_ctx.check_arg_id(id);
 3771|  39.1k|    return id;
 3772|  39.1k|  }
_ZN3fmt3v126detail14format_handlerIcE9on_arg_idENS0_17basic_string_viewIcEE:
 3773|    110|  FMT_CONSTEXPR auto on_arg_id(basic_string_view<Char> id) -> int {
 3774|    110|    parse_ctx.check_arg_id(id);
 3775|    110|    int arg_id = ctx.arg_id(id);
 3776|    110|    if (arg_id < 0) report_error("argument not found");
  ------------------
  |  Branch (3776:9): [True: 110, False: 0]
  ------------------
 3777|    110|    return arg_id;
 3778|    110|  }
_ZN3fmt3v126detail14format_handlerIcE15on_format_specsEiPKcS5_:
 3785|  36.9k|      -> const Char* {
 3786|  36.9k|    auto arg = ctx.arg(id);
 3787|  36.9k|    if (!arg) report_error("argument not found");
  ------------------
  |  Branch (3787:9): [True: 67, False: 36.8k]
  ------------------
 3788|       |    // Not using a visitor for custom types gives better codegen.
 3789|  36.9k|    if (arg.format_custom(begin, parse_ctx, ctx)) return parse_ctx.begin();
  ------------------
  |  Branch (3789:9): [True: 0, False: 36.9k]
  ------------------
 3790|       |
 3791|  36.9k|    auto specs = dynamic_format_specs<Char>();
 3792|  36.9k|    begin = parse_format_specs(begin, end, specs, parse_ctx, arg.type());
 3793|  36.9k|    if (specs.dynamic()) {
  ------------------
  |  Branch (3793:9): [True: 1.23k, False: 35.6k]
  ------------------
 3794|  1.23k|      handle_dynamic_spec(specs.dynamic_width(), specs.width, specs.width_ref,
 3795|  1.23k|                          ctx);
 3796|  1.23k|      handle_dynamic_spec(specs.dynamic_precision(), specs.precision,
 3797|  1.23k|                          specs.precision_ref, ctx);
 3798|  1.23k|    }
 3799|       |
 3800|  36.9k|    arg.visit(arg_formatter<Char>{ctx.out(), specs, ctx.locale()});
 3801|  36.9k|    return begin;
 3802|  36.9k|  }
_ZN3fmt3v126detail19handle_dynamic_specINS0_7contextEEEvNS0_11arg_id_kindERiRKNS1_7arg_refINT_9char_typeEEERS7_:
 3714|  2.39k|    const arg_ref<typename Context::char_type>& ref, Context& ctx) {
 3715|  2.39k|  if (kind == arg_id_kind::none) return;
  ------------------
  |  Branch (3715:7): [True: 1.16k, False: 1.23k]
  ------------------
 3716|  1.23k|  auto arg =
 3717|  1.23k|      kind == arg_id_kind::index ? ctx.arg(ref.index) : ctx.arg(ref.name);
  ------------------
  |  Branch (3717:7): [True: 1.23k, False: 2]
  ------------------
 3718|  1.23k|  if (!arg) report_error("argument not found");
  ------------------
  |  Branch (3718:7): [True: 18, False: 1.21k]
  ------------------
 3719|  1.23k|  unsigned long long result = arg.visit(dynamic_spec_getter());
 3720|  1.23k|  if (result > to_unsigned(max_value<int>()))
  ------------------
  |  Branch (3720:7): [True: 62, False: 1.17k]
  ------------------
 3721|     62|    report_error("width/precision is out of range");
 3722|  1.23k|  value = static_cast<int>(result);
 3723|  1.23k|}
_ZN3fmt3v126detail19dynamic_spec_getterclIyTnNSt3__19enable_ifIXsr10is_integerIT_EE5valueEiE4typeELi0EEEyS6_:
 3700|  1.21k|  FMT_CONSTEXPR auto operator()(T value) -> unsigned long long {
 3701|  1.21k|    return is_negative(value) ? ~0ull : static_cast<unsigned long long>(value);
  ------------------
  |  Branch (3701:12): [True: 0, False: 1.21k]
  ------------------
 3702|  1.21k|  }
_ZN3fmt3v126detail19dynamic_spec_getterclINS0_17basic_string_viewIcEETnNSt3__19enable_ifIXntsr10is_integerIT_EE5valueEiE4typeELi0EEEyS8_:
 3705|      3|  FMT_CONSTEXPR auto operator()(T) -> unsigned long long {
 3706|      3|    report_error("width/precision is not integer");
 3707|      3|    return 0;
 3708|      3|  }
_ZN3fmt3v126detail18write_int_noinlineIcNS0_14basic_appenderIcEEmEET0_S5_NS1_13write_int_argIT1_EERKNS0_12format_specsE:
 2129|  14.0k|    -> OutputIt {
 2130|  14.0k|  return write_int<Char>(out, arg, specs);
 2131|  14.0k|}
_ZN3fmt3v126detail9write_intIcNS0_14basic_appenderIcEEmEET0_S5_NS1_13write_int_argIT1_EERKNS0_12format_specsE:
 2063|  14.0k|                                        const format_specs& specs) -> OutputIt {
 2064|  14.0k|  static_assert(std::is_same<T, uint32_or_64_or_128_t<T>>::value, "");
 2065|       |
 2066|  14.0k|  constexpr size_t buffer_size = num_bits<T>();
 2067|  14.0k|  char buffer[buffer_size];
 2068|  14.0k|  if (is_constant_evaluated()) fill_n(buffer, buffer_size, '\0');
  ------------------
  |  Branch (2068:7): [Folded, False: 14.0k]
  ------------------
 2069|  14.0k|  const char* begin = nullptr;
 2070|  14.0k|  const char* end = buffer + buffer_size;
 2071|       |
 2072|  14.0k|  auto abs_value = arg.abs_value;
 2073|  14.0k|  auto prefix = arg.prefix;
 2074|  14.0k|  switch (specs.type()) {
 2075|      0|  default: FMT_ASSERT(false, ""); FMT_FALLTHROUGH;
  ------------------
  |  |  395|      0|    ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \
  |  |  ------------------
  |  |  |  Branch (395:6): [Folded, False: 0]
  |  |  ------------------
  |  |  396|      0|         ? (void)0                                                          \
  |  |  397|      0|         : ::fmt::assert_fail(__FILE__, __LINE__, (message)))
  ------------------
                default: FMT_ASSERT(false, ""); FMT_FALLTHROUGH;
  ------------------
  |  |  181|      0|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
  |  Branch (2075:3): [True: 0, False: 14.0k]
  ------------------
 2076|  5.60k|  case presentation_type::none:
  ------------------
  |  Branch (2076:3): [True: 5.60k, False: 8.45k]
  ------------------
 2077|  6.29k|  case presentation_type::dec:
  ------------------
  |  Branch (2077:3): [True: 696, False: 13.3k]
  ------------------
 2078|  6.29k|    begin = do_format_decimal(buffer, abs_value, buffer_size);
 2079|  6.29k|    break;
 2080|  1.50k|  case presentation_type::hex:
  ------------------
  |  Branch (2080:3): [True: 1.50k, False: 12.5k]
  ------------------
 2081|  1.50k|    begin = do_format_base2e(4, buffer, abs_value, buffer_size, specs.upper());
 2082|  1.50k|    if (specs.alt())
  ------------------
  |  Branch (2082:9): [True: 406, False: 1.10k]
  ------------------
 2083|    406|      prefix_append(prefix, unsigned(specs.upper() ? 'X' : 'x') << 8 | '0');
  ------------------
  |  Branch (2083:38): [True: 71, False: 335]
  ------------------
 2084|  1.50k|    break;
 2085|  2.58k|  case presentation_type::oct: {
  ------------------
  |  Branch (2085:3): [True: 2.58k, False: 11.4k]
  ------------------
 2086|  2.58k|    begin = do_format_base2e(3, buffer, abs_value, buffer_size);
 2087|       |    // Octal prefix '0' is counted as a digit, so only add it if precision
 2088|       |    // is not greater than the number of digits.
 2089|  2.58k|    auto num_digits = end - begin;
 2090|  2.58k|    if (specs.alt() && specs.precision <= num_digits && abs_value != 0)
  ------------------
  |  Branch (2090:9): [True: 1.57k, False: 1.00k]
  |  Branch (2090:24): [True: 1.57k, False: 0]
  |  Branch (2090:57): [True: 1.12k, False: 451]
  ------------------
 2091|  1.12k|      prefix_append(prefix, '0');
 2092|  2.58k|    break;
 2093|  5.60k|  }
 2094|  2.88k|  case presentation_type::bin:
  ------------------
  |  Branch (2094:3): [True: 2.88k, False: 11.1k]
  ------------------
 2095|  2.88k|    begin = do_format_base2e(1, buffer, abs_value, buffer_size);
 2096|  2.88k|    if (specs.alt())
  ------------------
  |  Branch (2096:9): [True: 1.34k, False: 1.54k]
  ------------------
 2097|  1.34k|      prefix_append(prefix, unsigned(specs.upper() ? 'B' : 'b') << 8 | '0');
  ------------------
  |  Branch (2097:38): [True: 318, False: 1.02k]
  ------------------
 2098|  2.88k|    break;
 2099|    780|  case presentation_type::chr:
  ------------------
  |  Branch (2099:3): [True: 780, False: 13.2k]
  ------------------
 2100|    780|    return write_char<Char>(out, static_cast<Char>(abs_value), specs);
 2101|  14.0k|  }
 2102|       |
 2103|       |  // Write an integer in the format
 2104|       |  //   <left-padding><prefix><numeric-padding><digits><right-padding>
 2105|       |  // prefix contains chars in three lower bytes and the size in the fourth byte.
 2106|  13.2k|  int num_digits = static_cast<int>(end - begin);
 2107|       |  // Slightly faster check for specs.width == 0 && specs.precision == -1.
 2108|  13.2k|  if ((specs.width | (specs.precision + 1)) == 0) {
  ------------------
  |  Branch (2108:7): [True: 7.28k, False: 5.99k]
  ------------------
 2109|  7.28k|    auto it = reserve(out, to_unsigned(num_digits) + (prefix >> 24));
 2110|  9.64k|    for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8)
  ------------------
  |  Branch (2110:42): [True: 2.36k, False: 7.28k]
  ------------------
 2111|  2.36k|      *it++ = static_cast<Char>(p & 0xff);
 2112|  7.28k|    return base_iterator(out, copy<Char>(begin, end, it));
 2113|  7.28k|  }
 2114|  5.99k|  auto sp = size_padding(num_digits, prefix, specs);
 2115|  5.99k|  unsigned padding = sp.padding;
 2116|  5.99k|  return write_padded<Char, align::right>(
 2117|  5.99k|      out, specs, sp.size, [=](reserve_iterator<OutputIt> it) {
 2118|  5.99k|        for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8)
 2119|  5.99k|          *it++ = static_cast<Char>(p & 0xff);
 2120|  5.99k|        it = detail::fill_n(it, padding, static_cast<Char>('0'));
 2121|  5.99k|        return copy<Char>(begin, end, it);
 2122|  5.99k|      });
 2123|  13.2k|}
_ZN3fmt3v126detail12write_paddedIcLNS0_5alignE2ENS0_14basic_appenderIcEEZNS1_9write_intIcS5_mEET0_S7_NS1_13write_int_argIT1_EERKNS0_12format_specsEEUlS5_E_EES9_S9_SD_mOT2_:
 1709|  5.99k|                            size_t size, F&& f) -> OutputIt {
 1710|  5.99k|  return write_padded<Char, default_align>(out, specs, size, size, f);
 1711|  5.99k|}
_ZN3fmt3v126detail12write_paddedIcLNS0_5alignE2ENS0_14basic_appenderIcEERZNS1_9write_intIcS5_mEET0_S7_NS1_13write_int_argIT1_EERKNS0_12format_specsEEUlS5_E_EES9_S9_SD_mmOT2_:
 1688|  5.99k|                                size_t size, size_t width, F&& f) -> OutputIt {
 1689|  5.99k|  static_assert(default_align == align::left || default_align == align::right,
 1690|  5.99k|                "");
 1691|  5.99k|  unsigned spec_width = to_unsigned(specs.width);
 1692|  5.99k|  size_t padding = spec_width > width ? spec_width - width : 0;
  ------------------
  |  Branch (1692:20): [True: 3.48k, False: 2.50k]
  ------------------
 1693|       |  // Shifts are encoded as string literals because static constexpr is not
 1694|       |  // supported in constexpr functions.
 1695|  5.99k|  auto* shifts =
 1696|  5.99k|      default_align == align::left ? "\x1f\x1f\x00\x01" : "\x00\x1f\x00\x01";
  ------------------
  |  Branch (1696:7): [Folded, False: 5.99k]
  ------------------
 1697|  5.99k|  size_t left_padding = padding >> shifts[static_cast<int>(specs.align())];
 1698|  5.99k|  size_t right_padding = padding - left_padding;
 1699|  5.99k|  auto it = reserve(out, size + padding * specs.fill_size());
 1700|  5.99k|  if (left_padding != 0) it = fill<Char>(it, left_padding, specs);
  ------------------
  |  Branch (1700:7): [True: 2.14k, False: 3.84k]
  ------------------
 1701|  5.99k|  it = f(it);
 1702|  5.99k|  if (right_padding != 0) it = fill<Char>(it, right_padding, specs);
  ------------------
  |  Branch (1702:7): [True: 1.38k, False: 4.60k]
  ------------------
 1703|  5.99k|  return base_iterator(out, it);
 1704|  5.99k|}
_ZZN3fmt3v126detail9write_intIcNS0_14basic_appenderIcEEmEET0_S5_NS1_13write_int_argIT1_EERKNS0_12format_specsEENKUlS4_E_clES4_:
 2117|  5.99k|      out, specs, sp.size, [=](reserve_iterator<OutputIt> it) {
 2118|  8.25k|        for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8)
  ------------------
  |  Branch (2118:46): [True: 2.26k, False: 5.99k]
  ------------------
 2119|  2.26k|          *it++ = static_cast<Char>(p & 0xff);
 2120|  5.99k|        it = detail::fill_n(it, padding, static_cast<Char>('0'));
 2121|  5.99k|        return copy<Char>(begin, end, it);
 2122|  5.99k|      });
_ZN3fmt3v126detail13arg_formatterIcEclIyTnNSt3__19enable_ifIXsr10is_builtinIT_EE5valueEiE4typeELi0EEEvS7_:
 3683|  19.4k|  FMT_CONSTEXPR FMT_INLINE void operator()(T value) {
 3684|  19.4k|    detail::write<Char>(out, value, specs, locale);
 3685|  19.4k|  }
_ZN3fmt3v126detail5writeIcyTnNSt3__19enable_ifIXaaaasr11is_integralIT0_EE5valuentsr3std7is_sameIS5_bEE5valuentsr3std7is_sameIS5_T_EE5valueEiE4typeELi0EEENS0_14basic_appenderIS6_EESA_S5_RKNS0_12format_specsENS0_10locale_refE:
 2139|  19.4k|    -> basic_appender<Char> {
 2140|  19.4k|  if (specs.localized() && write_loc(out, value, specs, loc)) return out;
  ------------------
  |  Branch (2140:7): [True: 5.40k, False: 14.0k]
  |  Branch (2140:28): [True: 5.40k, False: 0]
  ------------------
 2141|  14.0k|  return write_int_noinline<Char>(out, make_write_int_arg(value, specs.sign()),
 2142|  14.0k|                                  specs);
 2143|  19.4k|}
_ZN3fmt3v129loc_valueC2IyTnNSt3__19enable_ifIXntsr6detail11is_float128IT_EE5valueEiE4typeELi0EEES5_:
 3880|  5.40k|  loc_value(T value) : value_(value) {}
_ZN3fmt3v126detail5writeIcNS0_14basic_appenderIcEEEET0_S5_NS0_17basic_string_viewIT_EERKNS0_12format_specsENS0_10locale_refE:
 2278|  16.7k|                         const format_specs& specs, locale_ref) -> OutputIt {
 2279|  16.7k|  return write<Char>(out, s, specs);
 2280|  16.7k|}
_ZN3fmt3v126detail5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SA_NS0_17basic_string_viewIS7_EERKNS0_12format_specsE:
 2172|  16.7k|                         const format_specs& specs) -> OutputIt {
 2173|  16.7k|  bool is_debug = specs.type() == presentation_type::debug;
 2174|  16.7k|  if (specs.precision < 0 && specs.width == 0) {
  ------------------
  |  Branch (2174:7): [True: 14.1k, False: 2.65k]
  |  Branch (2174:30): [True: 4.01k, False: 10.0k]
  ------------------
 2175|  4.01k|    auto&& it = reserve(out, s.size());
 2176|  4.01k|    return is_debug ? write_escaped_string(it, s) : copy<char>(s, it);
  ------------------
  |  Branch (2176:12): [True: 3.00k, False: 1.01k]
  ------------------
 2177|  4.01k|  }
 2178|       |
 2179|  12.7k|  size_t display_width_limit =
 2180|  12.7k|      specs.precision < 0 ? SIZE_MAX : to_unsigned(specs.precision);
  ------------------
  |  Branch (2180:7): [True: 10.0k, False: 2.65k]
  ------------------
 2181|  12.7k|  size_t display_width =
 2182|  12.7k|      !is_debug || specs.precision == 0 ? 0 : 1;  // Account for opening '"'.
  ------------------
  |  Branch (2182:7): [True: 4.11k, False: 8.62k]
  |  Branch (2182:20): [True: 246, False: 8.38k]
  ------------------
 2183|  12.7k|  size_t size = !is_debug || specs.precision == 0 ? 0 : 1;
  ------------------
  |  Branch (2183:17): [True: 4.11k, False: 8.62k]
  |  Branch (2183:30): [True: 246, False: 8.38k]
  ------------------
 2184|  12.7k|  for_each_codepoint(s, [&](uint32_t cp, string_view sv) {
 2185|  12.7k|    if (is_debug && needs_escape(cp)) {
 2186|  12.7k|      counting_buffer<char> buf;
 2187|  12.7k|      write_escaped_cp(basic_appender<char>(buf),
 2188|  12.7k|                       find_escape_result<char>{sv.begin(), sv.end(), cp});
 2189|       |      // We're reinterpreting bytes as display width. That's okay
 2190|       |      // because write_escaped_cp() only writes ASCII characters.
 2191|  12.7k|      size_t cp_width = buf.count();
 2192|  12.7k|      if (display_width + cp_width <= display_width_limit) {
 2193|  12.7k|        display_width += cp_width;
 2194|  12.7k|        size += cp_width;
 2195|       |        // If this is the end of the string, account for closing '"'.
 2196|  12.7k|        if (display_width < display_width_limit && sv.end() == s.end()) {
 2197|  12.7k|          ++display_width;
 2198|  12.7k|          ++size;
 2199|  12.7k|        }
 2200|  12.7k|        return true;
 2201|  12.7k|      }
 2202|       |
 2203|  12.7k|      size += display_width_limit - display_width;
 2204|  12.7k|      display_width = display_width_limit;
 2205|  12.7k|      return false;
 2206|  12.7k|    }
 2207|       |
 2208|  12.7k|    size_t cp_width = display_width_of(cp);
 2209|  12.7k|    if (cp_width + display_width <= display_width_limit) {
 2210|  12.7k|      display_width += cp_width;
 2211|  12.7k|      size += sv.size();
 2212|       |      // If this is the end of the string, account for closing '"'.
 2213|  12.7k|      if (is_debug && display_width < display_width_limit &&
 2214|  12.7k|          sv.end() == s.end()) {
 2215|  12.7k|        ++display_width;
 2216|  12.7k|        ++size;
 2217|  12.7k|      }
 2218|  12.7k|      return true;
 2219|  12.7k|    }
 2220|       |
 2221|  12.7k|    return false;
 2222|  12.7k|  });
 2223|       |
 2224|  12.7k|  struct bounded_output_iterator {
 2225|  12.7k|    reserve_iterator<OutputIt> underlying_iterator;
 2226|  12.7k|    size_t bound;
 2227|       |
 2228|  12.7k|    FMT_CONSTEXPR auto operator*() -> bounded_output_iterator& { return *this; }
 2229|  12.7k|    FMT_CONSTEXPR auto operator++() -> bounded_output_iterator& {
 2230|  12.7k|      return *this;
 2231|  12.7k|    }
 2232|  12.7k|    FMT_CONSTEXPR auto operator++(int) -> bounded_output_iterator& {
 2233|  12.7k|      return *this;
 2234|  12.7k|    }
 2235|  12.7k|    FMT_CONSTEXPR auto operator=(char c) -> bounded_output_iterator& {
 2236|  12.7k|      if (bound > 0) {
 2237|  12.7k|        *underlying_iterator++ = c;
 2238|  12.7k|        --bound;
 2239|  12.7k|      }
 2240|  12.7k|      return *this;
 2241|  12.7k|    }
 2242|  12.7k|  };
 2243|       |
 2244|  12.7k|  return write_padded<char>(
 2245|  12.7k|      out, specs, size, display_width, [=](reserve_iterator<OutputIt> it) {
 2246|  12.7k|        return is_debug
 2247|  12.7k|                   ? write_escaped_string(bounded_output_iterator{it, size}, s)
 2248|  12.7k|                         .underlying_iterator
 2249|  12.7k|                   : copy<char>(s.data(), s.data() + size, it);
 2250|  12.7k|      });
 2251|  16.7k|}
_ZN3fmt3v126detail20write_escaped_stringIcNS0_14basic_appenderIcEEEET0_S5_NS0_17basic_string_viewIT_EE:
 1827|  3.00k|    -> OutputIt {
 1828|  3.00k|  *out++ = static_cast<Char>('"');
 1829|  3.00k|  auto begin = str.begin(), end = str.end();
 1830|  33.3M|  do {
 1831|  33.3M|    auto escape = find_escape(begin, end);
 1832|  33.3M|    out = copy<Char>(begin, escape.begin, out);
 1833|  33.3M|    begin = escape.end;
 1834|  33.3M|    if (!begin) break;
  ------------------
  |  Branch (1834:9): [True: 1.46k, False: 33.3M]
  ------------------
 1835|  33.3M|    out = write_escaped_cp<OutputIt, Char>(out, escape);
 1836|  33.3M|  } while (begin != end);
  ------------------
  |  Branch (1836:12): [True: 33.3M, False: 1.53k]
  ------------------
 1837|  3.00k|  *out++ = static_cast<Char>('"');
 1838|  3.00k|  return out;
 1839|  3.00k|}
_ZN3fmt3v126detail11find_escapeEPKcS3_:
 1764|  64.8M|    -> find_escape_result<char> {
 1765|  64.8M|  if (const_check(!use_utf8)) return find_escape<char>(begin, end);
  ------------------
  |  Branch (1765:7): [Folded, False: 64.8M]
  ------------------
 1766|  64.8M|  auto result = find_escape_result<char>{end, nullptr, 0};
 1767|  64.8M|  for_each_codepoint(string_view(begin, to_unsigned(end - begin)),
 1768|  64.8M|                     [&](uint32_t cp, string_view sv) {
 1769|  64.8M|                       if (needs_escape(cp)) {
 1770|  64.8M|                         result = {sv.begin(), sv.end(), cp};
 1771|  64.8M|                         return false;
 1772|  64.8M|                       }
 1773|  64.8M|                       return true;
 1774|  64.8M|                     });
 1775|  64.8M|  return result;
 1776|  64.8M|}
_ZN3fmt3v126detail18for_each_codepointIZNS1_11find_escapeEPKcS4_EUljNS0_17basic_string_viewIcEEE_EEvS6_T_:
  636|  64.8M|FMT_CONSTEXPR void for_each_codepoint(string_view s, F f) {
  637|  64.8M|  auto decode = [f](const char* buf_ptr, const char* ptr) {
  638|  64.8M|    auto cp = uint32_t();
  639|  64.8M|    auto error = 0;
  640|  64.8M|    auto end = utf8_decode(buf_ptr, &cp, &error);
  641|  64.8M|    bool result = f(error ? invalid_code_point : cp,
  642|  64.8M|                    string_view(ptr, error ? 1 : to_unsigned(end - buf_ptr)));
  643|  64.8M|    return result ? (error ? buf_ptr + 1 : end) : nullptr;
  644|  64.8M|  };
  645|       |
  646|  64.8M|  auto p = s.data();
  647|  64.8M|  const size_t block_size = 4;  // utf8_decode always reads blocks of 4 chars.
  648|  64.8M|  if (s.size() >= block_size) {
  ------------------
  |  Branch (648:7): [True: 64.8M, False: 20.6k]
  ------------------
  649|  83.8M|    for (auto end = p + s.size() - block_size + 1; p < end;) {
  ------------------
  |  Branch (649:52): [True: 83.8M, False: 4.47k]
  ------------------
  650|  83.8M|      p = decode(p, p);
  651|  83.8M|      if (!p) return;
  ------------------
  |  Branch (651:11): [True: 64.8M, False: 19.0M]
  ------------------
  652|  83.8M|    }
  653|  64.8M|  }
  654|  25.0k|  auto num_chars_left = to_unsigned(s.data() + s.size() - p);
  655|  25.0k|  if (num_chars_left == 0) return;
  ------------------
  |  Branch (655:7): [True: 1.12k, False: 23.9k]
  ------------------
  656|       |
  657|       |  // Suppress bogus -Wstringop-overflow.
  658|  23.9k|  if (FMT_GCC_VERSION) num_chars_left &= 3;
  ------------------
  |  |   35|  23.9k|#  define FMT_GCC_VERSION 0
  |  |  ------------------
  |  |  |  Branch (35:27): [Folded, False: 23.9k]
  |  |  ------------------
  ------------------
  659|  23.9k|  char buf[2 * block_size - 1] = {};
  660|  23.9k|  copy<char>(p, p + num_chars_left, buf);
  661|  23.9k|  const char* buf_ptr = buf;
  662|  30.9k|  do {
  663|  30.9k|    auto end = decode(buf_ptr, p);
  664|  30.9k|    if (!end) return;
  ------------------
  |  Branch (664:9): [True: 18.7k, False: 12.2k]
  ------------------
  665|  12.2k|    p += end - buf_ptr;
  666|  12.2k|    buf_ptr = end;
  667|  12.2k|  } while (buf_ptr < buf + num_chars_left);
  ------------------
  |  Branch (667:12): [True: 6.99k, False: 5.24k]
  ------------------
  668|  23.9k|}
_ZZN3fmt3v126detail18for_each_codepointIZNS1_11find_escapeEPKcS4_EUljNS0_17basic_string_viewIcEEE_EEvS6_T_ENKUlS4_S4_E_clES4_S4_:
  637|  83.9M|  auto decode = [f](const char* buf_ptr, const char* ptr) {
  638|  83.9M|    auto cp = uint32_t();
  639|  83.9M|    auto error = 0;
  640|  83.9M|    auto end = utf8_decode(buf_ptr, &cp, &error);
  641|  83.9M|    bool result = f(error ? invalid_code_point : cp,
  ------------------
  |  Branch (641:21): [True: 8.23M, False: 75.6M]
  ------------------
  642|  83.9M|                    string_view(ptr, error ? 1 : to_unsigned(end - buf_ptr)));
  ------------------
  |  Branch (642:38): [True: 8.23M, False: 75.6M]
  ------------------
  643|  83.9M|    return result ? (error ? buf_ptr + 1 : end) : nullptr;
  ------------------
  |  Branch (643:12): [True: 19.1M, False: 64.8M]
  |  Branch (643:22): [True: 0, False: 19.1M]
  ------------------
  644|  83.9M|  };
_ZN3fmt3v126detail11utf8_decodeEPKcPjPi:
  595|   125M|    -> const char* {
  596|   125M|  constexpr int masks[] = {0x00, 0x7f, 0x1f, 0x0f, 0x07};
  597|   125M|  constexpr uint32_t mins[] = {4194304, 0, 128, 2048, 65536};
  598|   125M|  constexpr int shiftc[] = {0, 18, 12, 6, 0};
  599|   125M|  constexpr int shifte[] = {0, 6, 4, 2, 0};
  600|       |
  601|   125M|  int len = "\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0\0\2\2\2\2\3\3\4"
  602|   125M|      [static_cast<unsigned char>(*s) >> 3];
  603|       |  // Compute the pointer to the next character early so that the next
  604|       |  // iteration can start working on the next character. Neither Clang
  605|       |  // nor GCC figure out this reordering on their own.
  606|   125M|  const char* next = s + len + !len;
  607|       |
  608|   125M|  using uchar = unsigned char;
  609|       |
  610|       |  // Assume a four-byte character and load four bytes. Unused bits are
  611|       |  // shifted out.
  612|   125M|  *c = uint32_t(uchar(s[0]) & masks[len]) << 18;
  613|   125M|  *c |= uint32_t(uchar(s[1]) & 0x3f) << 12;
  614|   125M|  *c |= uint32_t(uchar(s[2]) & 0x3f) << 6;
  615|   125M|  *c |= uint32_t(uchar(s[3]) & 0x3f) << 0;
  616|   125M|  *c >>= shiftc[len];
  617|       |
  618|       |  // Accumulate the various error conditions.
  619|   125M|  *e = (*c < mins[len]) << 6;       // non-canonical encoding
  620|   125M|  *e |= ((*c >> 11) == 0x1b) << 7;  // surrogate half?
  621|   125M|  *e |= (*c > 0x10FFFF) << 8;       // out of range?
  622|   125M|  *e |= (uchar(s[1]) & 0xc0) >> 2;
  623|   125M|  *e |= (uchar(s[2]) & 0xc0) >> 4;
  624|   125M|  *e |= uchar(s[3]) >> 6;
  625|   125M|  *e ^= 0x2a;  // top two bits of each tail byte correct?
  626|   125M|  *e >>= shifte[len];
  627|       |
  628|   125M|  return next;
  629|   125M|}
_ZZN3fmt3v126detail11find_escapeEPKcS3_ENKUljNS0_17basic_string_viewIcEEE_clEjS5_:
 1768|  83.9M|                     [&](uint32_t cp, string_view sv) {
 1769|  83.9M|                       if (needs_escape(cp)) {
  ------------------
  |  Branch (1769:28): [True: 64.8M, False: 19.1M]
  ------------------
 1770|  64.8M|                         result = {sv.begin(), sv.end(), cp};
 1771|  64.8M|                         return false;
 1772|  64.8M|                       }
 1773|  19.1M|                       return true;
 1774|  83.9M|                     });
_ZN3fmt3v126detail18for_each_codepointIZNS1_5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SB_NS0_17basic_string_viewIS8_EERKNS0_12format_specsEEUljNSC_IcEEE_EEvSH_S8_:
  636|  12.7k|FMT_CONSTEXPR void for_each_codepoint(string_view s, F f) {
  637|  12.7k|  auto decode = [f](const char* buf_ptr, const char* ptr) {
  638|  12.7k|    auto cp = uint32_t();
  639|  12.7k|    auto error = 0;
  640|  12.7k|    auto end = utf8_decode(buf_ptr, &cp, &error);
  641|  12.7k|    bool result = f(error ? invalid_code_point : cp,
  642|  12.7k|                    string_view(ptr, error ? 1 : to_unsigned(end - buf_ptr)));
  643|  12.7k|    return result ? (error ? buf_ptr + 1 : end) : nullptr;
  644|  12.7k|  };
  645|       |
  646|  12.7k|  auto p = s.data();
  647|  12.7k|  const size_t block_size = 4;  // utf8_decode always reads blocks of 4 chars.
  648|  12.7k|  if (s.size() >= block_size) {
  ------------------
  |  Branch (648:7): [True: 9.77k, False: 2.96k]
  ------------------
  649|  41.1M|    for (auto end = p + s.size() - block_size + 1; p < end;) {
  ------------------
  |  Branch (649:52): [True: 41.1M, False: 8.37k]
  ------------------
  650|  41.1M|      p = decode(p, p);
  651|  41.1M|      if (!p) return;
  ------------------
  |  Branch (651:11): [True: 1.39k, False: 41.1M]
  ------------------
  652|  41.1M|    }
  653|  9.77k|  }
  654|  11.3k|  auto num_chars_left = to_unsigned(s.data() + s.size() - p);
  655|  11.3k|  if (num_chars_left == 0) return;
  ------------------
  |  Branch (655:7): [True: 2.11k, False: 9.22k]
  ------------------
  656|       |
  657|       |  // Suppress bogus -Wstringop-overflow.
  658|  9.22k|  if (FMT_GCC_VERSION) num_chars_left &= 3;
  ------------------
  |  |   35|  9.22k|#  define FMT_GCC_VERSION 0
  |  |  ------------------
  |  |  |  Branch (35:27): [Folded, False: 9.22k]
  |  |  ------------------
  ------------------
  659|  9.22k|  char buf[2 * block_size - 1] = {};
  660|  9.22k|  copy<char>(p, p + num_chars_left, buf);
  661|  9.22k|  const char* buf_ptr = buf;
  662|  25.8k|  do {
  663|  25.8k|    auto end = decode(buf_ptr, p);
  664|  25.8k|    if (!end) return;
  ------------------
  |  Branch (664:9): [True: 397, False: 25.4k]
  ------------------
  665|  25.4k|    p += end - buf_ptr;
  666|  25.4k|    buf_ptr = end;
  667|  25.4k|  } while (buf_ptr < buf + num_chars_left);
  ------------------
  |  Branch (667:12): [True: 16.6k, False: 8.83k]
  ------------------
  668|  9.22k|}
_ZZN3fmt3v126detail18for_each_codepointIZNS1_5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SB_NS0_17basic_string_viewIS8_EERKNS0_12format_specsEEUljNSC_IcEEE_EEvSH_S8_ENKUlPKcSK_E_clESK_SK_:
  637|  41.1M|  auto decode = [f](const char* buf_ptr, const char* ptr) {
  638|  41.1M|    auto cp = uint32_t();
  639|  41.1M|    auto error = 0;
  640|  41.1M|    auto end = utf8_decode(buf_ptr, &cp, &error);
  641|  41.1M|    bool result = f(error ? invalid_code_point : cp,
  ------------------
  |  Branch (641:21): [True: 6.06M, False: 35.1M]
  ------------------
  642|  41.1M|                    string_view(ptr, error ? 1 : to_unsigned(end - buf_ptr)));
  ------------------
  |  Branch (642:38): [True: 6.06M, False: 35.1M]
  ------------------
  643|  41.1M|    return result ? (error ? buf_ptr + 1 : end) : nullptr;
  ------------------
  |  Branch (643:12): [True: 41.1M, False: 1.79k]
  |  Branch (643:22): [True: 6.06M, False: 35.1M]
  ------------------
  644|  41.1M|  };
_ZZN3fmt3v126detail5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SA_NS0_17basic_string_viewIS7_EERKNS0_12format_specsEENKUljNSB_IcEEE_clEjSG_:
 2184|  41.1M|  for_each_codepoint(s, [&](uint32_t cp, string_view sv) {
 2185|  41.1M|    if (is_debug && needs_escape(cp)) {
  ------------------
  |  Branch (2185:9): [True: 37.6M, False: 3.54M]
  |  Branch (2185:21): [True: 28.0M, False: 9.60M]
  ------------------
 2186|  28.0M|      counting_buffer<char> buf;
 2187|  28.0M|      write_escaped_cp(basic_appender<char>(buf),
 2188|  28.0M|                       find_escape_result<char>{sv.begin(), sv.end(), cp});
 2189|       |      // We're reinterpreting bytes as display width. That's okay
 2190|       |      // because write_escaped_cp() only writes ASCII characters.
 2191|  28.0M|      size_t cp_width = buf.count();
 2192|  28.0M|      if (display_width + cp_width <= display_width_limit) {
  ------------------
  |  Branch (2192:11): [True: 28.0M, False: 1.03k]
  ------------------
 2193|  28.0M|        display_width += cp_width;
 2194|  28.0M|        size += cp_width;
 2195|       |        // If this is the end of the string, account for closing '"'.
 2196|  28.0M|        if (display_width < display_width_limit && sv.end() == s.end()) {
  ------------------
  |  Branch (2196:13): [True: 28.0M, False: 366]
  |  Branch (2196:52): [True: 2.52k, False: 28.0M]
  ------------------
 2197|  2.52k|          ++display_width;
 2198|  2.52k|          ++size;
 2199|  2.52k|        }
 2200|  28.0M|        return true;
 2201|  28.0M|      }
 2202|       |
 2203|  1.03k|      size += display_width_limit - display_width;
 2204|  1.03k|      display_width = display_width_limit;
 2205|  1.03k|      return false;
 2206|  28.0M|    }
 2207|       |
 2208|  13.1M|    size_t cp_width = display_width_of(cp);
 2209|  13.1M|    if (cp_width + display_width <= display_width_limit) {
  ------------------
  |  Branch (2209:9): [True: 13.1M, False: 764]
  ------------------
 2210|  13.1M|      display_width += cp_width;
 2211|  13.1M|      size += sv.size();
 2212|       |      // If this is the end of the string, account for closing '"'.
 2213|  13.1M|      if (is_debug && display_width < display_width_limit &&
  ------------------
  |  Branch (2213:11): [True: 9.60M, False: 3.54M]
  |  Branch (2213:23): [True: 9.60M, False: 331]
  ------------------
 2214|  9.60M|          sv.end() == s.end()) {
  ------------------
  |  Branch (2214:11): [True: 4.04k, False: 9.59M]
  ------------------
 2215|  4.04k|        ++display_width;
 2216|  4.04k|        ++size;
 2217|  4.04k|      }
 2218|  13.1M|      return true;
 2219|  13.1M|    }
 2220|       |
 2221|    764|    return false;
 2222|  13.1M|  });
_ZN3fmt3v126detail16display_width_ofEj:
  670|  13.1M|FMT_CONSTEXPR inline auto display_width_of(uint32_t cp) noexcept -> size_t {
  671|  13.1M|  return to_unsigned(
  672|  13.1M|      1 + (cp >= 0x1100 &&
  ------------------
  |  Branch (672:12): [True: 461k, False: 12.6M]
  ------------------
  673|   461k|           (cp <= 0x115f ||  // Hangul Jamo init. consonants
  ------------------
  |  Branch (673:13): [True: 651, False: 460k]
  ------------------
  674|   460k|            cp == 0x2329 ||  // LEFT-POINTING ANGLE BRACKET
  ------------------
  |  Branch (674:13): [True: 372, False: 460k]
  ------------------
  675|   460k|            cp == 0x232a ||  // RIGHT-POINTING ANGLE BRACKET
  ------------------
  |  Branch (675:13): [True: 447, False: 460k]
  ------------------
  676|       |            // CJK ... Yi except IDEOGRAPHIC HALF FILL SPACE:
  677|   460k|            (cp >= 0x2e80 && cp <= 0xa4cf && cp != 0x303f) ||
  ------------------
  |  Branch (677:14): [True: 459k, False: 856]
  |  Branch (677:30): [True: 1.25k, False: 457k]
  |  Branch (677:46): [True: 952, False: 306]
  ------------------
  678|   459k|            (cp >= 0xac00 && cp <= 0xd7a3) ||    // Hangul Syllables
  ------------------
  |  Branch (678:14): [True: 457k, False: 1.17k]
  |  Branch (678:30): [True: 559, False: 457k]
  ------------------
  679|   458k|            (cp >= 0xf900 && cp <= 0xfaff) ||    // CJK Compatibility Ideographs
  ------------------
  |  Branch (679:14): [True: 454k, False: 3.70k]
  |  Branch (679:30): [True: 510, False: 454k]
  ------------------
  680|   458k|            (cp >= 0xfe10 && cp <= 0xfe19) ||    // Vertical Forms
  ------------------
  |  Branch (680:14): [True: 454k, False: 3.93k]
  |  Branch (680:30): [True: 771, False: 453k]
  ------------------
  681|   457k|            (cp >= 0xfe30 && cp <= 0xfe6f) ||    // CJK Compatibility Forms
  ------------------
  |  Branch (681:14): [True: 453k, False: 3.94k]
  |  Branch (681:30): [True: 264, False: 453k]
  ------------------
  682|   456k|            (cp >= 0xff00 && cp <= 0xff60) ||    // Fullwidth Forms
  ------------------
  |  Branch (682:14): [True: 452k, False: 4.03k]
  |  Branch (682:30): [True: 527, False: 452k]
  ------------------
  683|   456k|            (cp >= 0xffe0 && cp <= 0xffe6) ||    // Fullwidth Forms
  ------------------
  |  Branch (683:14): [True: 452k, False: 4.11k]
  |  Branch (683:30): [True: 244, False: 452k]
  ------------------
  684|   456k|            (cp >= 0x20000 && cp <= 0x2fffd) ||  // CJK
  ------------------
  |  Branch (684:14): [True: 448k, False: 7.56k]
  |  Branch (684:31): [True: 948, False: 447k]
  ------------------
  685|   455k|            (cp >= 0x30000 && cp <= 0x3fffd) ||
  ------------------
  |  Branch (685:14): [True: 447k, False: 7.56k]
  |  Branch (685:31): [True: 590, False: 447k]
  ------------------
  686|       |            // Miscellaneous Symbols and Pictographs + Emoticons:
  687|   454k|            (cp >= 0x1f300 && cp <= 0x1f64f) ||
  ------------------
  |  Branch (687:14): [True: 449k, False: 5.62k]
  |  Branch (687:31): [True: 612, False: 448k]
  ------------------
  688|       |            // Supplemental Symbols and Pictographs:
  689|   454k|            (cp >= 0x1f900 && cp <= 0x1f9ff))));
  ------------------
  |  Branch (689:14): [True: 448k, False: 5.65k]
  |  Branch (689:31): [True: 1.26k, False: 447k]
  ------------------
  690|  13.1M|}
_ZN3fmt3v126detail12write_paddedIcLNS0_5alignE1ENS0_14basic_appenderIcEEZNS1_5writeIcS5_TnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SC_NS0_17basic_string_viewIS9_EERKNS0_12format_specsEEUlS5_E_EET1_SJ_SH_mmOT2_:
 1688|  12.7k|                                size_t size, size_t width, F&& f) -> OutputIt {
 1689|  12.7k|  static_assert(default_align == align::left || default_align == align::right,
 1690|  12.7k|                "");
 1691|  12.7k|  unsigned spec_width = to_unsigned(specs.width);
 1692|  12.7k|  size_t padding = spec_width > width ? spec_width - width : 0;
  ------------------
  |  Branch (1692:20): [True: 2.04k, False: 10.6k]
  ------------------
 1693|       |  // Shifts are encoded as string literals because static constexpr is not
 1694|       |  // supported in constexpr functions.
 1695|  12.7k|  auto* shifts =
 1696|  12.7k|      default_align == align::left ? "\x1f\x1f\x00\x01" : "\x00\x1f\x00\x01";
  ------------------
  |  Branch (1696:7): [True: 12.7k, Folded]
  ------------------
 1697|  12.7k|  size_t left_padding = padding >> shifts[static_cast<int>(specs.align())];
 1698|  12.7k|  size_t right_padding = padding - left_padding;
 1699|  12.7k|  auto it = reserve(out, size + padding * specs.fill_size());
 1700|  12.7k|  if (left_padding != 0) it = fill<Char>(it, left_padding, specs);
  ------------------
  |  Branch (1700:7): [True: 557, False: 12.1k]
  ------------------
 1701|  12.7k|  it = f(it);
 1702|  12.7k|  if (right_padding != 0) it = fill<Char>(it, right_padding, specs);
  ------------------
  |  Branch (1702:7): [True: 2.04k, False: 10.6k]
  ------------------
 1703|  12.7k|  return base_iterator(out, it);
 1704|  12.7k|}
_ZZN3fmt3v126detail5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SA_NS0_17basic_string_viewIS7_EERKNS0_12format_specsEENKUlS4_E_clES4_:
 2245|  12.7k|      out, specs, size, display_width, [=](reserve_iterator<OutputIt> it) {
 2246|  12.7k|        return is_debug
  ------------------
  |  Branch (2246:16): [True: 8.62k, False: 4.11k]
  ------------------
 2247|  12.7k|                   ? write_escaped_string(bounded_output_iterator{it, size}, s)
 2248|  8.62k|                         .underlying_iterator
 2249|  12.7k|                   : copy<char>(s.data(), s.data() + size, it);
 2250|  12.7k|      });
_ZN3fmt3v126detail20write_escaped_stringIcZNS1_5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SB_NS0_17basic_string_viewIS8_EERKNS0_12format_specsEE23bounded_output_iteratorEESB_SB_SD_:
 1827|  8.62k|    -> OutputIt {
 1828|  8.62k|  *out++ = static_cast<Char>('"');
 1829|  8.62k|  auto begin = str.begin(), end = str.end();
 1830|  31.4M|  do {
 1831|  31.4M|    auto escape = find_escape(begin, end);
 1832|  31.4M|    out = copy<Char>(begin, escape.begin, out);
 1833|  31.4M|    begin = escape.end;
 1834|  31.4M|    if (!begin) break;
  ------------------
  |  Branch (1834:9): [True: 4.90k, False: 31.4M]
  ------------------
 1835|  31.4M|    out = write_escaped_cp<OutputIt, Char>(out, escape);
 1836|  31.4M|  } while (begin != end);
  ------------------
  |  Branch (1836:12): [True: 31.4M, False: 3.72k]
  ------------------
 1837|  8.62k|  *out++ = static_cast<Char>('"');
 1838|  8.62k|  return out;
 1839|  8.62k|}
_ZZN3fmt3v126detail5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SA_NS0_17basic_string_viewIS7_EERKNS0_12format_specsEEN23bounded_output_iteratorppEi:
 2232|   130M|    FMT_CONSTEXPR auto operator++(int) -> bounded_output_iterator& {
 2233|   130M|      return *this;
 2234|   130M|    }
_ZZN3fmt3v126detail5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SA_NS0_17basic_string_viewIS7_EERKNS0_12format_specsEEN23bounded_output_iteratordeEv:
 2228|   130M|    FMT_CONSTEXPR auto operator*() -> bounded_output_iterator& { return *this; }
_ZZN3fmt3v126detail5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SA_NS0_17basic_string_viewIS7_EERKNS0_12format_specsEEN23bounded_output_iteratoraSEc:
 2235|   130M|    FMT_CONSTEXPR auto operator=(char c) -> bounded_output_iterator& {
 2236|   130M|      if (bound > 0) {
  ------------------
  |  Branch (2236:11): [True: 116M, False: 13.9M]
  ------------------
 2237|   116M|        *underlying_iterator++ = c;
 2238|   116M|        --bound;
 2239|   116M|      }
 2240|   130M|      return *this;
 2241|   130M|    }
_ZN3fmt3v126detail16write_escaped_cpIZNS1_5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SB_NS0_17basic_string_viewIS8_EERKNS0_12format_specsEE23bounded_output_iteratorcEES8_S8_RKNS1_18find_escape_resultISB_EE:
 1790|  31.4M|    -> OutputIt {
 1791|  31.4M|  auto c = static_cast<Char>(escape.cp);
 1792|  31.4M|  switch (escape.cp) {
 1793|   349k|  case '\n':
  ------------------
  |  Branch (1793:3): [True: 349k, False: 31.1M]
  ------------------
 1794|   349k|    *out++ = static_cast<Char>('\\');
 1795|   349k|    c = static_cast<Char>('n');
 1796|   349k|    break;
 1797|  95.7k|  case '\r':
  ------------------
  |  Branch (1797:3): [True: 95.7k, False: 31.3M]
  ------------------
 1798|  95.7k|    *out++ = static_cast<Char>('\\');
 1799|  95.7k|    c = static_cast<Char>('r');
 1800|  95.7k|    break;
 1801|  2.29M|  case '\t':
  ------------------
  |  Branch (1801:3): [True: 2.29M, False: 29.1M]
  ------------------
 1802|  2.29M|    *out++ = static_cast<Char>('\\');
 1803|  2.29M|    c = static_cast<Char>('t');
 1804|  2.29M|    break;
 1805|  21.5k|  case '"':  FMT_FALLTHROUGH;
  ------------------
  |  |  181|  21.5k|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
  |  Branch (1805:3): [True: 21.5k, False: 31.4M]
  ------------------
 1806|  21.5k|  case '\'': FMT_FALLTHROUGH;
  ------------------
  |  |  181|  21.5k|#  define FMT_FALLTHROUGH [[fallthrough]]
  ------------------
  |  Branch (1806:3): [True: 0, False: 31.4M]
  ------------------
 1807|  24.7k|  case '\\': *out++ = static_cast<Char>('\\'); break;
  ------------------
  |  Branch (1807:3): [True: 3.21k, False: 31.4M]
  ------------------
 1808|  28.7M|  default:
  ------------------
  |  Branch (1808:3): [True: 28.7M, False: 2.76M]
  ------------------
 1809|  28.7M|    if (escape.cp < 0x100) return write_codepoint<2, Char>(out, 'x', escape.cp);
  ------------------
  |  Branch (1809:9): [True: 22.9M, False: 5.73M]
  ------------------
 1810|  5.73M|    if (escape.cp < 0x10000)
  ------------------
  |  Branch (1810:9): [True: 32.6k, False: 5.69M]
  ------------------
 1811|  32.6k|      return write_codepoint<4, Char>(out, 'u', escape.cp);
 1812|  5.69M|    if (escape.cp < 0x110000)
  ------------------
  |  Branch (1812:9): [True: 20.3k, False: 5.67M]
  ------------------
 1813|  20.3k|      return write_codepoint<8, Char>(out, 'U', escape.cp);
 1814|  5.67M|    for (Char escape_char : basic_string_view<Char>(
  ------------------
  |  Branch (1814:27): [True: 5.67M, False: 5.67M]
  ------------------
 1815|  5.67M|             escape.begin, to_unsigned(escape.end - escape.begin))) {
 1816|  5.67M|      out = write_codepoint<2, Char>(out, 'x',
 1817|  5.67M|                                     static_cast<uint32_t>(escape_char) & 0xFF);
 1818|  5.67M|    }
 1819|  5.67M|    return out;
 1820|  31.4M|  }
 1821|  2.76M|  *out++ = c;
 1822|  2.76M|  return out;
 1823|  31.4M|}
_ZN3fmt3v126detail15write_codepointILm2EcZNS1_5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SB_NS0_17basic_string_viewIS8_EERKNS0_12format_specsEE23bounded_output_iteratorEET1_SI_cj:
 1779|  28.6M|auto write_codepoint(OutputIt out, char prefix, uint32_t cp) -> OutputIt {
 1780|  28.6M|  *out++ = static_cast<Char>('\\');
 1781|  28.6M|  *out++ = static_cast<Char>(prefix);
 1782|  28.6M|  Char buf[width];
 1783|  28.6M|  fill_n(buf, width, static_cast<Char>('0'));
 1784|  28.6M|  format_base2e(4, buf, cp, width);
 1785|  28.6M|  return copy<Char>(buf, buf + width, out);
 1786|  28.6M|}
_ZN3fmt3v126detail15write_codepointILm4EcZNS1_5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SB_NS0_17basic_string_viewIS8_EERKNS0_12format_specsEE23bounded_output_iteratorEET1_SI_cj:
 1779|  32.6k|auto write_codepoint(OutputIt out, char prefix, uint32_t cp) -> OutputIt {
 1780|  32.6k|  *out++ = static_cast<Char>('\\');
 1781|  32.6k|  *out++ = static_cast<Char>(prefix);
 1782|  32.6k|  Char buf[width];
 1783|  32.6k|  fill_n(buf, width, static_cast<Char>('0'));
 1784|  32.6k|  format_base2e(4, buf, cp, width);
 1785|  32.6k|  return copy<Char>(buf, buf + width, out);
 1786|  32.6k|}
_ZN3fmt3v126detail15write_codepointILm8EcZNS1_5writeIcNS0_14basic_appenderIcEETnNSt3__19enable_ifIXsr3std7is_sameIT_cEE5valueEiE4typeELi0EEET0_SB_NS0_17basic_string_viewIS8_EERKNS0_12format_specsEE23bounded_output_iteratorEET1_SI_cj:
 1779|  20.3k|auto write_codepoint(OutputIt out, char prefix, uint32_t cp) -> OutputIt {
 1780|  20.3k|  *out++ = static_cast<Char>('\\');
 1781|  20.3k|  *out++ = static_cast<Char>(prefix);
 1782|  20.3k|  Char buf[width];
 1783|  20.3k|  fill_n(buf, width, static_cast<Char>('0'));
 1784|  20.3k|  format_base2e(4, buf, cp, width);
 1785|  20.3k|  return copy<Char>(buf, buf + width, out);
 1786|  20.3k|}
_ZN3fmt3v126detail13arg_formatterIcEclINS0_17basic_string_viewIcEETnNSt3__19enable_ifIXsr10is_builtinIT_EE5valueEiE4typeELi0EEEvS9_:
 3683|  16.7k|  FMT_CONSTEXPR FMT_INLINE void operator()(T value) {
 3684|  16.7k|    detail::write<Char>(out, value, specs, locale);
 3685|  16.7k|  }
_ZN3fmt3v126detail14format_handlerIcE8on_errorEPKc:
 3804|  1.68k|  FMT_NORETURN void on_error(const char* message) { report_error(message); }
_ZN3fmt3v1210format_intC2Ej:
 4196|  29.2k|      : str_(format_unsigned(value)) {}
_ZN3fmt3v1219basic_memory_bufferIcLm250ENS0_6detail9allocatorIcEEE6resizeEm:
  907|    864|  FMT_CONSTEXPR void resize(size_t count) { this->try_resize(count); }
_ZN3fmt3v1210format_intC2Em:
 4198|   401k|      : str_(format_unsigned(value)) {}
_ZN3fmt3v1210format_int15format_unsignedImEEPcT_:
 4174|   420k|  FMT_CONSTEXPR20 auto format_unsigned(UInt value) -> char* {
 4175|   420k|    auto n = static_cast<detail::uint32_or_64_or_128_t<UInt>>(value);
 4176|   420k|    return detail::do_format_decimal(buffer_, n, buffer_size - 1);
 4177|   420k|  }
_ZN3fmt3v1210format_intC2Ex:
 4194|  18.9k|      : str_(format_signed(value)) {}
_ZN3fmt3v1210format_int13format_signedIxEEPcT_:
 4180|  18.9k|  FMT_CONSTEXPR20 auto format_signed(Int value) -> char* {
 4181|  18.9k|    auto abs_value = static_cast<detail::uint32_or_64_or_128_t<Int>>(value);
 4182|  18.9k|    bool negative = value < 0;
 4183|  18.9k|    if (negative) abs_value = 0 - abs_value;
  ------------------
  |  Branch (4183:9): [True: 0, False: 18.9k]
  ------------------
 4184|  18.9k|    auto begin = format_unsigned(abs_value);
 4185|  18.9k|    if (negative) *--begin = '-';
  ------------------
  |  Branch (4185:9): [True: 0, False: 18.9k]
  ------------------
 4186|  18.9k|    return begin;
 4187|  18.9k|  }

_ZN6spdlog9formatterD2Ev:
   13|  23.7k|    virtual ~formatter() = default;

_ZNK6spdlog6logger4nameEv:
   68|    387|SPDLOG_INLINE const std::string &logger::name() const { return name_; }
_ZN6spdlog6logger13set_formatterENSt3__110unique_ptrINS_9formatterENS1_14default_deleteIS3_EEEE:
   72|  15.8k|SPDLOG_INLINE void logger::set_formatter(std::unique_ptr<formatter> f) {
   73|  15.8k|    for (auto it = sinks_.begin(); it != sinks_.end(); ++it) {
  ------------------
  |  Branch (73:36): [True: 15.8k, False: 0]
  ------------------
   74|  15.8k|        if (std::next(it) == sinks_.end()) {
  ------------------
  |  Branch (74:13): [True: 15.8k, False: 0]
  ------------------
   75|       |            // last element - we can be move it.
   76|  15.8k|            (*it)->set_formatter(std::move(f));
   77|  15.8k|            break;  // to prevent clang-tidy warning
   78|  15.8k|        } else {
   79|      0|            (*it)->set_formatter(f->clone());
   80|      0|        }
   81|  15.8k|    }
   82|  15.8k|}
_ZN6spdlog6logger8sink_it_ERKNS_7details7log_msgE:
  135|  4.95k|SPDLOG_INLINE void logger::sink_it_(const details::log_msg &msg) {
  136|  4.95k|    for (auto &sink : sinks_) {
  ------------------
  |  Branch (136:21): [True: 4.95k, False: 4.95k]
  ------------------
  137|  4.95k|        if (sink->should_log(msg.level)) {
  ------------------
  |  Branch (137:13): [True: 4.95k, False: 0]
  ------------------
  138|  4.95k|            SPDLOG_TRY { sink->log(msg); }
  ------------------
  |  |  116|  4.95k|#define SPDLOG_TRY try
  ------------------
  139|  4.95k|            SPDLOG_LOGGER_CATCH(msg.source)
  ------------------
  |  |   32|  4.95k|    catch (const std::exception &ex) {                                                \
  |  |   33|      0|        if (location.filename) {                                                      \
  |  |  ------------------
  |  |  |  Branch (33:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   34|      0|            err_handler_(fmt_lib::format(SPDLOG_FMT_STRING("{} [{}({})]"), ex.what(), \
  |  |  ------------------
  |  |  |  |   55|      0|#define SPDLOG_FMT_STRING(format_string) FMT_STRING(format_string)
  |  |  |  |  ------------------
  |  |  |  |  |  | 4251|      0|#define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 4226|      0|    [] {                                                                     \
  |  |  |  |  |  |  |  | 4227|      0|      /* Use the hidden visibility as a workaround for a GCC bug (#1973). */ \
  |  |  |  |  |  |  |  | 4228|      0|      /* Use a macro-like name to avoid shadowing warnings. */               \
  |  |  |  |  |  |  |  | 4229|      0|      struct FMT_VISIBILITY("hidden") FMT_COMPILE_STRING : base {            \
  |  |  |  |  |  |  |  | 4230|      0|        using char_type = fmt::remove_cvref_t<decltype(s[0])>;               \
  |  |  |  |  |  |  |  | 4231|      0|        constexpr explicit operator fmt::basic_string_view<char_type>()      \
  |  |  |  |  |  |  |  | 4232|      0|            const {                                                          \
  |  |  |  |  |  |  |  | 4233|      0|          return fmt::detail::compile_string_to_view<char_type>(s);          \
  |  |  |  |  |  |  |  | 4234|      0|        }                                                                    \
  |  |  |  |  |  |  |  | 4235|      0|      };                                                                     \
  |  |  |  |  |  |  |  | 4236|      0|      using FMT_STRING_VIEW =                                                \
  |  |  |  |  |  |  |  | 4237|      0|          fmt::basic_string_view<typename FMT_COMPILE_STRING::char_type>;    \
  |  |  |  |  |  |  |  | 4238|      0|      fmt::detail::ignore_unused(FMT_STRING_VIEW(FMT_COMPILE_STRING()));     \
  |  |  |  |  |  |  |  | 4239|      0|      return FMT_COMPILE_STRING();                                           \
  |  |  |  |  |  |  |  | 4240|      0|    }()
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   35|      0|                                         location.filename, location.line));          \
  |  |   36|      0|        } else {                                                                      \
  |  |   37|      0|            err_handler_(ex.what());                                                  \
  |  |   38|      0|        }                                                                             \
  |  |   39|      0|    }                                                                                 \
  |  |   40|  4.95k|    catch (...) {                                                                     \
  |  |   41|      0|        err_handler_("Rethrowing unknown exception in logger");                       \
  |  |   42|      0|        throw;                                                                        \
  |  |   43|      0|    }
  ------------------
  140|  4.95k|        }
  141|  4.95k|    }
  142|       |
  143|  4.95k|    if (should_flush_(msg)) {
  ------------------
  |  Branch (143:9): [True: 0, False: 4.95k]
  ------------------
  144|      0|        flush_();
  145|      0|    }
  146|  4.95k|}
_ZNK6spdlog6logger12err_handler_ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  170|  2.96k|SPDLOG_INLINE void logger::err_handler_(const std::string &msg) const {
  171|  2.96k|    if (custom_err_handler_) {
  ------------------
  |  Branch (171:9): [True: 0, False: 2.96k]
  ------------------
  172|      0|        custom_err_handler_(msg);
  173|  2.96k|    } else {
  174|  2.96k|        using std::chrono::system_clock;
  175|  2.96k|        static std::mutex mutex;
  176|  2.96k|        static std::chrono::system_clock::time_point last_report_time;
  177|  2.96k|        static size_t err_counter = 0;
  178|  2.96k|        std::lock_guard<std::mutex> lk{mutex};
  179|  2.96k|        auto now = system_clock::now();
  180|  2.96k|        err_counter++;
  181|  2.96k|        if (now - last_report_time < std::chrono::seconds(1)) {
  ------------------
  |  Branch (181:13): [True: 2.57k, False: 384]
  ------------------
  182|  2.57k|            return;
  183|  2.57k|        }
  184|    384|        last_report_time = now;
  185|    384|        auto tm_time = details::os::localtime(system_clock::to_time_t(now));
  186|    384|        char date_buf[64];
  187|    384|        std::strftime(date_buf, sizeof(date_buf), "%Y-%m-%d %H:%M:%S", &tm_time);
  188|       |#if defined(USING_R) && defined(R_R_H)  // if in R environment
  189|       |        REprintf("[*** LOG ERROR #%04zu ***] [%s] [%s] %s\n", err_counter, date_buf, name().c_str(),
  190|       |                 msg.c_str());
  191|       |#else
  192|       |        std::fprintf(stderr, "[*** LOG ERROR #%04zu ***] [%s] [%s] %s\n", err_counter, date_buf,
  193|    384|                     name().c_str(), msg.c_str());
  194|    384|#endif
  195|    384|    }
  196|  2.96k|}
_ZNK6spdlog6logger13should_flush_ERKNS_7details7log_msgE:
  166|  4.95k|SPDLOG_INLINE bool logger::should_flush_(const details::log_msg &msg) const {
  167|  4.95k|    return (msg.level >= flush_level()) && (msg.level != level::off);
  ------------------
  |  Branch (167:12): [True: 0, False: 4.95k]
  |  Branch (167:44): [True: 0, False: 0]
  ------------------
  168|  4.95k|}
_ZNK6spdlog6logger11flush_levelEv:
  102|  4.95k|SPDLOG_INLINE level::level_enum logger::flush_level() const {
  103|  4.95k|    return static_cast<level::level_enum>(flush_level_.load(std::memory_order_relaxed));
  104|  4.95k|}
_ZN6spdlog6logger9set_levelENS_5level10level_enumE:
   62|      1|SPDLOG_INLINE void logger::set_level(level::level_enum log_level) { level_.store(log_level); }
_ZN6spdlog6logger8flush_onENS_5level10level_enumE:
  100|      1|SPDLOG_INLINE void logger::flush_on(level::level_enum log_level) { flush_level_.store(log_level); }
_ZN6spdlog6logger7log_it_ERKNS_7details7log_msgEbb:
  126|  4.95k|                                   bool traceback_enabled) {
  127|  4.95k|    if (log_enabled) {
  ------------------
  |  Branch (127:9): [True: 4.95k, False: 0]
  ------------------
  128|  4.95k|        sink_it_(log_msg);
  129|  4.95k|    }
  130|  4.95k|    if (traceback_enabled) {
  ------------------
  |  Branch (130:9): [True: 0, False: 4.95k]
  ------------------
  131|      0|        tracer_.push_back(log_msg);
  132|      0|    }
  133|  4.95k|}

_ZN6spdlog6loggerC2ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_10shared_ptrINS_5sinks4sinkEEE:
   65|      2|        : logger(std::move(name), {std::move(single_sink)}) {}
_ZN6spdlog6loggerC2ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEESt16initializer_listINS1_10shared_ptrINS_5sinks4sinkEEEE:
   69|      2|        : logger(std::move(name), sinks.begin(), sinks.end()) {}
_ZN6spdlog6loggerC2IPKNSt3__110shared_ptrINS_5sinks4sinkEEEEENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEET_SF_:
   60|      2|        : name_(std::move(name)),
   61|      2|          sinks_(begin, end) {}
_ZN6spdlog6loggerD2Ev:
   71|      2|    virtual ~logger() = default;
_ZN6spdlog6logger4infoIJRKmS3_RKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEvN3fmt3v127fstringIJDpT_EE1tEDpOSG_:
  143|  7.91k|    void info(format_string_t<Args...> fmt, Args &&...args) {
  144|  7.91k|        log(level::info, fmt, std::forward<Args>(args)...);
  145|  7.91k|    }
_ZN6spdlog6logger3logIJRKmS3_RKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEvNS_5level10level_enumEN3fmt3v127fstringIJDpT_EE1tEDpOSI_:
   88|  7.91k|    void log(level::level_enum lvl, format_string_t<Args...> fmt, Args &&...args) {
   89|  7.91k|        log(source_loc{}, lvl, fmt, std::forward<Args>(args)...);
   90|  7.91k|    }
_ZN6spdlog6logger3logIJRKmS3_RKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEvNS_10source_locENS_5level10level_enumEN3fmt3v127fstringIJDpT_EE1tEDpOSJ_:
   79|  7.91k|    void log(source_loc loc, level::level_enum lvl, format_string_t<Args...> fmt, Args &&...args) {
   80|       |#if defined(SPDLOG_USE_STD_FORMAT) && __cpp_lib_format < 202207L
   81|       |        log_(loc, lvl, fmt, std::forward<Args>(args)...);
   82|       |#else
   83|  7.91k|        log_(loc, lvl, fmt.get(), std::forward<Args>(args)...);
   84|  7.91k|#endif
   85|  7.91k|    }
_ZN6spdlog6logger4log_IJRKmS3_RKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEvNS_10source_locENS_5level10level_enumEN3fmt3v1217basic_string_viewIcEEDpOT_:
  325|  7.91k|    void log_(source_loc loc, level::level_enum lvl, string_view_t fmt, Args &&...args) {
  326|  7.91k|        bool log_enabled = should_log(lvl);
  327|  7.91k|        bool traceback_enabled = tracer_.enabled();
  328|  7.91k|        if (!log_enabled && !traceback_enabled) {
  ------------------
  |  Branch (328:13): [True: 0, False: 7.91k]
  |  Branch (328:29): [True: 0, False: 0]
  ------------------
  329|      0|            return;
  330|      0|        }
  331|  7.91k|        SPDLOG_TRY {
  ------------------
  |  |  116|  7.91k|#define SPDLOG_TRY try
  ------------------
  332|  7.91k|            memory_buf_t buf;
  333|       |#ifdef SPDLOG_USE_STD_FORMAT
  334|       |            fmt_lib::vformat_to(std::back_inserter(buf), fmt, fmt_lib::make_format_args(args...));
  335|       |#else
  336|  7.91k|            fmt::vformat_to(fmt::appender(buf), fmt, fmt::make_format_args(args...));
  337|  7.91k|#endif
  338|       |
  339|  7.91k|            details::log_msg log_msg(loc, name_, lvl, string_view_t(buf.data(), buf.size()));
  340|  7.91k|            log_it_(log_msg, log_enabled, traceback_enabled);
  341|  7.91k|        }
  342|  7.91k|        SPDLOG_LOGGER_CATCH(loc)
  ------------------
  |  |   32|  7.91k|    catch (const std::exception &ex) {                                                \
  |  |   33|  2.96k|        if (location.filename) {                                                      \
  |  |  ------------------
  |  |  |  Branch (33:13): [True: 0, False: 2.96k]
  |  |  ------------------
  |  |   34|      0|            err_handler_(fmt_lib::format(SPDLOG_FMT_STRING("{} [{}({})]"), ex.what(), \
  |  |  ------------------
  |  |  |  |   55|      0|#define SPDLOG_FMT_STRING(format_string) FMT_STRING(format_string)
  |  |  |  |  ------------------
  |  |  |  |  |  | 4251|      0|#define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  | 4226|      0|    [] {                                                                     \
  |  |  |  |  |  |  |  | 4227|      0|      /* Use the hidden visibility as a workaround for a GCC bug (#1973). */ \
  |  |  |  |  |  |  |  | 4228|      0|      /* Use a macro-like name to avoid shadowing warnings. */               \
  |  |  |  |  |  |  |  | 4229|      0|      struct FMT_VISIBILITY("hidden") FMT_COMPILE_STRING : base {            \
  |  |  |  |  |  |  |  | 4230|      0|        using char_type = fmt::remove_cvref_t<decltype(s[0])>;               \
  |  |  |  |  |  |  |  | 4231|      0|        constexpr explicit operator fmt::basic_string_view<char_type>()      \
  |  |  |  |  |  |  |  | 4232|      0|            const {                                                          \
  |  |  |  |  |  |  |  | 4233|      0|          return fmt::detail::compile_string_to_view<char_type>(s);          \
  |  |  |  |  |  |  |  | 4234|      0|        }                                                                    \
  |  |  |  |  |  |  |  | 4235|      0|      };                                                                     \
  |  |  |  |  |  |  |  | 4236|      0|      using FMT_STRING_VIEW =                                                \
  |  |  |  |  |  |  |  | 4237|      0|          fmt::basic_string_view<typename FMT_COMPILE_STRING::char_type>;    \
  |  |  |  |  |  |  |  | 4238|      0|      fmt::detail::ignore_unused(FMT_STRING_VIEW(FMT_COMPILE_STRING()));     \
  |  |  |  |  |  |  |  | 4239|      0|      return FMT_COMPILE_STRING();                                           \
  |  |  |  |  |  |  |  | 4240|      0|    }()
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   35|      0|                                         location.filename, location.line));          \
  |  |   36|  2.96k|        } else {                                                                      \
  |  |   37|  2.96k|            err_handler_(ex.what());                                                  \
  |  |   38|  2.96k|        }                                                                             \
  |  |   39|  2.96k|    }                                                                                 \
  |  |   40|  7.91k|    catch (...) {                                                                     \
  |  |   41|      0|        err_handler_("Rethrowing unknown exception in logger");                       \
  |  |   42|      0|        throw;                                                                        \
  |  |   43|      0|    }
  ------------------
  343|  7.91k|    }
_ZNK6spdlog6logger10should_logENS_5level10level_enumE:
  270|  7.91k|    bool should_log(level::level_enum msg_level) const {
  271|  7.91k|        return msg_level >= level_.load(std::memory_order_relaxed);
  272|  7.91k|    }

_ZN6spdlog3mdc11get_contextEv:
   46|   141k|    static mdc_map_t &get_context() {
   47|   141k|        static thread_local mdc_map_t context;
   48|   141k|        return context;
   49|   141k|    }

_ZNK6spdlog17pattern_formatter5cloneEv:
  977|  15.8k|SPDLOG_INLINE std::unique_ptr<formatter> pattern_formatter::clone() const {
  978|  15.8k|    custom_flags cloned_custom_formatters;
  979|  15.8k|    for (auto &it : custom_handlers_) {
  ------------------
  |  Branch (979:19): [True: 15.8k, False: 15.8k]
  ------------------
  980|  15.8k|        cloned_custom_formatters[it.first] = it.second->clone();
  981|  15.8k|    }
  982|  15.8k|    auto cloned = details::make_unique<pattern_formatter>(pattern_, pattern_time_type_, eol_,
  983|  15.8k|                                                          std::move(cloned_custom_formatters));
  984|  15.8k|    cloned->need_localtime(need_localtime_);
  985|  15.8k|#if defined(__GNUC__) && __GNUC__ < 5
  986|  15.8k|    return std::move(cloned);
  987|       |#else
  988|       |    return cloned;
  989|       |#endif
  990|  15.8k|}
_ZN6spdlog17pattern_formatter14need_localtimeEb:
 1015|  15.8k|SPDLOG_INLINE void pattern_formatter::need_localtime(bool need) { need_localtime_ = need; }
_ZN6spdlog17pattern_formatterC2ENS_17pattern_time_typeENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  968|  7.91k|    : pattern_("%+"),
  969|  7.91k|      eol_(std::move(eol)),
  970|  7.91k|      pattern_time_type_(time_type),
  971|  7.91k|      need_localtime_(true),
  972|  7.91k|      last_log_secs_(0) {
  973|  7.91k|    std::memset(&cached_tm_, 0, sizeof(cached_tm_));
  974|  7.91k|    formatters_.push_back(details::make_unique<details::full_formatter>(details::padding_info{}));
  975|  7.91k|}
_ZN6spdlog7details14full_formatterC2ENS0_12padding_infoE:
  856|   425k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details13mdc_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  816|   430k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details13mdc_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  818|  1.67k|    void format(const details::log_msg &, const std::tm &, memory_buf_t &dest) override {
  819|  1.67k|        const auto &mdc_map = mdc::get_context();
  820|  1.67k|        if (mdc_map.empty()) {
  ------------------
  |  Branch (820:13): [True: 1.67k, False: 0]
  ------------------
  821|  1.67k|            ScopedPadder p(0, padinfo_, dest);
  822|  1.67k|            return;
  823|  1.67k|        } else {
  824|      0|            format_mdc(mdc_map, dest);
  825|      0|        }
  826|  1.67k|    }
_ZN6spdlog7details18null_scoped_padderC2EmRKNS0_12padding_infoERN3fmt3v1219basic_memory_bufferIcLm250ENS6_6detail9allocatorIcEEEE:
   95|   710k|                       memory_buf_t & /*dest*/) {}
_ZN6spdlog7details14full_formatter6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENS9_6detail9allocatorIcEEEE:
  858|   138k|    void format(const details::log_msg &msg, const std::tm &tm_time, memory_buf_t &dest) override {
  859|   138k|        using std::chrono::duration_cast;
  860|   138k|        using std::chrono::milliseconds;
  861|   138k|        using std::chrono::seconds;
  862|       |
  863|       |        // cache the date/time part for the next second.
  864|   138k|        auto duration = msg.time.time_since_epoch();
  865|   138k|        auto secs = duration_cast<seconds>(duration);
  866|       |
  867|   138k|        if (cache_timestamp_ != secs || cached_datetime_.size() == 0) {
  ------------------
  |  Branch (867:13): [True: 138k, False: 0]
  |  Branch (867:41): [True: 0, False: 0]
  ------------------
  868|   138k|            cached_datetime_.clear();
  869|   138k|            cached_datetime_.push_back('[');
  870|   138k|            fmt_helper::append_int(tm_time.tm_year + 1900, cached_datetime_);
  871|   138k|            cached_datetime_.push_back('-');
  872|       |
  873|   138k|            fmt_helper::pad2(tm_time.tm_mon + 1, cached_datetime_);
  874|   138k|            cached_datetime_.push_back('-');
  875|       |
  876|   138k|            fmt_helper::pad2(tm_time.tm_mday, cached_datetime_);
  877|   138k|            cached_datetime_.push_back(' ');
  878|       |
  879|   138k|            fmt_helper::pad2(tm_time.tm_hour, cached_datetime_);
  880|   138k|            cached_datetime_.push_back(':');
  881|       |
  882|   138k|            fmt_helper::pad2(tm_time.tm_min, cached_datetime_);
  883|   138k|            cached_datetime_.push_back(':');
  884|       |
  885|   138k|            fmt_helper::pad2(tm_time.tm_sec, cached_datetime_);
  886|   138k|            cached_datetime_.push_back('.');
  887|       |
  888|   138k|            cache_timestamp_ = secs;
  889|   138k|        }
  890|   138k|        dest.append(cached_datetime_.begin(), cached_datetime_.end());
  891|       |
  892|   138k|        auto millis = fmt_helper::time_fraction<milliseconds>(msg.time);
  893|   138k|        fmt_helper::pad3(static_cast<uint32_t>(millis.count()), dest);
  894|   138k|        dest.push_back(']');
  895|   138k|        dest.push_back(' ');
  896|       |
  897|       |        // append logger name if exists
  898|   138k|        if (msg.logger_name.size() > 0) {
  ------------------
  |  Branch (898:13): [True: 138k, False: 0]
  ------------------
  899|   138k|            dest.push_back('[');
  900|   138k|            fmt_helper::append_string_view(msg.logger_name, dest);
  901|   138k|            dest.push_back(']');
  902|   138k|            dest.push_back(' ');
  903|   138k|        }
  904|       |
  905|   138k|        dest.push_back('[');
  906|       |        // wrap the level name with color
  907|   138k|        msg.color_range_start = dest.size();
  908|       |        // fmt_helper::append_string_view(level::to_c_str(msg.level), dest);
  909|   138k|        fmt_helper::append_string_view(level::to_string_view(msg.level), dest);
  910|   138k|        msg.color_range_end = dest.size();
  911|   138k|        dest.push_back(']');
  912|   138k|        dest.push_back(' ');
  913|       |
  914|       |        // add source location if present
  915|   138k|        if (!msg.source.empty()) {
  ------------------
  |  Branch (915:13): [True: 0, False: 138k]
  ------------------
  916|      0|            dest.push_back('[');
  917|      0|            const char *filename =
  918|      0|                details::short_filename_formatter<details::null_scoped_padder>::basename(
  919|      0|                    msg.source.filename);
  920|      0|            fmt_helper::append_string_view(filename, dest);
  921|      0|            dest.push_back(':');
  922|      0|            fmt_helper::append_int(msg.source.line, dest);
  923|      0|            dest.push_back(']');
  924|      0|            dest.push_back(' ');
  925|      0|        }
  926|       |
  927|   138k|#ifndef SPDLOG_NO_TLS
  928|       |        // add mdc if present
  929|   138k|        auto &mdc_map = mdc::get_context();
  930|   138k|        if (!mdc_map.empty()) {
  ------------------
  |  Branch (930:13): [True: 0, False: 138k]
  ------------------
  931|      0|            dest.push_back('[');
  932|      0|            mdc_formatter_.format_mdc(mdc_map, dest);
  933|      0|            dest.push_back(']');
  934|      0|            dest.push_back(' ');
  935|      0|        }
  936|   138k|#endif
  937|       |        // fmt_helper::append_string_view(msg.msg(), dest);
  938|   138k|        fmt_helper::append_string_view(msg.payload, dest);
  939|   138k|    }
_ZN6spdlog17pattern_formatterC2ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS_17pattern_time_typeES7_NS1_13unordered_mapIcNS1_10unique_ptrINS_21custom_flag_formatterENS1_14default_deleteISB_EEEENS1_4hashIcEENS1_8equal_toIcEENS5_INS1_4pairIKcSE_EEEEEE:
  956|  15.8k|    : pattern_(std::move(pattern)),
  957|  15.8k|      eol_(std::move(eol)),
  958|  15.8k|      pattern_time_type_(time_type),
  959|  15.8k|      need_localtime_(false),
  960|  15.8k|      last_log_secs_(0),
  961|  15.8k|      custom_handlers_(std::move(custom_user_flags)) {
  962|  15.8k|    std::memset(&cached_tm_, 0, sizeof(cached_tm_));
  963|  15.8k|    compile_pattern_(pattern_);
  964|  15.8k|}
_ZN6spdlog17pattern_formatter16compile_pattern_ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 1318|  23.7k|SPDLOG_INLINE void pattern_formatter::compile_pattern_(const std::string &pattern) {
 1319|  23.7k|    auto end = pattern.end();
 1320|  23.7k|    std::unique_ptr<details::aggregate_formatter> user_chars;
 1321|  23.7k|    formatters_.clear();
 1322|  57.2M|    for (auto it = pattern.begin(); it != end; ++it) {
  ------------------
  |  Branch (1322:37): [True: 57.1M, False: 21.0k]
  ------------------
 1323|  57.1M|        if (*it == '%') {
  ------------------
  |  Branch (1323:13): [True: 5.31M, False: 51.8M]
  ------------------
 1324|  5.31M|            if (user_chars)  // append user chars found so far
  ------------------
  |  Branch (1324:17): [True: 1.66M, False: 3.64M]
  ------------------
 1325|  1.66M|            {
 1326|  1.66M|                formatters_.push_back(std::move(user_chars));
 1327|  1.66M|            }
 1328|       |
 1329|  5.31M|            auto padding = handle_padspec_(++it, end);
 1330|       |
 1331|  5.31M|            if (it != end) {
  ------------------
  |  Branch (1331:17): [True: 5.30M, False: 2.63k]
  ------------------
 1332|  5.30M|                if (padding.enabled()) {
  ------------------
  |  Branch (1332:21): [True: 1.77M, False: 3.52M]
  ------------------
 1333|  1.77M|                    handle_flag_<details::scoped_padder>(*it, padding);
 1334|  3.52M|                } else {
 1335|  3.52M|                    handle_flag_<details::null_scoped_padder>(*it, padding);
 1336|  3.52M|                }
 1337|  5.30M|            } else {
 1338|  2.63k|                break;
 1339|  2.63k|            }
 1340|  5.31M|        } else  // chars not following the % sign should be displayed as is
 1341|  51.8M|        {
 1342|  51.8M|            if (!user_chars) {
  ------------------
  |  Branch (1342:17): [True: 1.66M, False: 50.2M]
  ------------------
 1343|  1.66M|                user_chars = details::make_unique<details::aggregate_formatter>();
 1344|  1.66M|            }
 1345|  51.8M|            user_chars->add_ch(*it);
 1346|  51.8M|        }
 1347|  57.1M|    }
 1348|  23.7k|    if (user_chars)  // append raw chars found so far
  ------------------
  |  Branch (1348:9): [True: 6.87k, False: 16.8k]
  ------------------
 1349|  6.87k|    {
 1350|  6.87k|        formatters_.push_back(std::move(user_chars));
 1351|  6.87k|    }
 1352|  23.7k|}
_ZN6spdlog17pattern_formatter15handle_padspec_ERNSt3__111__wrap_iterIPKcEES5_:
 1274|  5.31M|    std::string::const_iterator &it, std::string::const_iterator end) {
 1275|  5.31M|    using details::padding_info;
 1276|  5.31M|    using details::scoped_padder;
 1277|  5.31M|    const size_t max_width = 64;
 1278|  5.31M|    if (it == end) {
  ------------------
  |  Branch (1278:9): [True: 1.80k, False: 5.30M]
  ------------------
 1279|  1.80k|        return padding_info{};
 1280|  1.80k|    }
 1281|       |
 1282|  5.30M|    padding_info::pad_side side;
 1283|  5.30M|    switch (*it) {
 1284|  18.4k|        case '-':
  ------------------
  |  Branch (1284:9): [True: 18.4k, False: 5.29M]
  ------------------
 1285|  18.4k|            side = padding_info::pad_side::right;
 1286|  18.4k|            ++it;
 1287|  18.4k|            break;
 1288|  36.9k|        case '=':
  ------------------
  |  Branch (1288:9): [True: 36.9k, False: 5.27M]
  ------------------
 1289|  36.9k|            side = padding_info::pad_side::center;
 1290|  36.9k|            ++it;
 1291|  36.9k|            break;
 1292|  5.25M|        default:
  ------------------
  |  Branch (1292:9): [True: 5.25M, False: 55.4k]
  ------------------
 1293|  5.25M|            side = details::padding_info::pad_side::left;
 1294|  5.25M|            break;
 1295|  5.30M|    }
 1296|       |
 1297|  5.30M|    if (it == end || !std::isdigit(static_cast<unsigned char>(*it))) {
  ------------------
  |  Branch (1297:9): [True: 42, False: 5.30M]
  |  Branch (1297:22): [True: 3.52M, False: 1.78M]
  ------------------
 1298|  3.52M|        return padding_info{};  // no padding if no digit found here
 1299|  3.52M|    }
 1300|       |
 1301|  1.78M|    auto width = static_cast<size_t>(*it) - '0';
 1302|  2.26M|    for (++it; it != end && std::isdigit(static_cast<unsigned char>(*it)); ++it) {
  ------------------
  |  Branch (1302:16): [True: 2.26M, False: 786]
  |  Branch (1302:29): [True: 482k, False: 1.77M]
  ------------------
 1303|   482k|        auto digit = static_cast<size_t>(*it) - '0';
 1304|   482k|        width = width * 10 + digit;
 1305|   482k|    }
 1306|       |
 1307|       |    // search for the optional truncate marker '!'
 1308|  1.78M|    bool truncate;
 1309|  1.78M|    if (it != end && *it == '!') {
  ------------------
  |  Branch (1309:9): [True: 1.77M, False: 786]
  |  Branch (1309:22): [True: 8.46k, False: 1.77M]
  ------------------
 1310|  8.46k|        truncate = true;
 1311|  8.46k|        ++it;
 1312|  1.77M|    } else {
 1313|  1.77M|        truncate = false;
 1314|  1.77M|    }
 1315|  1.78M|    return details::padding_info{std::min<size_t>(width, max_width), side, truncate};
 1316|  5.30M|}
_ZN6spdlog17pattern_formatter12handle_flag_INS_7details13scoped_padderEEEvcNS2_12padding_infoE:
 1025|  1.77M|SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_info padding) {
 1026|       |    // process custom flags
 1027|  1.77M|    auto it = custom_handlers_.find(flag);
 1028|  1.77M|    if (it != custom_handlers_.end()) {
  ------------------
  |  Branch (1028:9): [True: 4.71k, False: 1.77M]
  ------------------
 1029|  4.71k|        auto custom_handler = it->second->clone();
 1030|  4.71k|        custom_handler->set_padding_info(padding);
 1031|  4.71k|        formatters_.push_back(std::move(custom_handler));
 1032|  4.71k|        return;
 1033|  4.71k|    }
 1034|       |
 1035|       |    // process built-in flags
 1036|  1.77M|    switch (flag) {
 1037|  7.29k|        case ('+'):  // default formatter
  ------------------
  |  Branch (1037:9): [True: 7.29k, False: 1.76M]
  ------------------
 1038|  7.29k|            formatters_.push_back(details::make_unique<details::full_formatter>(padding));
 1039|  7.29k|            need_localtime_ = true;
 1040|  7.29k|            break;
 1041|       |
 1042|  26.1k|        case 'n':  // logger name
  ------------------
  |  Branch (1042:9): [True: 26.1k, False: 1.74M]
  ------------------
 1043|  26.1k|            formatters_.push_back(details::make_unique<details::name_formatter<Padder>>(padding));
 1044|  26.1k|            break;
 1045|       |
 1046|  7.69k|        case 'l':  // level
  ------------------
  |  Branch (1046:9): [True: 7.69k, False: 1.76M]
  ------------------
 1047|  7.69k|            formatters_.push_back(details::make_unique<details::level_formatter<Padder>>(padding));
 1048|  7.69k|            break;
 1049|       |
 1050|  37.9k|        case 'L':  // short level
  ------------------
  |  Branch (1050:9): [True: 37.9k, False: 1.73M]
  ------------------
 1051|  37.9k|            formatters_.push_back(
 1052|  37.9k|                details::make_unique<details::short_level_formatter<Padder>>(padding));
 1053|  37.9k|            break;
 1054|       |
 1055|  5.93k|        case ('t'):  // thread id
  ------------------
  |  Branch (1055:9): [True: 5.93k, False: 1.76M]
  ------------------
 1056|  5.93k|            formatters_.push_back(details::make_unique<details::t_formatter<Padder>>(padding));
 1057|  5.93k|            break;
 1058|       |
 1059|  8.40k|        case ('v'):  // the message text
  ------------------
  |  Branch (1059:9): [True: 8.40k, False: 1.76M]
  ------------------
 1060|  8.40k|            formatters_.push_back(details::make_unique<details::v_formatter<Padder>>(padding));
 1061|  8.40k|            break;
 1062|       |
 1063|  10.8k|        case ('a'):  // weekday
  ------------------
  |  Branch (1063:9): [True: 10.8k, False: 1.76M]
  ------------------
 1064|  10.8k|            formatters_.push_back(details::make_unique<details::a_formatter<Padder>>(padding));
 1065|  10.8k|            need_localtime_ = true;
 1066|  10.8k|            break;
 1067|       |
 1068|  7.23k|        case ('A'):  // short weekday
  ------------------
  |  Branch (1068:9): [True: 7.23k, False: 1.76M]
  ------------------
 1069|  7.23k|            formatters_.push_back(details::make_unique<details::A_formatter<Padder>>(padding));
 1070|  7.23k|            need_localtime_ = true;
 1071|  7.23k|            break;
 1072|       |
 1073|  12.2k|        case ('b'):
  ------------------
  |  Branch (1073:9): [True: 12.2k, False: 1.76M]
  ------------------
 1074|  13.7k|        case ('h'):  // month
  ------------------
  |  Branch (1074:9): [True: 1.47k, False: 1.77M]
  ------------------
 1075|  13.7k|            formatters_.push_back(details::make_unique<details::b_formatter<Padder>>(padding));
 1076|  13.7k|            need_localtime_ = true;
 1077|  13.7k|            break;
 1078|       |
 1079|  37.5k|        case ('B'):  // short month
  ------------------
  |  Branch (1079:9): [True: 37.5k, False: 1.73M]
  ------------------
 1080|  37.5k|            formatters_.push_back(details::make_unique<details::B_formatter<Padder>>(padding));
 1081|  37.5k|            need_localtime_ = true;
 1082|  37.5k|            break;
 1083|       |
 1084|  20.7k|        case ('c'):  // datetime
  ------------------
  |  Branch (1084:9): [True: 20.7k, False: 1.75M]
  ------------------
 1085|  20.7k|            formatters_.push_back(details::make_unique<details::c_formatter<Padder>>(padding));
 1086|  20.7k|            need_localtime_ = true;
 1087|  20.7k|            break;
 1088|       |
 1089|  3.69k|        case ('C'):  // year 2 digits
  ------------------
  |  Branch (1089:9): [True: 3.69k, False: 1.77M]
  ------------------
 1090|  3.69k|            formatters_.push_back(details::make_unique<details::C_formatter<Padder>>(padding));
 1091|  3.69k|            need_localtime_ = true;
 1092|  3.69k|            break;
 1093|       |
 1094|  36.9k|        case ('Y'):  // year 4 digits
  ------------------
  |  Branch (1094:9): [True: 36.9k, False: 1.73M]
  ------------------
 1095|  36.9k|            formatters_.push_back(details::make_unique<details::Y_formatter<Padder>>(padding));
 1096|  36.9k|            need_localtime_ = true;
 1097|  36.9k|            break;
 1098|       |
 1099|  9.89k|        case ('D'):
  ------------------
  |  Branch (1099:9): [True: 9.89k, False: 1.76M]
  ------------------
 1100|  14.0k|        case ('x'):  // datetime MM/DD/YY
  ------------------
  |  Branch (1100:9): [True: 4.15k, False: 1.77M]
  ------------------
 1101|  14.0k|            formatters_.push_back(details::make_unique<details::D_formatter<Padder>>(padding));
 1102|  14.0k|            need_localtime_ = true;
 1103|  14.0k|            break;
 1104|       |
 1105|  28.7k|        case ('m'):  // month 1-12
  ------------------
  |  Branch (1105:9): [True: 28.7k, False: 1.74M]
  ------------------
 1106|  28.7k|            formatters_.push_back(details::make_unique<details::m_formatter<Padder>>(padding));
 1107|  28.7k|            need_localtime_ = true;
 1108|  28.7k|            break;
 1109|       |
 1110|  41.0k|        case ('d'):  // day of month 1-31
  ------------------
  |  Branch (1110:9): [True: 41.0k, False: 1.73M]
  ------------------
 1111|  41.0k|            formatters_.push_back(details::make_unique<details::d_formatter<Padder>>(padding));
 1112|  41.0k|            need_localtime_ = true;
 1113|  41.0k|            break;
 1114|       |
 1115|  31.4k|        case ('H'):  // hours 24
  ------------------
  |  Branch (1115:9): [True: 31.4k, False: 1.74M]
  ------------------
 1116|  31.4k|            formatters_.push_back(details::make_unique<details::H_formatter<Padder>>(padding));
 1117|  31.4k|            need_localtime_ = true;
 1118|  31.4k|            break;
 1119|       |
 1120|   161k|        case ('I'):  // hours 12
  ------------------
  |  Branch (1120:9): [True: 161k, False: 1.61M]
  ------------------
 1121|   161k|            formatters_.push_back(details::make_unique<details::I_formatter<Padder>>(padding));
 1122|   161k|            need_localtime_ = true;
 1123|   161k|            break;
 1124|       |
 1125|  27.9k|        case ('M'):  // minutes
  ------------------
  |  Branch (1125:9): [True: 27.9k, False: 1.74M]
  ------------------
 1126|  27.9k|            formatters_.push_back(details::make_unique<details::M_formatter<Padder>>(padding));
 1127|  27.9k|            need_localtime_ = true;
 1128|  27.9k|            break;
 1129|       |
 1130|  9.54k|        case ('S'):  // seconds
  ------------------
  |  Branch (1130:9): [True: 9.54k, False: 1.76M]
  ------------------
 1131|  9.54k|            formatters_.push_back(details::make_unique<details::S_formatter<Padder>>(padding));
 1132|  9.54k|            need_localtime_ = true;
 1133|  9.54k|            break;
 1134|       |
 1135|  29.2k|        case ('e'):  // milliseconds
  ------------------
  |  Branch (1135:9): [True: 29.2k, False: 1.74M]
  ------------------
 1136|  29.2k|            formatters_.push_back(details::make_unique<details::e_formatter<Padder>>(padding));
 1137|  29.2k|            break;
 1138|       |
 1139|  25.7k|        case ('f'):  // microseconds
  ------------------
  |  Branch (1139:9): [True: 25.7k, False: 1.74M]
  ------------------
 1140|  25.7k|            formatters_.push_back(details::make_unique<details::f_formatter<Padder>>(padding));
 1141|  25.7k|            break;
 1142|       |
 1143|  23.4k|        case ('F'):  // nanoseconds
  ------------------
  |  Branch (1143:9): [True: 23.4k, False: 1.75M]
  ------------------
 1144|  23.4k|            formatters_.push_back(details::make_unique<details::F_formatter<Padder>>(padding));
 1145|  23.4k|            break;
 1146|       |
 1147|  6.78k|        case ('E'):  // seconds since epoch
  ------------------
  |  Branch (1147:9): [True: 6.78k, False: 1.76M]
  ------------------
 1148|  6.78k|            formatters_.push_back(details::make_unique<details::E_formatter<Padder>>(padding));
 1149|  6.78k|            break;
 1150|       |
 1151|  17.8k|        case ('p'):  // am/pm
  ------------------
  |  Branch (1151:9): [True: 17.8k, False: 1.75M]
  ------------------
 1152|  17.8k|            formatters_.push_back(details::make_unique<details::p_formatter<Padder>>(padding));
 1153|  17.8k|            need_localtime_ = true;
 1154|  17.8k|            break;
 1155|       |
 1156|  19.9k|        case ('r'):  // 12 hour clock 02:55:02 pm
  ------------------
  |  Branch (1156:9): [True: 19.9k, False: 1.75M]
  ------------------
 1157|  19.9k|            formatters_.push_back(details::make_unique<details::r_formatter<Padder>>(padding));
 1158|  19.9k|            need_localtime_ = true;
 1159|  19.9k|            break;
 1160|       |
 1161|  5.96k|        case ('R'):  // 24-hour HH:MM time
  ------------------
  |  Branch (1161:9): [True: 5.96k, False: 1.76M]
  ------------------
 1162|  5.96k|            formatters_.push_back(details::make_unique<details::R_formatter<Padder>>(padding));
 1163|  5.96k|            need_localtime_ = true;
 1164|  5.96k|            break;
 1165|       |
 1166|  23.9k|        case ('T'):
  ------------------
  |  Branch (1166:9): [True: 23.9k, False: 1.75M]
  ------------------
 1167|  27.4k|        case ('X'):  // ISO 8601 time format (HH:MM:SS)
  ------------------
  |  Branch (1167:9): [True: 3.53k, False: 1.77M]
  ------------------
 1168|  27.4k|            formatters_.push_back(details::make_unique<details::T_formatter<Padder>>(padding));
 1169|  27.4k|            need_localtime_ = true;
 1170|  27.4k|            break;
 1171|  24.1k|        case ('z'):  // timezone
  ------------------
  |  Branch (1171:9): [True: 24.1k, False: 1.75M]
  ------------------
 1172|  24.1k|            formatters_.push_back(
 1173|  24.1k|                details::make_unique<details::z_formatter<Padder>>(padding, pattern_time_type_));
 1174|  24.1k|            need_localtime_ = true;
 1175|  24.1k|            break;
 1176|  2.80k|        case ('P'):  // pid
  ------------------
  |  Branch (1176:9): [True: 2.80k, False: 1.77M]
  ------------------
 1177|  2.80k|            formatters_.push_back(details::make_unique<details::pid_formatter<Padder>>(padding));
 1178|  2.80k|            break;
 1179|       |
 1180|  19.3k|        case ('^'):  // color range start
  ------------------
  |  Branch (1180:9): [True: 19.3k, False: 1.75M]
  ------------------
 1181|  19.3k|            formatters_.push_back(details::make_unique<details::color_start_formatter>(padding));
 1182|  19.3k|            break;
 1183|       |
 1184|  24.1k|        case ('$'):  // color range end
  ------------------
  |  Branch (1184:9): [True: 24.1k, False: 1.75M]
  ------------------
 1185|  24.1k|            formatters_.push_back(details::make_unique<details::color_stop_formatter>(padding));
 1186|  24.1k|            break;
 1187|       |
 1188|  13.2k|        case ('@'):  // source location (filename:filenumber)
  ------------------
  |  Branch (1188:9): [True: 13.2k, False: 1.76M]
  ------------------
 1189|  13.2k|            formatters_.push_back(
 1190|  13.2k|                details::make_unique<details::source_location_formatter<Padder>>(padding));
 1191|  13.2k|            break;
 1192|       |
 1193|  4.03k|        case ('s'):  // short source filename - without directory name
  ------------------
  |  Branch (1193:9): [True: 4.03k, False: 1.77M]
  ------------------
 1194|  4.03k|            formatters_.push_back(
 1195|  4.03k|                details::make_unique<details::short_filename_formatter<Padder>>(padding));
 1196|  4.03k|            break;
 1197|       |
 1198|  33.8k|        case ('g'):  // full source filename
  ------------------
  |  Branch (1198:9): [True: 33.8k, False: 1.74M]
  ------------------
 1199|  33.8k|            formatters_.push_back(
 1200|  33.8k|                details::make_unique<details::source_filename_formatter<Padder>>(padding));
 1201|  33.8k|            break;
 1202|       |
 1203|  14.6k|        case ('#'):  // source line number
  ------------------
  |  Branch (1203:9): [True: 14.6k, False: 1.76M]
  ------------------
 1204|  14.6k|            formatters_.push_back(
 1205|  14.6k|                details::make_unique<details::source_linenum_formatter<Padder>>(padding));
 1206|  14.6k|            break;
 1207|       |
 1208|  2.22k|        case ('!'):  // source funcname
  ------------------
  |  Branch (1208:9): [True: 2.22k, False: 1.77M]
  ------------------
 1209|  2.22k|            formatters_.push_back(
 1210|  2.22k|                details::make_unique<details::source_funcname_formatter<Padder>>(padding));
 1211|  2.22k|            break;
 1212|       |
 1213|  22.9k|        case ('%'):  // % char
  ------------------
  |  Branch (1213:9): [True: 22.9k, False: 1.75M]
  ------------------
 1214|  22.9k|            formatters_.push_back(details::make_unique<details::ch_formatter>('%'));
 1215|  22.9k|            break;
 1216|       |
 1217|  29.6k|        case ('u'):  // elapsed time since last log message in nanos
  ------------------
  |  Branch (1217:9): [True: 29.6k, False: 1.74M]
  ------------------
 1218|  29.6k|            formatters_.push_back(
 1219|  29.6k|                details::make_unique<details::elapsed_formatter<Padder, std::chrono::nanoseconds>>(
 1220|  29.6k|                    padding));
 1221|  29.6k|            break;
 1222|       |
 1223|   684k|        case ('i'):  // elapsed time since last log message in micros
  ------------------
  |  Branch (1223:9): [True: 684k, False: 1.09M]
  ------------------
 1224|   684k|            formatters_.push_back(
 1225|   684k|                details::make_unique<details::elapsed_formatter<Padder, std::chrono::microseconds>>(
 1226|   684k|                    padding));
 1227|   684k|            break;
 1228|       |
 1229|  5.13k|        case ('o'):  // elapsed time since last log message in millis
  ------------------
  |  Branch (1229:9): [True: 5.13k, False: 1.76M]
  ------------------
 1230|  5.13k|            formatters_.push_back(
 1231|  5.13k|                details::make_unique<details::elapsed_formatter<Padder, std::chrono::milliseconds>>(
 1232|  5.13k|                    padding));
 1233|  5.13k|            break;
 1234|       |
 1235|  48.4k|        case ('O'):  // elapsed time since last log message in seconds
  ------------------
  |  Branch (1235:9): [True: 48.4k, False: 1.72M]
  ------------------
 1236|  48.4k|            formatters_.push_back(
 1237|  48.4k|                details::make_unique<details::elapsed_formatter<Padder, std::chrono::seconds>>(
 1238|  48.4k|                    padding));
 1239|  48.4k|            break;
 1240|       |
 1241|      0|#ifndef SPDLOG_NO_TLS  // mdc formatter requires TLS support
 1242|  2.35k|        case ('&'):
  ------------------
  |  Branch (1242:9): [True: 2.35k, False: 1.77M]
  ------------------
 1243|  2.35k|            formatters_.push_back(details::make_unique<details::mdc_formatter<Padder>>(padding));
 1244|  2.35k|            break;
 1245|      0|#endif
 1246|       |
 1247|   148k|        default:  // Unknown flag appears as is
  ------------------
  |  Branch (1247:9): [True: 148k, False: 1.62M]
  ------------------
 1248|   148k|            auto unknown_flag = details::make_unique<details::aggregate_formatter>();
 1249|       |
 1250|   148k|            if (!padding.truncate_) {
  ------------------
  |  Branch (1250:17): [True: 146k, False: 2.21k]
  ------------------
 1251|   146k|                unknown_flag->add_ch('%');
 1252|   146k|                unknown_flag->add_ch(flag);
 1253|   146k|                formatters_.push_back((std::move(unknown_flag)));
 1254|   146k|            }
 1255|       |            // fix issue #1617 (prev char was '!' and should have been treated as funcname flag
 1256|       |            // instead of truncating flag) spdlog::set_pattern("[%10!] %v") => "[      main] some
 1257|       |            // message" spdlog::set_pattern("[%3!!] %v") => "[mai] some message"
 1258|  2.21k|            else {
 1259|  2.21k|                padding.truncate_ = false;
 1260|  2.21k|                formatters_.push_back(
 1261|  2.21k|                    details::make_unique<details::source_funcname_formatter<Padder>>(padding));
 1262|  2.21k|                unknown_flag->add_ch(flag);
 1263|  2.21k|                formatters_.push_back((std::move(unknown_flag)));
 1264|  2.21k|            }
 1265|       |
 1266|   148k|            break;
 1267|  1.77M|    }
 1268|  1.77M|}
_ZN6spdlog7details14name_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  107|  26.1k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details14name_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  109|  8.68k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  110|  8.68k|        ScopedPadder p(msg.logger_name.size(), padinfo_, dest);
  111|  8.68k|        fmt_helper::append_string_view(msg.logger_name, dest);
  112|  8.68k|    }
_ZN6spdlog7details13scoped_padderC2EmRKNS0_12padding_infoERN3fmt3v1219basic_memory_bufferIcLm250ENS6_6detail9allocatorIcEEEE:
   45|   511k|        : padinfo_(padinfo),
   46|   511k|          dest_(dest) {
   47|   511k|        remaining_pad_ = static_cast<long>(padinfo.width_) - static_cast<long>(wrapped_size);
   48|   511k|        if (remaining_pad_ <= 0) {
  ------------------
  |  Branch (48:13): [True: 388k, False: 122k]
  ------------------
   49|   388k|            return;
   50|   388k|        }
   51|       |
   52|   122k|        if (padinfo_.side_ == padding_info::pad_side::left) {
  ------------------
  |  Branch (52:13): [True: 112k, False: 10.3k]
  ------------------
   53|   112k|            pad_it(remaining_pad_);
   54|   112k|            remaining_pad_ = 0;
   55|   112k|        } else if (padinfo_.side_ == padding_info::pad_side::center) {
  ------------------
  |  Branch (55:20): [True: 6.57k, False: 3.79k]
  ------------------
   56|  6.57k|            auto half_pad = remaining_pad_ / 2;
   57|  6.57k|            auto reminder = remaining_pad_ & 1;
   58|  6.57k|            pad_it(half_pad);
   59|  6.57k|            remaining_pad_ = half_pad + reminder;  // for the right side
   60|  6.57k|        }
   61|   122k|    }
_ZN6spdlog7details13scoped_padder6pad_itEl:
   81|   261k|    void pad_it(long count) {
   82|   261k|        fmt_helper::append_string_view(string_view_t(spaces_.data(), static_cast<size_t>(count)),
   83|   261k|                                       dest_);
   84|   261k|    }
_ZN6spdlog7details13scoped_padderD2Ev:
   68|   511k|    ~scoped_padder() {
   69|   511k|        if (remaining_pad_ >= 0) {
  ------------------
  |  Branch (69:13): [True: 142k, False: 368k]
  ------------------
   70|   142k|            pad_it(remaining_pad_);
   71|   368k|        } else if (padinfo_.truncate_) {
  ------------------
  |  Branch (71:20): [True: 864, False: 368k]
  ------------------
   72|    864|            long new_size = static_cast<long>(dest_.size()) + remaining_pad_;
   73|    864|            if (new_size < 0) {
  ------------------
  |  Branch (73:17): [True: 0, False: 864]
  ------------------
   74|      0|                new_size = 0;
   75|      0|            }
   76|    864|            dest_.resize(static_cast<size_t>(new_size));
   77|    864|        }
   78|   511k|    }
_ZN6spdlog7details15level_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  120|  7.69k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details15level_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  122|  2.51k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  123|  2.51k|        const string_view_t &level_name = level::to_string_view(msg.level);
  124|  2.51k|        ScopedPadder p(level_name.size(), padinfo_, dest);
  125|  2.51k|        fmt_helper::append_string_view(level_name, dest);
  126|  2.51k|    }
_ZN6spdlog7details21short_level_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  134|  37.9k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details21short_level_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  136|  12.5k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  137|  12.5k|        string_view_t level_name{level::to_short_c_str(msg.level)};
  138|  12.5k|        ScopedPadder p(level_name.size(), padinfo_, dest);
  139|  12.5k|        fmt_helper::append_string_view(level_name, dest);
  140|  12.5k|    }
_ZN6spdlog7details11t_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  575|  5.93k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11t_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  577|  1.86k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  578|  1.86k|        const auto field_size = ScopedPadder::count_digits(msg.thread_id);
  579|  1.86k|        ScopedPadder p(field_size, padinfo_, dest);
  580|  1.86k|        fmt_helper::append_int(msg.thread_id, dest);
  581|  1.86k|    }
_ZN6spdlog7details13scoped_padder12count_digitsImEEjT_:
   64|   257k|    static unsigned int count_digits(T n) {
   65|   257k|        return fmt_helper::count_digits(n);
   66|   257k|    }
_ZN6spdlog7details11v_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  603|  8.40k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11v_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  605|  2.73k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  606|  2.73k|        ScopedPadder p(msg.payload.size(), padinfo_, dest);
  607|  2.73k|        fmt_helper::append_string_view(msg.payload, dest);
  608|  2.73k|    }
_ZN6spdlog7details11a_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  158|  10.8k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11a_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  160|  3.62k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  161|  3.62k|        string_view_t field_value{days[static_cast<size_t>(tm_time.tm_wday)]};
  162|  3.62k|        ScopedPadder p(field_value.size(), padinfo_, dest);
  163|  3.62k|        fmt_helper::append_string_view(field_value, dest);
  164|  3.62k|    }
_ZN6spdlog7details11A_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  175|  7.23k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11A_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  177|  2.31k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  178|  2.31k|        string_view_t field_value{full_days[static_cast<size_t>(tm_time.tm_wday)]};
  179|  2.31k|        ScopedPadder p(field_value.size(), padinfo_, dest);
  180|  2.31k|        fmt_helper::append_string_view(field_value, dest);
  181|  2.31k|    }
_ZN6spdlog7details11b_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  192|  13.7k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11b_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  194|  4.43k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  195|  4.43k|        string_view_t field_value{months[static_cast<size_t>(tm_time.tm_mon)]};
  196|  4.43k|        ScopedPadder p(field_value.size(), padinfo_, dest);
  197|  4.43k|        fmt_helper::append_string_view(field_value, dest);
  198|  4.43k|    }
_ZN6spdlog7details11B_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  210|  37.5k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11B_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  212|  12.3k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  213|  12.3k|        string_view_t field_value{full_months[static_cast<size_t>(tm_time.tm_mon)]};
  214|  12.3k|        ScopedPadder p(field_value.size(), padinfo_, dest);
  215|  12.3k|        fmt_helper::append_string_view(field_value, dest);
  216|  12.3k|    }
_ZN6spdlog7details11c_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  224|  20.7k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11c_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  226|  6.89k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  227|  6.89k|        const size_t field_size = 18 + ScopedPadder::count_digits(tm_time.tm_mday) +
  228|  6.89k|                                  ScopedPadder::count_digits(tm_time.tm_year + 1900);
  229|  6.89k|        ScopedPadder p(field_size, padinfo_, dest);
  230|       |
  231|  6.89k|        fmt_helper::append_string_view(days[static_cast<size_t>(tm_time.tm_wday)], dest);
  232|  6.89k|        dest.push_back(' ');
  233|  6.89k|        fmt_helper::append_string_view(months[static_cast<size_t>(tm_time.tm_mon)], dest);
  234|  6.89k|        dest.push_back(' ');
  235|  6.89k|        fmt_helper::append_int(tm_time.tm_mday, dest);
  236|  6.89k|        dest.push_back(' ');
  237|       |        // time
  238|       |
  239|  6.89k|        fmt_helper::pad2(tm_time.tm_hour, dest);
  240|  6.89k|        dest.push_back(':');
  241|  6.89k|        fmt_helper::pad2(tm_time.tm_min, dest);
  242|  6.89k|        dest.push_back(':');
  243|  6.89k|        fmt_helper::pad2(tm_time.tm_sec, dest);
  244|  6.89k|        dest.push_back(' ');
  245|  6.89k|        fmt_helper::append_int(tm_time.tm_year + 1900, dest);
  246|  6.89k|    }
_ZN6spdlog7details13scoped_padder12count_digitsIiEEjT_:
   64|  13.7k|    static unsigned int count_digits(T n) {
   65|  13.7k|        return fmt_helper::count_digits(n);
   66|  13.7k|    }
_ZN6spdlog7details11C_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  254|  3.69k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11C_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  256|  1.22k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  257|  1.22k|        const size_t field_size = 2;
  258|  1.22k|        ScopedPadder p(field_size, padinfo_, dest);
  259|  1.22k|        fmt_helper::pad2(tm_time.tm_year % 100, dest);
  260|  1.22k|    }
_ZN6spdlog7details11Y_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  287|  36.9k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11Y_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  289|  12.2k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  290|  12.2k|        const size_t field_size = 4;
  291|  12.2k|        ScopedPadder p(field_size, padinfo_, dest);
  292|  12.2k|        fmt_helper::append_int(tm_time.tm_year + 1900, dest);
  293|  12.2k|    }
_ZN6spdlog7details11D_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  268|  14.0k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11D_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  270|  4.66k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  271|  4.66k|        const size_t field_size = 8;
  272|  4.66k|        ScopedPadder p(field_size, padinfo_, dest);
  273|       |
  274|  4.66k|        fmt_helper::pad2(tm_time.tm_mon + 1, dest);
  275|  4.66k|        dest.push_back('/');
  276|  4.66k|        fmt_helper::pad2(tm_time.tm_mday, dest);
  277|  4.66k|        dest.push_back('/');
  278|  4.66k|        fmt_helper::pad2(tm_time.tm_year % 100, dest);
  279|  4.66k|    }
_ZN6spdlog7details11m_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  301|  28.7k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11m_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  303|  9.53k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  304|  9.53k|        const size_t field_size = 2;
  305|  9.53k|        ScopedPadder p(field_size, padinfo_, dest);
  306|  9.53k|        fmt_helper::pad2(tm_time.tm_mon + 1, dest);
  307|  9.53k|    }
_ZN6spdlog7details11d_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  315|  41.0k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11d_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  317|  13.6k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  318|  13.6k|        const size_t field_size = 2;
  319|  13.6k|        ScopedPadder p(field_size, padinfo_, dest);
  320|  13.6k|        fmt_helper::pad2(tm_time.tm_mday, dest);
  321|  13.6k|    }
_ZN6spdlog7details11H_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  329|  31.4k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11H_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  331|  10.4k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  332|  10.4k|        const size_t field_size = 2;
  333|  10.4k|        ScopedPadder p(field_size, padinfo_, dest);
  334|  10.4k|        fmt_helper::pad2(tm_time.tm_hour, dest);
  335|  10.4k|    }
_ZN6spdlog7details11I_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  343|   161k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11I_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  345|  49.3k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  346|  49.3k|        const size_t field_size = 2;
  347|  49.3k|        ScopedPadder p(field_size, padinfo_, dest);
  348|  49.3k|        fmt_helper::pad2(to12h(tm_time), dest);
  349|  49.3k|    }
format_fuzzer.cc:_ZN6spdlog7detailsL5to12hERK2tm:
  149|  94.4k|static int to12h(const tm &t) { return t.tm_hour % 12 == 0 ? 12 : t.tm_hour % 12; }
  ------------------
  |  Branch (149:40): [True: 0, False: 94.4k]
  ------------------
_ZN6spdlog7details11M_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  357|  27.9k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11M_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  359|  9.31k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  360|  9.31k|        const size_t field_size = 2;
  361|  9.31k|        ScopedPadder p(field_size, padinfo_, dest);
  362|  9.31k|        fmt_helper::pad2(tm_time.tm_min, dest);
  363|  9.31k|    }
_ZN6spdlog7details11S_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  371|  9.54k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11S_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  373|  3.15k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  374|  3.15k|        const size_t field_size = 2;
  375|  3.15k|        ScopedPadder p(field_size, padinfo_, dest);
  376|  3.15k|        fmt_helper::pad2(tm_time.tm_sec, dest);
  377|  3.15k|    }
_ZN6spdlog7details11e_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  385|  29.2k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11e_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  387|  9.72k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  388|  9.72k|        auto millis = fmt_helper::time_fraction<std::chrono::milliseconds>(msg.time);
  389|  9.72k|        const size_t field_size = 3;
  390|  9.72k|        ScopedPadder p(field_size, padinfo_, dest);
  391|  9.72k|        fmt_helper::pad3(static_cast<uint32_t>(millis.count()), dest);
  392|  9.72k|    }
_ZN6spdlog7details11f_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  400|  25.7k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11f_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  402|  8.47k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  403|  8.47k|        auto micros = fmt_helper::time_fraction<std::chrono::microseconds>(msg.time);
  404|       |
  405|  8.47k|        const size_t field_size = 6;
  406|  8.47k|        ScopedPadder p(field_size, padinfo_, dest);
  407|  8.47k|        fmt_helper::pad6(static_cast<size_t>(micros.count()), dest);
  408|  8.47k|    }
_ZN6spdlog7details11F_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  416|  23.4k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11F_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  418|  7.78k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  419|  7.78k|        auto ns = fmt_helper::time_fraction<std::chrono::nanoseconds>(msg.time);
  420|  7.78k|        const size_t field_size = 9;
  421|  7.78k|        ScopedPadder p(field_size, padinfo_, dest);
  422|  7.78k|        fmt_helper::pad9(static_cast<size_t>(ns.count()), dest);
  423|  7.78k|    }
_ZN6spdlog7details11E_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  431|  6.78k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11E_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  433|  2.18k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  434|  2.18k|        auto duration = msg.time.time_since_epoch();
  435|  2.18k|        auto seconds = std::chrono::duration_cast<std::chrono::seconds>(duration).count();
  436|  2.18k|        const auto field_size = ScopedPadder::count_digits(seconds);
  437|  2.18k|        ScopedPadder p(field_size, padinfo_, dest);
  438|  2.18k|        fmt_helper::append_int(seconds, dest);
  439|  2.18k|    }
_ZN6spdlog7details13scoped_padder12count_digitsIxEEjT_:
   64|  2.18k|    static unsigned int count_digits(T n) {
   65|  2.18k|        return fmt_helper::count_digits(n);
   66|  2.18k|    }
_ZN6spdlog7details11p_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  447|  17.8k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11p_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  449|  5.88k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  450|  5.88k|        const size_t field_size = 2;
  451|  5.88k|        ScopedPadder p(field_size, padinfo_, dest);
  452|  5.88k|        fmt_helper::append_string_view(ampm(tm_time), dest);
  453|  5.88k|    }
format_fuzzer.cc:_ZN6spdlog7detailsL4ampmERK2tm:
  147|  28.8k|static const char *ampm(const tm &t) { return t.tm_hour >= 12 ? "PM" : "AM"; }
  ------------------
  |  Branch (147:47): [True: 0, False: 28.8k]
  ------------------
_ZN6spdlog7details11r_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  461|  19.9k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11r_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  463|  6.63k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  464|  6.63k|        const size_t field_size = 11;
  465|  6.63k|        ScopedPadder p(field_size, padinfo_, dest);
  466|       |
  467|  6.63k|        fmt_helper::pad2(to12h(tm_time), dest);
  468|  6.63k|        dest.push_back(':');
  469|  6.63k|        fmt_helper::pad2(tm_time.tm_min, dest);
  470|  6.63k|        dest.push_back(':');
  471|  6.63k|        fmt_helper::pad2(tm_time.tm_sec, dest);
  472|  6.63k|        dest.push_back(' ');
  473|  6.63k|        fmt_helper::append_string_view(ampm(tm_time), dest);
  474|  6.63k|    }
_ZN6spdlog7details11R_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  482|  5.96k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11R_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  484|  1.83k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  485|  1.83k|        const size_t field_size = 5;
  486|  1.83k|        ScopedPadder p(field_size, padinfo_, dest);
  487|       |
  488|  1.83k|        fmt_helper::pad2(tm_time.tm_hour, dest);
  489|  1.83k|        dest.push_back(':');
  490|  1.83k|        fmt_helper::pad2(tm_time.tm_min, dest);
  491|  1.83k|    }
_ZN6spdlog7details11T_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  499|  27.4k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11T_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  501|  9.11k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  502|  9.11k|        const size_t field_size = 8;
  503|  9.11k|        ScopedPadder p(field_size, padinfo_, dest);
  504|       |
  505|  9.11k|        fmt_helper::pad2(tm_time.tm_hour, dest);
  506|  9.11k|        dest.push_back(':');
  507|  9.11k|        fmt_helper::pad2(tm_time.tm_min, dest);
  508|  9.11k|        dest.push_back(':');
  509|  9.11k|        fmt_helper::pad2(tm_time.tm_sec, dest);
  510|  9.11k|    }
_ZN6spdlog7details11z_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoENS_17pattern_time_typeE:
  519|  24.1k|        : flag_formatter(padinfo),
  520|  24.1k|          time_type_(time_type) {}
_ZN6spdlog7details11z_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  526|  7.98k|    void format(const details::log_msg &msg, const std::tm &tm_time, memory_buf_t &dest) override {
  527|  7.98k|        const size_t field_size = 6;
  528|  7.98k|        ScopedPadder p(field_size, padinfo_, dest);
  529|       |#ifdef SPDLOG_NO_TZ_OFFSET
  530|       |        (void)msg;
  531|       |        (void)tm_time;
  532|       |        const char *str = "+??:??";
  533|       |        dest.append(str, str + 6);
  534|       |#else
  535|  7.98k|        if (time_type_ == pattern_time_type::utc) {
  ------------------
  |  Branch (535:13): [True: 0, False: 7.98k]
  ------------------
  536|      0|            const char *zeroes = "+00:00";
  537|      0|            dest.append(zeroes, zeroes + 6);
  538|      0|            return;
  539|      0|        }
  540|  7.98k|        auto total_minutes = get_cached_offset(msg, tm_time);
  541|  7.98k|        bool is_negative = total_minutes < 0;
  542|  7.98k|        if (is_negative) {
  ------------------
  |  Branch (542:13): [True: 0, False: 7.98k]
  ------------------
  543|      0|            total_minutes = -total_minutes;
  544|      0|            dest.push_back('-');
  545|  7.98k|        } else {
  546|  7.98k|            dest.push_back('+');
  547|  7.98k|        }
  548|       |
  549|  7.98k|        fmt_helper::pad2(total_minutes / 60, dest);  // hours
  550|  7.98k|        dest.push_back(':');
  551|  7.98k|        fmt_helper::pad2(total_minutes % 60, dest);  // minutes
  552|  7.98k|#endif  // SPDLOG_NO_TZ_OFFSET
  553|  7.98k|    }
_ZN6spdlog7details11z_formatterINS0_13scoped_padderEE17get_cached_offsetERKNS0_7log_msgERK2tm:
  560|  7.98k|    int get_cached_offset(const log_msg &msg, const std::tm &tm_time) {
  561|       |        // refresh every 10 seconds
  562|  7.98k|        if (msg.time - last_update_ >= std::chrono::seconds(10)) {
  ------------------
  |  Branch (562:13): [True: 7.98k, False: 0]
  ------------------
  563|  7.98k|            offset_minutes_ = os::utc_minutes_offset(tm_time);
  564|  7.98k|            last_update_ = msg.time;
  565|  7.98k|        }
  566|  7.98k|        return offset_minutes_;
  567|  7.98k|    }
_ZN6spdlog7details13pid_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  589|  2.80k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details13pid_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  591|    895|    void format(const details::log_msg &, const std::tm &, memory_buf_t &dest) override {
  592|    895|        const auto pid = static_cast<uint32_t>(details::os::pid());
  593|    895|        auto field_size = ScopedPadder::count_digits(pid);
  594|    895|        ScopedPadder p(field_size, padinfo_, dest);
  595|    895|        fmt_helper::append_int(pid, dest);
  596|    895|    }
_ZN6spdlog7details13scoped_padder12count_digitsIjEEjT_:
   64|    895|    static unsigned int count_digits(T n) {
   65|    895|        return fmt_helper::count_digits(n);
   66|    895|    }
_ZN6spdlog7details21color_start_formatterC2ENS0_12padding_infoE:
  642|  31.9k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details21color_start_formatter6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENS9_6detail9allocatorIcEEEE:
  644|  10.6k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  645|  10.6k|        msg.color_range_start = dest.size();
  646|  10.6k|    }
_ZN6spdlog7details20color_stop_formatterC2ENS0_12padding_infoE:
  652|  36.5k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details20color_stop_formatter6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENS9_6detail9allocatorIcEEEE:
  654|  12.1k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  655|  12.1k|        msg.color_range_end = dest.size();
  656|  12.1k|    }
_ZN6spdlog7details25source_location_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  664|  13.2k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details25source_location_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  666|  4.37k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  667|  4.37k|        if (msg.source.empty()) {
  ------------------
  |  Branch (667:13): [True: 4.37k, False: 0]
  ------------------
  668|  4.37k|            ScopedPadder p(0, padinfo_, dest);
  669|  4.37k|            return;
  670|  4.37k|        }
  671|       |
  672|      0|        size_t text_size;
  673|      0|        if (padinfo_.enabled()) {
  ------------------
  |  Branch (673:13): [True: 0, False: 0]
  ------------------
  674|       |            // calc text size for padding based on "filename:line"
  675|      0|            text_size = std::char_traits<char>::length(msg.source.filename) +
  676|      0|                        ScopedPadder::count_digits(msg.source.line) + 1;
  677|      0|        } else {
  678|      0|            text_size = 0;
  679|      0|        }
  680|       |
  681|      0|        ScopedPadder p(text_size, padinfo_, dest);
  682|      0|        fmt_helper::append_string_view(msg.source.filename, dest);
  683|      0|        dest.push_back(':');
  684|      0|        fmt_helper::append_int(msg.source.line, dest);
  685|      0|    }
_ZN6spdlog7details24short_filename_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  711|  4.03k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details24short_filename_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  736|  1.33k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  737|  1.33k|        if (msg.source.empty()) {
  ------------------
  |  Branch (737:13): [True: 1.33k, False: 0]
  ------------------
  738|  1.33k|            ScopedPadder p(0, padinfo_, dest);
  739|  1.33k|            return;
  740|  1.33k|        }
  741|      0|        auto filename = basename(msg.source.filename);
  742|      0|        size_t text_size = padinfo_.enabled() ? std::char_traits<char>::length(filename) : 0;
  ------------------
  |  Branch (742:28): [True: 0, False: 0]
  ------------------
  743|      0|        ScopedPadder p(text_size, padinfo_, dest);
  744|      0|        fmt_helper::append_string_view(filename, dest);
  745|      0|    }
_ZN6spdlog7details25source_filename_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  693|  33.8k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details25source_filename_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  695|  11.2k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  696|  11.2k|        if (msg.source.empty()) {
  ------------------
  |  Branch (696:13): [True: 11.2k, False: 0]
  ------------------
  697|  11.2k|            ScopedPadder p(0, padinfo_, dest);
  698|  11.2k|            return;
  699|  11.2k|        }
  700|      0|        size_t text_size =
  701|      0|            padinfo_.enabled() ? std::char_traits<char>::length(msg.source.filename) : 0;
  ------------------
  |  Branch (701:13): [True: 0, False: 0]
  ------------------
  702|      0|        ScopedPadder p(text_size, padinfo_, dest);
  703|      0|        fmt_helper::append_string_view(msg.source.filename, dest);
  704|      0|    }
_ZN6spdlog7details24source_linenum_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  752|  14.6k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details24source_linenum_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  754|  4.87k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  755|  4.87k|        if (msg.source.empty()) {
  ------------------
  |  Branch (755:13): [True: 4.87k, False: 0]
  ------------------
  756|  4.87k|            ScopedPadder p(0, padinfo_, dest);
  757|  4.87k|            return;
  758|  4.87k|        }
  759|       |
  760|      0|        auto field_size = ScopedPadder::count_digits(msg.source.line);
  761|      0|        ScopedPadder p(field_size, padinfo_, dest);
  762|      0|        fmt_helper::append_int(msg.source.line, dest);
  763|      0|    }
_ZN6spdlog7details25source_funcname_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  771|  4.44k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details25source_funcname_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  773|  1.43k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  774|  1.43k|        if (msg.source.empty()) {
  ------------------
  |  Branch (774:13): [True: 1.43k, False: 0]
  ------------------
  775|  1.43k|            ScopedPadder p(0, padinfo_, dest);
  776|  1.43k|            return;
  777|  1.43k|        }
  778|      0|        size_t text_size =
  779|      0|            padinfo_.enabled() ? std::char_traits<char>::length(msg.source.funcname) : 0;
  ------------------
  |  Branch (779:13): [True: 0, False: 0]
  ------------------
  780|      0|        ScopedPadder p(text_size, padinfo_, dest);
  781|      0|        fmt_helper::append_string_view(msg.source.funcname, dest);
  782|      0|    }
_ZN6spdlog7details12ch_formatterC2Ec:
  614|   600k|        : ch_(ch) {}
_ZN6spdlog7details12ch_formatter6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENS9_6detail9allocatorIcEEEE:
  616|   199k|    void format(const details::log_msg &, const std::tm &, memory_buf_t &dest) override {
  617|   199k|        dest.push_back(ch_);
  618|   199k|    }
_ZN6spdlog7details17elapsed_formatterINS0_13scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1000000000EEEEEEC2ENS0_12padding_infoE:
  792|  29.6k|        : flag_formatter(padinfo),
  793|  29.6k|          last_message_time_(log_clock::now()) {}
_ZN6spdlog7details17elapsed_formatterINS0_13scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1000000000EEEEEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSH_6detail9allocatorIcEEEE:
  795|  9.83k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  796|  9.83k|        auto delta = (std::max)(msg.time - last_message_time_, log_clock::duration::zero());
  797|  9.83k|        auto delta_units = std::chrono::duration_cast<DurationUnits>(delta);
  798|  9.83k|        last_message_time_ = msg.time;
  799|  9.83k|        auto delta_count = static_cast<size_t>(delta_units.count());
  800|  9.83k|        auto n_digits = static_cast<size_t>(ScopedPadder::count_digits(delta_count));
  801|  9.83k|        ScopedPadder p(n_digits, padinfo_, dest);
  802|  9.83k|        fmt_helper::append_int(delta_count, dest);
  803|  9.83k|    }
_ZN6spdlog7details17elapsed_formatterINS0_13scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1000000EEEEEEC2ENS0_12padding_infoE:
  792|   684k|        : flag_formatter(padinfo),
  793|   684k|          last_message_time_(log_clock::now()) {}
_ZN6spdlog7details17elapsed_formatterINS0_13scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1000000EEEEEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSH_6detail9allocatorIcEEEE:
  795|   227k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  796|   227k|        auto delta = (std::max)(msg.time - last_message_time_, log_clock::duration::zero());
  797|   227k|        auto delta_units = std::chrono::duration_cast<DurationUnits>(delta);
  798|   227k|        last_message_time_ = msg.time;
  799|   227k|        auto delta_count = static_cast<size_t>(delta_units.count());
  800|   227k|        auto n_digits = static_cast<size_t>(ScopedPadder::count_digits(delta_count));
  801|   227k|        ScopedPadder p(n_digits, padinfo_, dest);
  802|   227k|        fmt_helper::append_int(delta_count, dest);
  803|   227k|    }
_ZN6spdlog7details17elapsed_formatterINS0_13scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1000EEEEEEC2ENS0_12padding_infoE:
  792|  5.13k|        : flag_formatter(padinfo),
  793|  5.13k|          last_message_time_(log_clock::now()) {}
_ZN6spdlog7details17elapsed_formatterINS0_13scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1000EEEEEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSH_6detail9allocatorIcEEEE:
  795|  1.53k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  796|  1.53k|        auto delta = (std::max)(msg.time - last_message_time_, log_clock::duration::zero());
  797|  1.53k|        auto delta_units = std::chrono::duration_cast<DurationUnits>(delta);
  798|  1.53k|        last_message_time_ = msg.time;
  799|  1.53k|        auto delta_count = static_cast<size_t>(delta_units.count());
  800|  1.53k|        auto n_digits = static_cast<size_t>(ScopedPadder::count_digits(delta_count));
  801|  1.53k|        ScopedPadder p(n_digits, padinfo_, dest);
  802|  1.53k|        fmt_helper::append_int(delta_count, dest);
  803|  1.53k|    }
_ZN6spdlog7details17elapsed_formatterINS0_13scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1EEEEEEC2ENS0_12padding_infoE:
  792|  48.4k|        : flag_formatter(padinfo),
  793|  48.4k|          last_message_time_(log_clock::now()) {}
_ZN6spdlog7details17elapsed_formatterINS0_13scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1EEEEEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSH_6detail9allocatorIcEEEE:
  795|  16.1k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  796|  16.1k|        auto delta = (std::max)(msg.time - last_message_time_, log_clock::duration::zero());
  797|  16.1k|        auto delta_units = std::chrono::duration_cast<DurationUnits>(delta);
  798|  16.1k|        last_message_time_ = msg.time;
  799|  16.1k|        auto delta_count = static_cast<size_t>(delta_units.count());
  800|  16.1k|        auto n_digits = static_cast<size_t>(ScopedPadder::count_digits(delta_count));
  801|  16.1k|        ScopedPadder p(n_digits, padinfo_, dest);
  802|  16.1k|        fmt_helper::append_int(delta_count, dest);
  803|  16.1k|    }
_ZN6spdlog7details13mdc_formatterINS0_13scoped_padderEEC2ENS0_12padding_infoE:
  816|  2.35k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details13mdc_formatterINS0_13scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  818|    781|    void format(const details::log_msg &, const std::tm &, memory_buf_t &dest) override {
  819|    781|        const auto &mdc_map = mdc::get_context();
  820|    781|        if (mdc_map.empty()) {
  ------------------
  |  Branch (820:13): [True: 781, False: 0]
  ------------------
  821|    781|            ScopedPadder p(0, padinfo_, dest);
  822|    781|            return;
  823|    781|        } else {
  824|      0|            format_mdc(mdc_map, dest);
  825|      0|        }
  826|    781|    }
_ZN6spdlog17pattern_formatter12handle_flag_INS_7details18null_scoped_padderEEEvcNS2_12padding_infoE:
 1025|  3.52M|SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_info padding) {
 1026|       |    // process custom flags
 1027|  3.52M|    auto it = custom_handlers_.find(flag);
 1028|  3.52M|    if (it != custom_handlers_.end()) {
  ------------------
  |  Branch (1028:9): [True: 27.2k, False: 3.50M]
  ------------------
 1029|  27.2k|        auto custom_handler = it->second->clone();
 1030|  27.2k|        custom_handler->set_padding_info(padding);
 1031|  27.2k|        formatters_.push_back(std::move(custom_handler));
 1032|  27.2k|        return;
 1033|  27.2k|    }
 1034|       |
 1035|       |    // process built-in flags
 1036|  3.50M|    switch (flag) {
 1037|   410k|        case ('+'):  // default formatter
  ------------------
  |  Branch (1037:9): [True: 410k, False: 3.09M]
  ------------------
 1038|   410k|            formatters_.push_back(details::make_unique<details::full_formatter>(padding));
 1039|   410k|            need_localtime_ = true;
 1040|   410k|            break;
 1041|       |
 1042|  9.08k|        case 'n':  // logger name
  ------------------
  |  Branch (1042:9): [True: 9.08k, False: 3.49M]
  ------------------
 1043|  9.08k|            formatters_.push_back(details::make_unique<details::name_formatter<Padder>>(padding));
 1044|  9.08k|            break;
 1045|       |
 1046|   100k|        case 'l':  // level
  ------------------
  |  Branch (1046:9): [True: 100k, False: 3.40M]
  ------------------
 1047|   100k|            formatters_.push_back(details::make_unique<details::level_formatter<Padder>>(padding));
 1048|   100k|            break;
 1049|       |
 1050|  68.2k|        case 'L':  // short level
  ------------------
  |  Branch (1050:9): [True: 68.2k, False: 3.43M]
  ------------------
 1051|  68.2k|            formatters_.push_back(
 1052|  68.2k|                details::make_unique<details::short_level_formatter<Padder>>(padding));
 1053|  68.2k|            break;
 1054|       |
 1055|  30.9k|        case ('t'):  // thread id
  ------------------
  |  Branch (1055:9): [True: 30.9k, False: 3.47M]
  ------------------
 1056|  30.9k|            formatters_.push_back(details::make_unique<details::t_formatter<Padder>>(padding));
 1057|  30.9k|            break;
 1058|       |
 1059|  21.7k|        case ('v'):  // the message text
  ------------------
  |  Branch (1059:9): [True: 21.7k, False: 3.48M]
  ------------------
 1060|  21.7k|            formatters_.push_back(details::make_unique<details::v_formatter<Padder>>(padding));
 1061|  21.7k|            break;
 1062|       |
 1063|   204k|        case ('a'):  // weekday
  ------------------
  |  Branch (1063:9): [True: 204k, False: 3.29M]
  ------------------
 1064|   204k|            formatters_.push_back(details::make_unique<details::a_formatter<Padder>>(padding));
 1065|   204k|            need_localtime_ = true;
 1066|   204k|            break;
 1067|       |
 1068|  40.0k|        case ('A'):  // short weekday
  ------------------
  |  Branch (1068:9): [True: 40.0k, False: 3.46M]
  ------------------
 1069|  40.0k|            formatters_.push_back(details::make_unique<details::A_formatter<Padder>>(padding));
 1070|  40.0k|            need_localtime_ = true;
 1071|  40.0k|            break;
 1072|       |
 1073|   201k|        case ('b'):
  ------------------
  |  Branch (1073:9): [True: 201k, False: 3.30M]
  ------------------
 1074|   332k|        case ('h'):  // month
  ------------------
  |  Branch (1074:9): [True: 131k, False: 3.37M]
  ------------------
 1075|   332k|            formatters_.push_back(details::make_unique<details::b_formatter<Padder>>(padding));
 1076|   332k|            need_localtime_ = true;
 1077|   332k|            break;
 1078|       |
 1079|  69.8k|        case ('B'):  // short month
  ------------------
  |  Branch (1079:9): [True: 69.8k, False: 3.43M]
  ------------------
 1080|  69.8k|            formatters_.push_back(details::make_unique<details::B_formatter<Padder>>(padding));
 1081|  69.8k|            need_localtime_ = true;
 1082|  69.8k|            break;
 1083|       |
 1084|  44.8k|        case ('c'):  // datetime
  ------------------
  |  Branch (1084:9): [True: 44.8k, False: 3.45M]
  ------------------
 1085|  44.8k|            formatters_.push_back(details::make_unique<details::c_formatter<Padder>>(padding));
 1086|  44.8k|            need_localtime_ = true;
 1087|  44.8k|            break;
 1088|       |
 1089|  27.3k|        case ('C'):  // year 2 digits
  ------------------
  |  Branch (1089:9): [True: 27.3k, False: 3.47M]
  ------------------
 1090|  27.3k|            formatters_.push_back(details::make_unique<details::C_formatter<Padder>>(padding));
 1091|  27.3k|            need_localtime_ = true;
 1092|  27.3k|            break;
 1093|       |
 1094|  7.51k|        case ('Y'):  // year 4 digits
  ------------------
  |  Branch (1094:9): [True: 7.51k, False: 3.49M]
  ------------------
 1095|  7.51k|            formatters_.push_back(details::make_unique<details::Y_formatter<Padder>>(padding));
 1096|  7.51k|            need_localtime_ = true;
 1097|  7.51k|            break;
 1098|       |
 1099|  5.86k|        case ('D'):
  ------------------
  |  Branch (1099:9): [True: 5.86k, False: 3.49M]
  ------------------
 1100|  45.1k|        case ('x'):  // datetime MM/DD/YY
  ------------------
  |  Branch (1100:9): [True: 39.3k, False: 3.46M]
  ------------------
 1101|  45.1k|            formatters_.push_back(details::make_unique<details::D_formatter<Padder>>(padding));
 1102|  45.1k|            need_localtime_ = true;
 1103|  45.1k|            break;
 1104|       |
 1105|  35.8k|        case ('m'):  // month 1-12
  ------------------
  |  Branch (1105:9): [True: 35.8k, False: 3.46M]
  ------------------
 1106|  35.8k|            formatters_.push_back(details::make_unique<details::m_formatter<Padder>>(padding));
 1107|  35.8k|            need_localtime_ = true;
 1108|  35.8k|            break;
 1109|       |
 1110|  29.6k|        case ('d'):  // day of month 1-31
  ------------------
  |  Branch (1110:9): [True: 29.6k, False: 3.47M]
  ------------------
 1111|  29.6k|            formatters_.push_back(details::make_unique<details::d_formatter<Padder>>(padding));
 1112|  29.6k|            need_localtime_ = true;
 1113|  29.6k|            break;
 1114|       |
 1115|  61.8k|        case ('H'):  // hours 24
  ------------------
  |  Branch (1115:9): [True: 61.8k, False: 3.44M]
  ------------------
 1116|  61.8k|            formatters_.push_back(details::make_unique<details::H_formatter<Padder>>(padding));
 1117|  61.8k|            need_localtime_ = true;
 1118|  61.8k|            break;
 1119|       |
 1120|  79.9k|        case ('I'):  // hours 12
  ------------------
  |  Branch (1120:9): [True: 79.9k, False: 3.42M]
  ------------------
 1121|  79.9k|            formatters_.push_back(details::make_unique<details::I_formatter<Padder>>(padding));
 1122|  79.9k|            need_localtime_ = true;
 1123|  79.9k|            break;
 1124|       |
 1125|  46.4k|        case ('M'):  // minutes
  ------------------
  |  Branch (1125:9): [True: 46.4k, False: 3.45M]
  ------------------
 1126|  46.4k|            formatters_.push_back(details::make_unique<details::M_formatter<Padder>>(padding));
 1127|  46.4k|            need_localtime_ = true;
 1128|  46.4k|            break;
 1129|       |
 1130|  45.9k|        case ('S'):  // seconds
  ------------------
  |  Branch (1130:9): [True: 45.9k, False: 3.45M]
  ------------------
 1131|  45.9k|            formatters_.push_back(details::make_unique<details::S_formatter<Padder>>(padding));
 1132|  45.9k|            need_localtime_ = true;
 1133|  45.9k|            break;
 1134|       |
 1135|  34.3k|        case ('e'):  // milliseconds
  ------------------
  |  Branch (1135:9): [True: 34.3k, False: 3.46M]
  ------------------
 1136|  34.3k|            formatters_.push_back(details::make_unique<details::e_formatter<Padder>>(padding));
 1137|  34.3k|            break;
 1138|       |
 1139|  31.2k|        case ('f'):  // microseconds
  ------------------
  |  Branch (1139:9): [True: 31.2k, False: 3.47M]
  ------------------
 1140|  31.2k|            formatters_.push_back(details::make_unique<details::f_formatter<Padder>>(padding));
 1141|  31.2k|            break;
 1142|       |
 1143|  14.4k|        case ('F'):  // nanoseconds
  ------------------
  |  Branch (1143:9): [True: 14.4k, False: 3.48M]
  ------------------
 1144|  14.4k|            formatters_.push_back(details::make_unique<details::F_formatter<Padder>>(padding));
 1145|  14.4k|            break;
 1146|       |
 1147|  50.4k|        case ('E'):  // seconds since epoch
  ------------------
  |  Branch (1147:9): [True: 50.4k, False: 3.45M]
  ------------------
 1148|  50.4k|            formatters_.push_back(details::make_unique<details::E_formatter<Padder>>(padding));
 1149|  50.4k|            break;
 1150|       |
 1151|  13.5k|        case ('p'):  // am/pm
  ------------------
  |  Branch (1151:9): [True: 13.5k, False: 3.48M]
  ------------------
 1152|  13.5k|            formatters_.push_back(details::make_unique<details::p_formatter<Padder>>(padding));
 1153|  13.5k|            need_localtime_ = true;
 1154|  13.5k|            break;
 1155|       |
 1156|  36.3k|        case ('r'):  // 12 hour clock 02:55:02 pm
  ------------------
  |  Branch (1156:9): [True: 36.3k, False: 3.46M]
  ------------------
 1157|  36.3k|            formatters_.push_back(details::make_unique<details::r_formatter<Padder>>(padding));
 1158|  36.3k|            need_localtime_ = true;
 1159|  36.3k|            break;
 1160|       |
 1161|   116k|        case ('R'):  // 24-hour HH:MM time
  ------------------
  |  Branch (1161:9): [True: 116k, False: 3.38M]
  ------------------
 1162|   116k|            formatters_.push_back(details::make_unique<details::R_formatter<Padder>>(padding));
 1163|   116k|            need_localtime_ = true;
 1164|   116k|            break;
 1165|       |
 1166|  44.4k|        case ('T'):
  ------------------
  |  Branch (1166:9): [True: 44.4k, False: 3.45M]
  ------------------
 1167|  59.1k|        case ('X'):  // ISO 8601 time format (HH:MM:SS)
  ------------------
  |  Branch (1167:9): [True: 14.7k, False: 3.48M]
  ------------------
 1168|  59.1k|            formatters_.push_back(details::make_unique<details::T_formatter<Padder>>(padding));
 1169|  59.1k|            need_localtime_ = true;
 1170|  59.1k|            break;
 1171|  57.2k|        case ('z'):  // timezone
  ------------------
  |  Branch (1171:9): [True: 57.2k, False: 3.44M]
  ------------------
 1172|  57.2k|            formatters_.push_back(
 1173|  57.2k|                details::make_unique<details::z_formatter<Padder>>(padding, pattern_time_type_));
 1174|  57.2k|            need_localtime_ = true;
 1175|  57.2k|            break;
 1176|  85.1k|        case ('P'):  // pid
  ------------------
  |  Branch (1176:9): [True: 85.1k, False: 3.41M]
  ------------------
 1177|  85.1k|            formatters_.push_back(details::make_unique<details::pid_formatter<Padder>>(padding));
 1178|  85.1k|            break;
 1179|       |
 1180|  12.6k|        case ('^'):  // color range start
  ------------------
  |  Branch (1180:9): [True: 12.6k, False: 3.48M]
  ------------------
 1181|  12.6k|            formatters_.push_back(details::make_unique<details::color_start_formatter>(padding));
 1182|  12.6k|            break;
 1183|       |
 1184|  12.4k|        case ('$'):  // color range end
  ------------------
  |  Branch (1184:9): [True: 12.4k, False: 3.48M]
  ------------------
 1185|  12.4k|            formatters_.push_back(details::make_unique<details::color_stop_formatter>(padding));
 1186|  12.4k|            break;
 1187|       |
 1188|  5.12k|        case ('@'):  // source location (filename:filenumber)
  ------------------
  |  Branch (1188:9): [True: 5.12k, False: 3.49M]
  ------------------
 1189|  5.12k|            formatters_.push_back(
 1190|  5.12k|                details::make_unique<details::source_location_formatter<Padder>>(padding));
 1191|  5.12k|            break;
 1192|       |
 1193|  4.37k|        case ('s'):  // short source filename - without directory name
  ------------------
  |  Branch (1193:9): [True: 4.37k, False: 3.49M]
  ------------------
 1194|  4.37k|            formatters_.push_back(
 1195|  4.37k|                details::make_unique<details::short_filename_formatter<Padder>>(padding));
 1196|  4.37k|            break;
 1197|       |
 1198|  6.07k|        case ('g'):  // full source filename
  ------------------
  |  Branch (1198:9): [True: 6.07k, False: 3.49M]
  ------------------
 1199|  6.07k|            formatters_.push_back(
 1200|  6.07k|                details::make_unique<details::source_filename_formatter<Padder>>(padding));
 1201|  6.07k|            break;
 1202|       |
 1203|  9.90k|        case ('#'):  // source line number
  ------------------
  |  Branch (1203:9): [True: 9.90k, False: 3.49M]
  ------------------
 1204|  9.90k|            formatters_.push_back(
 1205|  9.90k|                details::make_unique<details::source_linenum_formatter<Padder>>(padding));
 1206|  9.90k|            break;
 1207|       |
 1208|  8.59k|        case ('!'):  // source funcname
  ------------------
  |  Branch (1208:9): [True: 8.59k, False: 3.49M]
  ------------------
 1209|  8.59k|            formatters_.push_back(
 1210|  8.59k|                details::make_unique<details::source_funcname_formatter<Padder>>(padding));
 1211|  8.59k|            break;
 1212|       |
 1213|   577k|        case ('%'):  // % char
  ------------------
  |  Branch (1213:9): [True: 577k, False: 2.92M]
  ------------------
 1214|   577k|            formatters_.push_back(details::make_unique<details::ch_formatter>('%'));
 1215|   577k|            break;
 1216|       |
 1217|  30.7k|        case ('u'):  // elapsed time since last log message in nanos
  ------------------
  |  Branch (1217:9): [True: 30.7k, False: 3.47M]
  ------------------
 1218|  30.7k|            formatters_.push_back(
 1219|  30.7k|                details::make_unique<details::elapsed_formatter<Padder, std::chrono::nanoseconds>>(
 1220|  30.7k|                    padding));
 1221|  30.7k|            break;
 1222|       |
 1223|  59.8k|        case ('i'):  // elapsed time since last log message in micros
  ------------------
  |  Branch (1223:9): [True: 59.8k, False: 3.44M]
  ------------------
 1224|  59.8k|            formatters_.push_back(
 1225|  59.8k|                details::make_unique<details::elapsed_formatter<Padder, std::chrono::microseconds>>(
 1226|  59.8k|                    padding));
 1227|  59.8k|            break;
 1228|       |
 1229|  4.64k|        case ('o'):  // elapsed time since last log message in millis
  ------------------
  |  Branch (1229:9): [True: 4.64k, False: 3.49M]
  ------------------
 1230|  4.64k|            formatters_.push_back(
 1231|  4.64k|                details::make_unique<details::elapsed_formatter<Padder, std::chrono::milliseconds>>(
 1232|  4.64k|                    padding));
 1233|  4.64k|            break;
 1234|       |
 1235|   214k|        case ('O'):  // elapsed time since last log message in seconds
  ------------------
  |  Branch (1235:9): [True: 214k, False: 3.28M]
  ------------------
 1236|   214k|            formatters_.push_back(
 1237|   214k|                details::make_unique<details::elapsed_formatter<Padder, std::chrono::seconds>>(
 1238|   214k|                    padding));
 1239|   214k|            break;
 1240|       |
 1241|      0|#ifndef SPDLOG_NO_TLS  // mdc formatter requires TLS support
 1242|  5.15k|        case ('&'):
  ------------------
  |  Branch (1242:9): [True: 5.15k, False: 3.49M]
  ------------------
 1243|  5.15k|            formatters_.push_back(details::make_unique<details::mdc_formatter<Padder>>(padding));
 1244|  5.15k|            break;
 1245|      0|#endif
 1246|       |
 1247|   338k|        default:  // Unknown flag appears as is
  ------------------
  |  Branch (1247:9): [True: 338k, False: 3.16M]
  ------------------
 1248|   338k|            auto unknown_flag = details::make_unique<details::aggregate_formatter>();
 1249|       |
 1250|   338k|            if (!padding.truncate_) {
  ------------------
  |  Branch (1250:17): [True: 338k, False: 0]
  ------------------
 1251|   338k|                unknown_flag->add_ch('%');
 1252|   338k|                unknown_flag->add_ch(flag);
 1253|   338k|                formatters_.push_back((std::move(unknown_flag)));
 1254|   338k|            }
 1255|       |            // fix issue #1617 (prev char was '!' and should have been treated as funcname flag
 1256|       |            // instead of truncating flag) spdlog::set_pattern("[%10!] %v") => "[      main] some
 1257|       |            // message" spdlog::set_pattern("[%3!!] %v") => "[mai] some message"
 1258|      0|            else {
 1259|      0|                padding.truncate_ = false;
 1260|      0|                formatters_.push_back(
 1261|      0|                    details::make_unique<details::source_funcname_formatter<Padder>>(padding));
 1262|      0|                unknown_flag->add_ch(flag);
 1263|      0|                formatters_.push_back((std::move(unknown_flag)));
 1264|      0|            }
 1265|       |
 1266|   338k|            break;
 1267|  3.50M|    }
 1268|  3.50M|}
_ZN6spdlog7details14name_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  107|  9.08k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details14name_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  109|  3.01k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  110|  3.01k|        ScopedPadder p(msg.logger_name.size(), padinfo_, dest);
  111|  3.01k|        fmt_helper::append_string_view(msg.logger_name, dest);
  112|  3.01k|    }
_ZN6spdlog7details15level_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  120|   100k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details15level_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  122|  33.4k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  123|  33.4k|        const string_view_t &level_name = level::to_string_view(msg.level);
  124|  33.4k|        ScopedPadder p(level_name.size(), padinfo_, dest);
  125|  33.4k|        fmt_helper::append_string_view(level_name, dest);
  126|  33.4k|    }
_ZN6spdlog7details21short_level_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  134|  68.2k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details21short_level_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  136|  22.6k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  137|  22.6k|        string_view_t level_name{level::to_short_c_str(msg.level)};
  138|  22.6k|        ScopedPadder p(level_name.size(), padinfo_, dest);
  139|  22.6k|        fmt_helper::append_string_view(level_name, dest);
  140|  22.6k|    }
_ZN6spdlog7details11t_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  575|  30.9k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11t_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  577|  10.2k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  578|  10.2k|        const auto field_size = ScopedPadder::count_digits(msg.thread_id);
  579|  10.2k|        ScopedPadder p(field_size, padinfo_, dest);
  580|  10.2k|        fmt_helper::append_int(msg.thread_id, dest);
  581|  10.2k|    }
_ZN6spdlog7details18null_scoped_padder12count_digitsImEEjT_:
   98|   113k|    static unsigned int count_digits(T /* number */) {
   99|   113k|        return 0;
  100|   113k|    }
_ZN6spdlog7details11v_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  603|  21.7k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11v_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  605|  7.20k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  606|  7.20k|        ScopedPadder p(msg.payload.size(), padinfo_, dest);
  607|  7.20k|        fmt_helper::append_string_view(msg.payload, dest);
  608|  7.20k|    }
_ZN6spdlog7details11a_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  158|   204k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11a_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  160|  68.1k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  161|  68.1k|        string_view_t field_value{days[static_cast<size_t>(tm_time.tm_wday)]};
  162|  68.1k|        ScopedPadder p(field_value.size(), padinfo_, dest);
  163|  68.1k|        fmt_helper::append_string_view(field_value, dest);
  164|  68.1k|    }
_ZN6spdlog7details11A_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  175|  40.0k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11A_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  177|  13.1k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  178|  13.1k|        string_view_t field_value{full_days[static_cast<size_t>(tm_time.tm_wday)]};
  179|  13.1k|        ScopedPadder p(field_value.size(), padinfo_, dest);
  180|  13.1k|        fmt_helper::append_string_view(field_value, dest);
  181|  13.1k|    }
_ZN6spdlog7details11b_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  192|   332k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11b_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  194|   110k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  195|   110k|        string_view_t field_value{months[static_cast<size_t>(tm_time.tm_mon)]};
  196|   110k|        ScopedPadder p(field_value.size(), padinfo_, dest);
  197|   110k|        fmt_helper::append_string_view(field_value, dest);
  198|   110k|    }
_ZN6spdlog7details11B_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  210|  69.8k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11B_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  212|  23.2k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  213|  23.2k|        string_view_t field_value{full_months[static_cast<size_t>(tm_time.tm_mon)]};
  214|  23.2k|        ScopedPadder p(field_value.size(), padinfo_, dest);
  215|  23.2k|        fmt_helper::append_string_view(field_value, dest);
  216|  23.2k|    }
_ZN6spdlog7details11c_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  224|  44.8k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11c_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  226|  14.3k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  227|  14.3k|        const size_t field_size = 18 + ScopedPadder::count_digits(tm_time.tm_mday) +
  228|  14.3k|                                  ScopedPadder::count_digits(tm_time.tm_year + 1900);
  229|  14.3k|        ScopedPadder p(field_size, padinfo_, dest);
  230|       |
  231|  14.3k|        fmt_helper::append_string_view(days[static_cast<size_t>(tm_time.tm_wday)], dest);
  232|  14.3k|        dest.push_back(' ');
  233|  14.3k|        fmt_helper::append_string_view(months[static_cast<size_t>(tm_time.tm_mon)], dest);
  234|  14.3k|        dest.push_back(' ');
  235|  14.3k|        fmt_helper::append_int(tm_time.tm_mday, dest);
  236|  14.3k|        dest.push_back(' ');
  237|       |        // time
  238|       |
  239|  14.3k|        fmt_helper::pad2(tm_time.tm_hour, dest);
  240|  14.3k|        dest.push_back(':');
  241|  14.3k|        fmt_helper::pad2(tm_time.tm_min, dest);
  242|  14.3k|        dest.push_back(':');
  243|  14.3k|        fmt_helper::pad2(tm_time.tm_sec, dest);
  244|  14.3k|        dest.push_back(' ');
  245|  14.3k|        fmt_helper::append_int(tm_time.tm_year + 1900, dest);
  246|  14.3k|    }
_ZN6spdlog7details18null_scoped_padder12count_digitsIiEEjT_:
   98|  28.7k|    static unsigned int count_digits(T /* number */) {
   99|  28.7k|        return 0;
  100|  28.7k|    }
_ZN6spdlog7details11C_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  254|  27.3k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11C_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  256|  9.09k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  257|  9.09k|        const size_t field_size = 2;
  258|  9.09k|        ScopedPadder p(field_size, padinfo_, dest);
  259|  9.09k|        fmt_helper::pad2(tm_time.tm_year % 100, dest);
  260|  9.09k|    }
_ZN6spdlog7details11Y_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  287|  7.51k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11Y_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  289|  2.44k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  290|  2.44k|        const size_t field_size = 4;
  291|  2.44k|        ScopedPadder p(field_size, padinfo_, dest);
  292|  2.44k|        fmt_helper::append_int(tm_time.tm_year + 1900, dest);
  293|  2.44k|    }
_ZN6spdlog7details11D_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  268|  45.1k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11D_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  270|  14.9k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  271|  14.9k|        const size_t field_size = 8;
  272|  14.9k|        ScopedPadder p(field_size, padinfo_, dest);
  273|       |
  274|  14.9k|        fmt_helper::pad2(tm_time.tm_mon + 1, dest);
  275|  14.9k|        dest.push_back('/');
  276|  14.9k|        fmt_helper::pad2(tm_time.tm_mday, dest);
  277|  14.9k|        dest.push_back('/');
  278|  14.9k|        fmt_helper::pad2(tm_time.tm_year % 100, dest);
  279|  14.9k|    }
_ZN6spdlog7details11m_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  301|  35.8k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11m_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  303|  11.8k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  304|  11.8k|        const size_t field_size = 2;
  305|  11.8k|        ScopedPadder p(field_size, padinfo_, dest);
  306|  11.8k|        fmt_helper::pad2(tm_time.tm_mon + 1, dest);
  307|  11.8k|    }
_ZN6spdlog7details11d_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  315|  29.6k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11d_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  317|  9.75k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  318|  9.75k|        const size_t field_size = 2;
  319|  9.75k|        ScopedPadder p(field_size, padinfo_, dest);
  320|  9.75k|        fmt_helper::pad2(tm_time.tm_mday, dest);
  321|  9.75k|    }
_ZN6spdlog7details11H_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  329|  61.8k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11H_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  331|  17.8k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  332|  17.8k|        const size_t field_size = 2;
  333|  17.8k|        ScopedPadder p(field_size, padinfo_, dest);
  334|  17.8k|        fmt_helper::pad2(tm_time.tm_hour, dest);
  335|  17.8k|    }
_ZN6spdlog7details11I_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  343|  79.9k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11I_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  345|  26.6k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  346|  26.6k|        const size_t field_size = 2;
  347|  26.6k|        ScopedPadder p(field_size, padinfo_, dest);
  348|  26.6k|        fmt_helper::pad2(to12h(tm_time), dest);
  349|  26.6k|    }
_ZN6spdlog7details11M_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  357|  46.4k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11M_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  359|  15.4k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  360|  15.4k|        const size_t field_size = 2;
  361|  15.4k|        ScopedPadder p(field_size, padinfo_, dest);
  362|  15.4k|        fmt_helper::pad2(tm_time.tm_min, dest);
  363|  15.4k|    }
_ZN6spdlog7details11S_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  371|  45.9k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11S_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  373|  15.2k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  374|  15.2k|        const size_t field_size = 2;
  375|  15.2k|        ScopedPadder p(field_size, padinfo_, dest);
  376|  15.2k|        fmt_helper::pad2(tm_time.tm_sec, dest);
  377|  15.2k|    }
_ZN6spdlog7details11e_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  385|  34.3k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11e_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  387|  11.3k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  388|  11.3k|        auto millis = fmt_helper::time_fraction<std::chrono::milliseconds>(msg.time);
  389|  11.3k|        const size_t field_size = 3;
  390|  11.3k|        ScopedPadder p(field_size, padinfo_, dest);
  391|  11.3k|        fmt_helper::pad3(static_cast<uint32_t>(millis.count()), dest);
  392|  11.3k|    }
_ZN6spdlog7details11f_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  400|  31.2k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11f_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  402|  10.3k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  403|  10.3k|        auto micros = fmt_helper::time_fraction<std::chrono::microseconds>(msg.time);
  404|       |
  405|  10.3k|        const size_t field_size = 6;
  406|  10.3k|        ScopedPadder p(field_size, padinfo_, dest);
  407|  10.3k|        fmt_helper::pad6(static_cast<size_t>(micros.count()), dest);
  408|  10.3k|    }
_ZN6spdlog7details11F_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  416|  14.4k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11F_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  418|  4.70k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  419|  4.70k|        auto ns = fmt_helper::time_fraction<std::chrono::nanoseconds>(msg.time);
  420|  4.70k|        const size_t field_size = 9;
  421|  4.70k|        ScopedPadder p(field_size, padinfo_, dest);
  422|  4.70k|        fmt_helper::pad9(static_cast<size_t>(ns.count()), dest);
  423|  4.70k|    }
_ZN6spdlog7details11E_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  431|  50.4k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11E_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  433|  16.7k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  434|  16.7k|        auto duration = msg.time.time_since_epoch();
  435|  16.7k|        auto seconds = std::chrono::duration_cast<std::chrono::seconds>(duration).count();
  436|  16.7k|        const auto field_size = ScopedPadder::count_digits(seconds);
  437|  16.7k|        ScopedPadder p(field_size, padinfo_, dest);
  438|  16.7k|        fmt_helper::append_int(seconds, dest);
  439|  16.7k|    }
_ZN6spdlog7details18null_scoped_padder12count_digitsIxEEjT_:
   98|  16.7k|    static unsigned int count_digits(T /* number */) {
   99|  16.7k|        return 0;
  100|  16.7k|    }
_ZN6spdlog7details11p_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  447|  13.5k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11p_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  449|  4.44k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  450|  4.44k|        const size_t field_size = 2;
  451|  4.44k|        ScopedPadder p(field_size, padinfo_, dest);
  452|  4.44k|        fmt_helper::append_string_view(ampm(tm_time), dest);
  453|  4.44k|    }
_ZN6spdlog7details11r_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  461|  36.3k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11r_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  463|  11.9k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  464|  11.9k|        const size_t field_size = 11;
  465|  11.9k|        ScopedPadder p(field_size, padinfo_, dest);
  466|       |
  467|  11.9k|        fmt_helper::pad2(to12h(tm_time), dest);
  468|  11.9k|        dest.push_back(':');
  469|  11.9k|        fmt_helper::pad2(tm_time.tm_min, dest);
  470|  11.9k|        dest.push_back(':');
  471|  11.9k|        fmt_helper::pad2(tm_time.tm_sec, dest);
  472|  11.9k|        dest.push_back(' ');
  473|  11.9k|        fmt_helper::append_string_view(ampm(tm_time), dest);
  474|  11.9k|    }
_ZN6spdlog7details11R_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  482|   116k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11R_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  484|  38.8k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  485|  38.8k|        const size_t field_size = 5;
  486|  38.8k|        ScopedPadder p(field_size, padinfo_, dest);
  487|       |
  488|  38.8k|        fmt_helper::pad2(tm_time.tm_hour, dest);
  489|  38.8k|        dest.push_back(':');
  490|  38.8k|        fmt_helper::pad2(tm_time.tm_min, dest);
  491|  38.8k|    }
_ZN6spdlog7details11T_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  499|  59.1k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details11T_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  501|  19.6k|    void format(const details::log_msg &, const std::tm &tm_time, memory_buf_t &dest) override {
  502|  19.6k|        const size_t field_size = 8;
  503|  19.6k|        ScopedPadder p(field_size, padinfo_, dest);
  504|       |
  505|  19.6k|        fmt_helper::pad2(tm_time.tm_hour, dest);
  506|  19.6k|        dest.push_back(':');
  507|  19.6k|        fmt_helper::pad2(tm_time.tm_min, dest);
  508|  19.6k|        dest.push_back(':');
  509|  19.6k|        fmt_helper::pad2(tm_time.tm_sec, dest);
  510|  19.6k|    }
_ZN6spdlog7details11z_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoENS_17pattern_time_typeE:
  519|  57.2k|        : flag_formatter(padinfo),
  520|  57.2k|          time_type_(time_type) {}
_ZN6spdlog7details11z_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  526|  19.0k|    void format(const details::log_msg &msg, const std::tm &tm_time, memory_buf_t &dest) override {
  527|  19.0k|        const size_t field_size = 6;
  528|  19.0k|        ScopedPadder p(field_size, padinfo_, dest);
  529|       |#ifdef SPDLOG_NO_TZ_OFFSET
  530|       |        (void)msg;
  531|       |        (void)tm_time;
  532|       |        const char *str = "+??:??";
  533|       |        dest.append(str, str + 6);
  534|       |#else
  535|  19.0k|        if (time_type_ == pattern_time_type::utc) {
  ------------------
  |  Branch (535:13): [True: 0, False: 19.0k]
  ------------------
  536|      0|            const char *zeroes = "+00:00";
  537|      0|            dest.append(zeroes, zeroes + 6);
  538|      0|            return;
  539|      0|        }
  540|  19.0k|        auto total_minutes = get_cached_offset(msg, tm_time);
  541|  19.0k|        bool is_negative = total_minutes < 0;
  542|  19.0k|        if (is_negative) {
  ------------------
  |  Branch (542:13): [True: 0, False: 19.0k]
  ------------------
  543|      0|            total_minutes = -total_minutes;
  544|      0|            dest.push_back('-');
  545|  19.0k|        } else {
  546|  19.0k|            dest.push_back('+');
  547|  19.0k|        }
  548|       |
  549|  19.0k|        fmt_helper::pad2(total_minutes / 60, dest);  // hours
  550|  19.0k|        dest.push_back(':');
  551|  19.0k|        fmt_helper::pad2(total_minutes % 60, dest);  // minutes
  552|  19.0k|#endif  // SPDLOG_NO_TZ_OFFSET
  553|  19.0k|    }
_ZN6spdlog7details11z_formatterINS0_18null_scoped_padderEE17get_cached_offsetERKNS0_7log_msgERK2tm:
  560|  19.0k|    int get_cached_offset(const log_msg &msg, const std::tm &tm_time) {
  561|       |        // refresh every 10 seconds
  562|  19.0k|        if (msg.time - last_update_ >= std::chrono::seconds(10)) {
  ------------------
  |  Branch (562:13): [True: 19.0k, False: 0]
  ------------------
  563|  19.0k|            offset_minutes_ = os::utc_minutes_offset(tm_time);
  564|  19.0k|            last_update_ = msg.time;
  565|  19.0k|        }
  566|  19.0k|        return offset_minutes_;
  567|  19.0k|    }
_ZN6spdlog7details13pid_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  589|  85.1k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details13pid_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  591|  28.3k|    void format(const details::log_msg &, const std::tm &, memory_buf_t &dest) override {
  592|  28.3k|        const auto pid = static_cast<uint32_t>(details::os::pid());
  593|  28.3k|        auto field_size = ScopedPadder::count_digits(pid);
  594|  28.3k|        ScopedPadder p(field_size, padinfo_, dest);
  595|  28.3k|        fmt_helper::append_int(pid, dest);
  596|  28.3k|    }
_ZN6spdlog7details18null_scoped_padder12count_digitsIjEEjT_:
   98|  28.3k|    static unsigned int count_digits(T /* number */) {
   99|  28.3k|        return 0;
  100|  28.3k|    }
_ZN6spdlog7details25source_location_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  664|  5.12k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details25source_location_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  666|  1.68k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  667|  1.68k|        if (msg.source.empty()) {
  ------------------
  |  Branch (667:13): [True: 1.68k, False: 0]
  ------------------
  668|  1.68k|            ScopedPadder p(0, padinfo_, dest);
  669|  1.68k|            return;
  670|  1.68k|        }
  671|       |
  672|      0|        size_t text_size;
  673|      0|        if (padinfo_.enabled()) {
  ------------------
  |  Branch (673:13): [True: 0, False: 0]
  ------------------
  674|       |            // calc text size for padding based on "filename:line"
  675|      0|            text_size = std::char_traits<char>::length(msg.source.filename) +
  676|      0|                        ScopedPadder::count_digits(msg.source.line) + 1;
  677|      0|        } else {
  678|      0|            text_size = 0;
  679|      0|        }
  680|       |
  681|      0|        ScopedPadder p(text_size, padinfo_, dest);
  682|      0|        fmt_helper::append_string_view(msg.source.filename, dest);
  683|      0|        dest.push_back(':');
  684|      0|        fmt_helper::append_int(msg.source.line, dest);
  685|      0|    }
_ZN6spdlog7details24short_filename_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  711|  4.37k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details24short_filename_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  736|  1.44k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  737|  1.44k|        if (msg.source.empty()) {
  ------------------
  |  Branch (737:13): [True: 1.44k, False: 0]
  ------------------
  738|  1.44k|            ScopedPadder p(0, padinfo_, dest);
  739|  1.44k|            return;
  740|  1.44k|        }
  741|      0|        auto filename = basename(msg.source.filename);
  742|      0|        size_t text_size = padinfo_.enabled() ? std::char_traits<char>::length(filename) : 0;
  ------------------
  |  Branch (742:28): [True: 0, False: 0]
  ------------------
  743|      0|        ScopedPadder p(text_size, padinfo_, dest);
  744|      0|        fmt_helper::append_string_view(filename, dest);
  745|      0|    }
_ZN6spdlog7details25source_filename_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  693|  6.07k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details25source_filename_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  695|  1.99k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  696|  1.99k|        if (msg.source.empty()) {
  ------------------
  |  Branch (696:13): [True: 1.99k, False: 0]
  ------------------
  697|  1.99k|            ScopedPadder p(0, padinfo_, dest);
  698|  1.99k|            return;
  699|  1.99k|        }
  700|      0|        size_t text_size =
  701|      0|            padinfo_.enabled() ? std::char_traits<char>::length(msg.source.filename) : 0;
  ------------------
  |  Branch (701:13): [True: 0, False: 0]
  ------------------
  702|      0|        ScopedPadder p(text_size, padinfo_, dest);
  703|      0|        fmt_helper::append_string_view(msg.source.filename, dest);
  704|      0|    }
_ZN6spdlog7details24source_linenum_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  752|  9.90k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details24source_linenum_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  754|  3.28k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  755|  3.28k|        if (msg.source.empty()) {
  ------------------
  |  Branch (755:13): [True: 3.28k, False: 0]
  ------------------
  756|  3.28k|            ScopedPadder p(0, padinfo_, dest);
  757|  3.28k|            return;
  758|  3.28k|        }
  759|       |
  760|      0|        auto field_size = ScopedPadder::count_digits(msg.source.line);
  761|      0|        ScopedPadder p(field_size, padinfo_, dest);
  762|      0|        fmt_helper::append_int(msg.source.line, dest);
  763|      0|    }
_ZN6spdlog7details25source_funcname_formatterINS0_18null_scoped_padderEEC2ENS0_12padding_infoE:
  771|  8.59k|        : flag_formatter(padinfo) {}
_ZN6spdlog7details25source_funcname_formatterINS0_18null_scoped_padderEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSB_6detail9allocatorIcEEEE:
  773|  2.85k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  774|  2.85k|        if (msg.source.empty()) {
  ------------------
  |  Branch (774:13): [True: 2.85k, False: 0]
  ------------------
  775|  2.85k|            ScopedPadder p(0, padinfo_, dest);
  776|  2.85k|            return;
  777|  2.85k|        }
  778|      0|        size_t text_size =
  779|      0|            padinfo_.enabled() ? std::char_traits<char>::length(msg.source.funcname) : 0;
  ------------------
  |  Branch (779:13): [True: 0, False: 0]
  ------------------
  780|      0|        ScopedPadder p(text_size, padinfo_, dest);
  781|      0|        fmt_helper::append_string_view(msg.source.funcname, dest);
  782|      0|    }
_ZN6spdlog7details17elapsed_formatterINS0_18null_scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1000000000EEEEEEC2ENS0_12padding_infoE:
  792|  30.7k|        : flag_formatter(padinfo),
  793|  30.7k|          last_message_time_(log_clock::now()) {}
_ZN6spdlog7details17elapsed_formatterINS0_18null_scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1000000000EEEEEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSH_6detail9allocatorIcEEEE:
  795|  10.0k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  796|  10.0k|        auto delta = (std::max)(msg.time - last_message_time_, log_clock::duration::zero());
  797|  10.0k|        auto delta_units = std::chrono::duration_cast<DurationUnits>(delta);
  798|  10.0k|        last_message_time_ = msg.time;
  799|  10.0k|        auto delta_count = static_cast<size_t>(delta_units.count());
  800|  10.0k|        auto n_digits = static_cast<size_t>(ScopedPadder::count_digits(delta_count));
  801|  10.0k|        ScopedPadder p(n_digits, padinfo_, dest);
  802|  10.0k|        fmt_helper::append_int(delta_count, dest);
  803|  10.0k|    }
_ZN6spdlog7details17elapsed_formatterINS0_18null_scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1000000EEEEEEC2ENS0_12padding_infoE:
  792|  59.8k|        : flag_formatter(padinfo),
  793|  59.8k|          last_message_time_(log_clock::now()) {}
_ZN6spdlog7details17elapsed_formatterINS0_18null_scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1000000EEEEEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSH_6detail9allocatorIcEEEE:
  795|  19.9k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  796|  19.9k|        auto delta = (std::max)(msg.time - last_message_time_, log_clock::duration::zero());
  797|  19.9k|        auto delta_units = std::chrono::duration_cast<DurationUnits>(delta);
  798|  19.9k|        last_message_time_ = msg.time;
  799|  19.9k|        auto delta_count = static_cast<size_t>(delta_units.count());
  800|  19.9k|        auto n_digits = static_cast<size_t>(ScopedPadder::count_digits(delta_count));
  801|  19.9k|        ScopedPadder p(n_digits, padinfo_, dest);
  802|  19.9k|        fmt_helper::append_int(delta_count, dest);
  803|  19.9k|    }
_ZN6spdlog7details17elapsed_formatterINS0_18null_scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1000EEEEEEC2ENS0_12padding_infoE:
  792|  4.64k|        : flag_formatter(padinfo),
  793|  4.64k|          last_message_time_(log_clock::now()) {}
_ZN6spdlog7details17elapsed_formatterINS0_18null_scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1000EEEEEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSH_6detail9allocatorIcEEEE:
  795|  1.54k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  796|  1.54k|        auto delta = (std::max)(msg.time - last_message_time_, log_clock::duration::zero());
  797|  1.54k|        auto delta_units = std::chrono::duration_cast<DurationUnits>(delta);
  798|  1.54k|        last_message_time_ = msg.time;
  799|  1.54k|        auto delta_count = static_cast<size_t>(delta_units.count());
  800|  1.54k|        auto n_digits = static_cast<size_t>(ScopedPadder::count_digits(delta_count));
  801|  1.54k|        ScopedPadder p(n_digits, padinfo_, dest);
  802|  1.54k|        fmt_helper::append_int(delta_count, dest);
  803|  1.54k|    }
_ZN6spdlog7details17elapsed_formatterINS0_18null_scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1EEEEEEC2ENS0_12padding_infoE:
  792|   214k|        : flag_formatter(padinfo),
  793|   214k|          last_message_time_(log_clock::now()) {}
_ZN6spdlog7details17elapsed_formatterINS0_18null_scoped_padderENSt3__16chrono8durationIxNS3_5ratioILl1ELl1EEEEEE6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENSH_6detail9allocatorIcEEEE:
  795|  71.3k|    void format(const details::log_msg &msg, const std::tm &, memory_buf_t &dest) override {
  796|  71.3k|        auto delta = (std::max)(msg.time - last_message_time_, log_clock::duration::zero());
  797|  71.3k|        auto delta_units = std::chrono::duration_cast<DurationUnits>(delta);
  798|  71.3k|        last_message_time_ = msg.time;
  799|  71.3k|        auto delta_count = static_cast<size_t>(delta_units.count());
  800|  71.3k|        auto n_digits = static_cast<size_t>(ScopedPadder::count_digits(delta_count));
  801|  71.3k|        ScopedPadder p(n_digits, padinfo_, dest);
  802|  71.3k|        fmt_helper::append_int(delta_count, dest);
  803|  71.3k|    }
_ZN6spdlog7details19aggregate_formatterC2Ev:
  627|  2.15M|    aggregate_formatter() = default;
_ZN6spdlog7details19aggregate_formatter6formatERKNS0_7log_msgERK2tmRN3fmt3v1219basic_memory_bufferIcLm250ENS9_6detail9allocatorIcEEEE:
  630|   711k|    void format(const details::log_msg &, const std::tm &, memory_buf_t &dest) override {
  631|   711k|        fmt_helper::append_string_view(str_, dest);
  632|   711k|    }
_ZN6spdlog7details19aggregate_formatter6add_chEc:
  629|  52.8M|    void add_ch(char ch) { str_ += ch; }
_ZN6spdlog17pattern_formatter11set_patternENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 1009|  7.91k|SPDLOG_INLINE void pattern_formatter::set_pattern(std::string pattern) {
 1010|  7.91k|    pattern_ = std::move(pattern);
 1011|  7.91k|    need_localtime_ = false;
 1012|  7.91k|    compile_pattern_(pattern_);
 1013|  7.91k|}
_ZN6spdlog17pattern_formatter6formatERKNS_7details7log_msgERN3fmt3v1219basic_memory_bufferIcLm250ENS6_6detail9allocatorIcEEEE:
  992|  4.95k|SPDLOG_INLINE void pattern_formatter::format(const details::log_msg &msg, memory_buf_t &dest) {
  993|  4.95k|    if (need_localtime_) {
  ------------------
  |  Branch (993:9): [True: 3.24k, False: 1.70k]
  ------------------
  994|  3.24k|        const auto secs =
  995|  3.24k|            std::chrono::duration_cast<std::chrono::seconds>(msg.time.time_since_epoch());
  996|  3.24k|        if (secs != last_log_secs_ || cached_tm_.tm_mday == 0) {
  ------------------
  |  Branch (996:13): [True: 3.24k, False: 0]
  |  Branch (996:39): [True: 0, False: 0]
  ------------------
  997|  3.24k|            cached_tm_ = get_time_(msg);
  998|  3.24k|            last_log_secs_ = secs;
  999|  3.24k|        }
 1000|  3.24k|    }
 1001|       |
 1002|  2.30M|    for (auto &f : formatters_) {
  ------------------
  |  Branch (1002:18): [True: 2.30M, False: 4.95k]
  ------------------
 1003|  2.30M|        f->format(msg, cached_tm_, dest);
 1004|  2.30M|    }
 1005|       |    // write eol
 1006|  4.95k|    details::fmt_helper::append_string_view(eol_, dest);
 1007|  4.95k|}
_ZNK6spdlog17pattern_formatter9get_time_ERKNS_7details7log_msgE:
 1017|  3.24k|SPDLOG_INLINE std::tm pattern_formatter::get_time_(const details::log_msg &msg) const {
 1018|  3.24k|    if (pattern_time_type_ == pattern_time_type::local) {
  ------------------
  |  Branch (1018:9): [True: 3.24k, False: 0]
  ------------------
 1019|  3.24k|        return details::os::localtime(log_clock::to_time_t(msg.time));
 1020|  3.24k|    }
 1021|      0|    return details::os::gmtime(log_clock::to_time_t(msg.time));
 1022|  3.24k|}

_ZN6spdlog7details14flag_formatterC2ENS0_12padding_infoE:
   43|  4.62M|        : padinfo_(padinfo) {}
_ZN6spdlog7details14flag_formatterD2Ev:
   45|  7.43M|    virtual ~flag_formatter() = default;
_ZN6spdlog7details12padding_infoC2Ev:
   26|  6.77M|    padding_info() = default;
_ZN6spdlog7details12padding_infoC2EmNS1_8pad_sideEb:
   28|  1.78M|        : width_(width),
   29|  1.78M|          side_(side),
   30|  1.78M|          truncate_(truncate),
   31|  1.78M|          enabled_(true) {}
_ZNK6spdlog7details12padding_info7enabledEv:
   33|  5.30M|    bool enabled() const { return enabled_; }
_ZN6spdlog21custom_flag_formatter16set_padding_infoERKNS_7details12padding_infoE:
   60|  31.9k|    void set_padding_info(const details::padding_info &padding) {
   61|  31.9k|        flag_formatter::padinfo_ = padding;
   62|  31.9k|    }
_ZN6spdlog7details14flag_formatterC2Ev:
   44|  2.81M|    flag_formatter() = default;
_ZN6spdlog17pattern_formatter8add_flagI17my_formatter_flagJEEERS0_cDpOT0_:
   85|  7.91k|    pattern_formatter &add_flag(char flag, Args &&...args) {
   86|  7.91k|        custom_handlers_[flag] = details::make_unique<T>(std::forward<Args>(args)...);
   87|  7.91k|        return *this;
   88|  7.91k|    }

_ZN6spdlog5sinks21ansicolor_stdout_sinkINS_7details13console_mutexEEC2ENS_10color_modeE:
  134|      1|    : ansicolor_sink<ConsoleMutex>(stdout, mode) {}
_ZN6spdlog5sinks14ansicolor_sinkINS_7details13console_mutexEEC2EP8_IO_FILENS_10color_modeE:
   18|      1|    : target_file_(target_file),
   19|      1|      mutex_(ConsoleMutex::mutex()),
   20|      1|      formatter_(details::make_unique<pattern_formatter>())
   21|       |
   22|      1|{
   23|      1|    set_color_mode_(mode);
   24|      1|    colors_.at(level::trace) = to_string_(white);
   25|      1|    colors_.at(level::debug) = to_string_(cyan);
   26|      1|    colors_.at(level::info) = to_string_(green);
   27|      1|    colors_.at(level::warn) = to_string_(yellow_bold);
   28|      1|    colors_.at(level::err) = to_string_(red_bold);
   29|      1|    colors_.at(level::critical) = to_string_(bold_on_red);
   30|      1|    colors_.at(level::off) = to_string_(reset);
   31|      1|}
_ZN6spdlog5sinks14ansicolor_sinkINS_7details13console_mutexEE15set_color_mode_ENS_10color_modeE:
   96|      1|SPDLOG_INLINE void ansicolor_sink<ConsoleMutex>::set_color_mode_(color_mode mode) {
   97|      1|    switch (mode) {
   98|      0|        case color_mode::always:
  ------------------
  |  Branch (98:9): [True: 0, False: 1]
  ------------------
   99|      0|            should_do_colors_ = true;
  100|      0|            return;
  101|      1|        case color_mode::automatic:
  ------------------
  |  Branch (101:9): [True: 1, False: 0]
  ------------------
  102|      1|            should_do_colors_ =
  103|      1|                details::os::in_terminal(target_file_) && details::os::is_color_terminal();
  ------------------
  |  Branch (103:17): [True: 0, False: 1]
  |  Branch (103:59): [True: 0, False: 0]
  ------------------
  104|      1|            return;
  105|      0|        case color_mode::never:
  ------------------
  |  Branch (105:9): [True: 0, False: 1]
  ------------------
  106|      0|            should_do_colors_ = false;
  107|      0|            return;
  108|      0|        default:
  ------------------
  |  Branch (108:9): [True: 0, False: 1]
  ------------------
  109|      0|            should_do_colors_ = false;
  110|      1|    }
  111|      1|}
_ZN6spdlog5sinks14ansicolor_sinkINS_7details13console_mutexEE10to_string_ERKN3fmt3v1217basic_string_viewIcEE:
  127|      7|SPDLOG_INLINE std::string ansicolor_sink<ConsoleMutex>::to_string_(const string_view_t &sv) {
  128|      7|    return std::string(sv.data(), sv.size());
  129|      7|}
_ZN6spdlog5sinks14ansicolor_sinkINS_7details13console_mutexEE13set_formatterENSt3__110unique_ptrINS_9formatterENS5_14default_deleteIS7_EEEE:
   79|  7.91k|    std::unique_ptr<formatter> sink_formatter) {
   80|  7.91k|    std::lock_guard<mutex_t> lock(mutex_);
   81|  7.91k|    formatter_ = std::move(sink_formatter);
   82|  7.91k|}

_ZN6spdlog5sinks14ansicolor_sinkINS_7details13console_mutexEED2Ev:
   29|      1|    ~ansicolor_sink() override = default;

_ZN6spdlog5sinks9base_sinkINSt3__15mutexEEC2Ev:
   20|      1|    : formatter_{details::make_unique<pattern_formatter>()} {}
_ZN6spdlog5sinks9base_sinkINSt3__15mutexEE3logERKNS_7details7log_msgE:
   28|  4.95k|void SPDLOG_INLINE sinks::base_sink<Mutex>::log(const details::log_msg &msg) {
   29|  4.95k|    std::lock_guard<Mutex> lock(mutex_);
   30|  4.95k|    sink_it_(msg);
   31|  4.95k|}
_ZN6spdlog5sinks9base_sinkINSt3__15mutexEE13set_formatterENS2_10unique_ptrINS_9formatterENS2_14default_deleteIS6_EEEE:
   47|  7.91k|sinks::base_sink<Mutex>::set_formatter(std::unique_ptr<formatter> sink_formatter) {
   48|  7.91k|    std::lock_guard<Mutex> lock(mutex_);
   49|  7.91k|    set_formatter_(std::move(sink_formatter));
   50|  7.91k|}
_ZN6spdlog5sinks9base_sinkINSt3__15mutexEE14set_formatter_ENS2_10unique_ptrINS_9formatterENS2_14default_deleteIS6_EEEE:
   59|  7.91k|sinks::base_sink<Mutex>::set_formatter_(std::unique_ptr<formatter> sink_formatter) {
   60|  7.91k|    formatter_ = std::move(sink_formatter);
   61|  7.91k|}

_ZN6spdlog5sinks9base_sinkINSt3__15mutexEED2Ev:
   23|      1|    ~base_sink() override = default;

_ZN6spdlog5sinks15basic_file_sinkINSt3__15mutexEEC2ERKNS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbRKNS_19file_event_handlersEm:
   21|      1|    : file_helper_{event_handlers} {
   22|      1|    file_helper_.set_buffer_size(buffer_size);
   23|      1|    file_helper_.open(filename, truncate);
   24|      1|}
_ZN6spdlog5sinks15basic_file_sinkINSt3__15mutexEE8sink_it_ERKNS_7details7log_msgE:
   50|  4.95k|SPDLOG_INLINE void basic_file_sink<Mutex>::sink_it_(const details::log_msg &msg) {
   51|  4.95k|    memory_buf_t formatted;
   52|  4.95k|    base_sink<Mutex>::formatter_->format(msg, formatted);
   53|  4.95k|    file_helper_.write(formatted);
   54|  4.95k|}

_ZN6spdlog15basic_logger_mtINS_19synchronous_factoryEEENSt3__110shared_ptrINS_6loggerEEERKNS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESD_bRKNS_19file_event_handlersEm:
   52|      1|                                               size_t buffer_size = 0) {
   53|      1|    return Factory::template create<sinks::basic_file_sink_mt>(logger_name, filename, truncate,
   54|      1|                                                               event_handlers, buffer_size);
   55|      1|}

_ZNK6spdlog5sinks4sink10should_logENS_5level10level_enumE:
   14|  4.95k|SPDLOG_INLINE bool sinks::sink::should_log(level::level_enum msg_level) const {
   15|  4.95k|    return msg_level >= level_.load(std::memory_order_relaxed);
   16|  4.95k|}

_ZN6spdlog5sinks4sinkD2Ev:
   14|      2|    virtual ~sink() = default;

_ZN6spdlog18set_default_loggerENSt3__110shared_ptrINS_6loggerEEE:
   92|      1|SPDLOG_INLINE void set_default_logger(std::shared_ptr<logger> default_logger) {
   93|      1|    details::registry::instance().set_default_logger(std::move(default_logger));
   94|      1|}
_ZN6spdlog13set_formatterENSt3__110unique_ptrINS_9formatterENS0_14default_deleteIS2_EEEE:
   23|  7.91k|SPDLOG_INLINE void set_formatter(std::unique_ptr<formatter> formatter) {
   24|  7.91k|    details::registry::instance().set_formatter(std::move(formatter));
   25|  7.91k|}
_ZN6spdlog18default_logger_rawEv:
   88|  7.91k|SPDLOG_INLINE logger *default_logger_raw() {
   89|  7.91k|    return details::registry::instance().get_default_raw();
   90|  7.91k|}

_ZN6spdlog4infoIJRKmS2_RKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEEvN3fmt3v127fstringIJDpT_EE1tEDpOSF_:
  175|  7.91k|inline void info(format_string_t<Args...> fmt, Args &&...args) {
  176|  7.91k|    default_logger_raw()->info(fmt, std::forward<Args>(args)...);
  177|  7.91k|}

