writeRandomBytes_arc4random_buf:
   45|  12.0k|writeRandomBytes_arc4random_buf(void *target, size_t count) {
   46|  12.0k|  arc4random_buf(target, count);
   47|       |  // MSan does not understand `arc4random_buf`, so explain its effects
   48|  12.0k|  MSAN_UNPOISON(target, count);
  ------------------
  |  |   49|  12.0k|      do {                                                                     \
  |  |   50|  12.0k|      } while (0)
  |  |  ------------------
  |  |  |  Branch (50:16): [Folded, False: 12.0k]
  |  |  ------------------
  ------------------
   49|  12.0k|}

xmlparse.c:sip24_init:
  194|   877k|sip24_init(struct siphash *H, const struct sipkey *key) {
  195|   877k|  H->v0 = SIP_ULL(0x736f6d65U, 0x70736575U) ^ key->k[0];
  ------------------
  |  |  112|   877k|#define SIP_ULL(high, low) ((((uint64_t)high) << 32) | (low))
  ------------------
  196|   877k|  H->v1 = SIP_ULL(0x646f7261U, 0x6e646f6dU) ^ key->k[1];
  ------------------
  |  |  112|   877k|#define SIP_ULL(high, low) ((((uint64_t)high) << 32) | (low))
  ------------------
  197|   877k|  H->v2 = SIP_ULL(0x6c796765U, 0x6e657261U) ^ key->k[0];
  ------------------
  |  |  112|   877k|#define SIP_ULL(high, low) ((((uint64_t)high) << 32) | (low))
  ------------------
  198|   877k|  H->v3 = SIP_ULL(0x74656462U, 0x79746573U) ^ key->k[1];
  ------------------
  |  |  112|   877k|#define SIP_ULL(high, low) ((((uint64_t)high) << 32) | (low))
  ------------------
  199|       |
  200|   877k|  H->p = H->buf;
  201|   877k|  H->c = 0;
  202|       |
  203|   877k|  return H;
  204|   877k|} /* sip24_init() */
xmlparse.c:sip24_update:
  209|   898k|sip24_update(struct siphash *H, const void *src, size_t len) {
  210|   898k|  const unsigned char *p = (const unsigned char *)src, *pe = p + len;
  211|   898k|  uint64_t m;
  212|       |
  213|  1.37M|  do {
  214|  6.36M|    while (p < pe && H->p < sip_endof(H->buf))
  ------------------
  |  |  206|  5.46M|#define sip_endof(a) (&(a)[sizeof(a) / sizeof *(a)])
  ------------------
  |  Branch (214:12): [True: 5.46M, False: 898k]
  |  Branch (214:22): [True: 4.99M, False: 472k]
  ------------------
  215|  4.99M|      *H->p++ = *p++;
  216|       |
  217|  1.37M|    if (H->p < sip_endof(H->buf))
  ------------------
  |  |  206|  1.37M|#define sip_endof(a) (&(a)[sizeof(a) / sizeof *(a)])
  ------------------
  |  Branch (217:9): [True: 896k, False: 474k]
  ------------------
  218|   896k|      break;
  219|       |
  220|   474k|    m = SIP_U8TO64_LE(H->buf);
  ------------------
  |  |  127|   474k|  (((uint64_t)((p)[0]) << 0) | ((uint64_t)((p)[1]) << 8)                       \
  |  |  128|   474k|   | ((uint64_t)((p)[2]) << 16) | ((uint64_t)((p)[3]) << 24)                   \
  |  |  129|   474k|   | ((uint64_t)((p)[4]) << 32) | ((uint64_t)((p)[5]) << 40)                   \
  |  |  130|   474k|   | ((uint64_t)((p)[6]) << 48) | ((uint64_t)((p)[7]) << 56))
  ------------------
  221|   474k|    H->v3 ^= m;
  222|   474k|    sip_round(H, 2);
  223|   474k|    H->v0 ^= m;
  224|       |
  225|   474k|    H->p = H->buf;
  226|   474k|    H->c += 8;
  227|   474k|  } while (p < pe);
  ------------------
  |  Branch (227:12): [True: 472k, False: 1.84k]
  ------------------
  228|       |
  229|   898k|  return H;
  230|   898k|} /* sip24_update() */
xmlparse.c:sip_round:
  169|  2.22M|sip_round(struct siphash *H, const int rounds) {
  170|  2.22M|  int i;
  171|       |
  172|  8.44M|  for (i = 0; i < rounds; i++) {
  ------------------
  |  Branch (172:15): [True: 6.21M, False: 2.22M]
  ------------------
  173|  6.21M|    H->v0 += H->v1;
  174|  6.21M|    H->v1 = SIP_ROTL(H->v1, 13);
  ------------------
  |  |  114|  6.21M|#define SIP_ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b))))
  ------------------
  175|  6.21M|    H->v1 ^= H->v0;
  176|  6.21M|    H->v0 = SIP_ROTL(H->v0, 32);
  ------------------
  |  |  114|  6.21M|#define SIP_ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b))))
  ------------------
  177|       |
  178|  6.21M|    H->v2 += H->v3;
  179|  6.21M|    H->v3 = SIP_ROTL(H->v3, 16);
  ------------------
  |  |  114|  6.21M|#define SIP_ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b))))
  ------------------
  180|  6.21M|    H->v3 ^= H->v2;
  181|       |
  182|  6.21M|    H->v0 += H->v3;
  183|  6.21M|    H->v3 = SIP_ROTL(H->v3, 21);
  ------------------
  |  |  114|  6.21M|#define SIP_ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b))))
  ------------------
  184|  6.21M|    H->v3 ^= H->v0;
  185|       |
  186|  6.21M|    H->v2 += H->v1;
  187|  6.21M|    H->v1 = SIP_ROTL(H->v1, 17);
  ------------------
  |  |  114|  6.21M|#define SIP_ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b))))
  ------------------
  188|  6.21M|    H->v1 ^= H->v2;
  189|  6.21M|    H->v2 = SIP_ROTL(H->v2, 32);
  ------------------
  |  |  114|  6.21M|#define SIP_ROTL(x, b) (uint64_t)(((x) << (b)) | ((x) >> (64 - (b))))
  ------------------
  190|  6.21M|  }
  191|  2.22M|} /* sip_round() */
xmlparse.c:sip24_final:
  233|   877k|sip24_final(struct siphash *H) {
  234|   877k|  const char left = (char)(H->p - H->buf);
  235|   877k|  uint64_t b = (H->c + left) << 56;
  236|       |
  237|   877k|  switch (left) {
  ------------------
  |  Branch (237:11): [True: 877k, False: 0]
  ------------------
  238|  3.37k|  case 7:
  ------------------
  |  Branch (238:3): [True: 3.37k, False: 874k]
  ------------------
  239|  3.37k|    b |= (uint64_t)H->buf[6] << 48;
  240|  3.37k|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|  3.37k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  241|  24.6k|  case 6:
  ------------------
  |  Branch (241:3): [True: 21.2k, False: 856k]
  ------------------
  242|  24.6k|    b |= (uint64_t)H->buf[5] << 40;
  243|  24.6k|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|  24.6k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  244|  62.5k|  case 5:
  ------------------
  |  Branch (244:3): [True: 37.9k, False: 839k]
  ------------------
  245|  62.5k|    b |= (uint64_t)H->buf[4] << 32;
  246|  62.5k|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|  62.5k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  247|  64.9k|  case 4:
  ------------------
  |  Branch (247:3): [True: 2.34k, False: 875k]
  ------------------
  248|  64.9k|    b |= (uint64_t)H->buf[3] << 24;
  249|  64.9k|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|  64.9k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  250|  79.3k|  case 3:
  ------------------
  |  Branch (250:3): [True: 14.4k, False: 863k]
  ------------------
  251|  79.3k|    b |= (uint64_t)H->buf[2] << 16;
  252|  79.3k|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|  79.3k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  253|  88.9k|  case 2:
  ------------------
  |  Branch (253:3): [True: 9.60k, False: 868k]
  ------------------
  254|  88.9k|    b |= (uint64_t)H->buf[1] << 8;
  255|  88.9k|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|  88.9k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  256|   875k|  case 1:
  ------------------
  |  Branch (256:3): [True: 786k, False: 90.9k]
  ------------------
  257|   875k|    b |= (uint64_t)H->buf[0] << 0;
  258|   875k|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|   875k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  259|   877k|  case 0:
  ------------------
  |  Branch (259:3): [True: 1.98k, False: 875k]
  ------------------
  260|   877k|    break;
  261|   877k|  }
  262|       |
  263|   877k|  H->v3 ^= b;
  264|   877k|  sip_round(H, 2);
  265|   877k|  H->v0 ^= b;
  266|   877k|  H->v2 ^= 0xff;
  267|   877k|  sip_round(H, 4);
  268|       |
  269|   877k|  return H->v0 ^ H->v1 ^ H->v2 ^ H->v3;
  270|   877k|} /* sip24_final() */

xcslen:
   45|   937k|xcslen(const XML_Char *s) {
   46|       |#ifdef XML_UNICODE
   47|       |#  ifdef XML_UNICODE_WCHAR_T
   48|       |  return wcslen(s);
   49|       |#  else
   50|       |  // XML_Char is unsigned short
   51|       |  size_t len = 0;
   52|       |  while (s[len]) {
   53|       |    len++;
   54|       |  }
   55|       |  return len;
   56|       |#  endif
   57|       |#else
   58|   937k|  return strlen(s);
   59|   937k|#endif
   60|   937k|}

XML_ParserCreate:
 1061|  7.30k|XML_ParserCreate(const XML_Char *encodingName) {
 1062|  7.30k|  return XML_ParserCreate_MM(encodingName, NULL, NULL);
 1063|  7.30k|}
XML_ParserCreateNS:
 1066|  4.76k|XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep) {
 1067|  4.76k|  XML_Char tmp[2] = {nsSep, 0};
 1068|       |  return XML_ParserCreate_MM(encodingName, NULL, tmp);
 1069|  4.76k|}
XML_ParserCreate_MM:
 1294|  12.0k|                    const XML_Char *nameSep) {
 1295|  12.0k|  return parserCreate(encodingName, memsuite, nameSep, NULL, NULL);
 1296|  12.0k|}
XML_ParserFree:
 1865|  12.0k|XML_ParserFree(XML_Parser parser) {
 1866|  12.0k|  TAG *tagList;
 1867|  12.0k|  if ((parser == NULL) || isCalledFromInsideHandler(parser))
  ------------------
  |  Branch (1867:7): [True: 0, False: 12.0k]
  |  Branch (1867:27): [True: 0, False: 12.0k]
  ------------------
 1868|      0|    return;
 1869|       |  // The application-defined release callback may access the parser, so it
 1870|       |  // must run before any parser state is freed.
 1871|  12.0k|  if (parser->m_unknownEncodingRelease)
  ------------------
  |  Branch (1871:7): [True: 0, False: 12.0k]
  ------------------
 1872|      0|    callUnknownEncodingRelease(parser);
 1873|       |  /* free m_tagStack and m_freeTagList */
 1874|  12.0k|  tagList = parser->m_tagStack;
 1875|  40.0k|  for (;;) {
 1876|  40.0k|    TAG *p;
 1877|  40.0k|    if (tagList == NULL) {
  ------------------
  |  Branch (1877:9): [True: 12.2k, False: 27.8k]
  ------------------
 1878|  12.2k|      if (parser->m_freeTagList == NULL)
  ------------------
  |  Branch (1878:11): [True: 12.0k, False: 184]
  ------------------
 1879|  12.0k|        break;
 1880|    184|      tagList = parser->m_freeTagList;
 1881|    184|      parser->m_freeTagList = NULL;
 1882|    184|    }
 1883|  27.9k|    p = tagList;
 1884|  27.9k|    tagList = tagList->parent;
 1885|  27.9k|    FREE(parser, p->buf.raw);
  ------------------
  |  |  837|  27.9k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1886|  27.9k|    destroyBindings(p->bindings, parser);
 1887|  27.9k|    FREE(parser, p);
  ------------------
  |  |  837|  27.9k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1888|  27.9k|  }
 1889|       |  /* free m_openInternalEntities */
 1890|  12.0k|  for (OPEN_INTERNAL_ENTITY *entityList = parser->m_openInternalEntities;
 1891|  12.1k|       entityList != NULL;) {
  ------------------
  |  Branch (1891:8): [True: 115, False: 12.0k]
  ------------------
 1892|    115|    OPEN_INTERNAL_ENTITY *const openEntity = entityList;
 1893|    115|    entityList = entityList->next;
 1894|    115|    FREE(parser, openEntity);
  ------------------
  |  |  837|    115|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1895|    115|  }
 1896|       |  /* free m_openAttributeEntities */
 1897|  12.0k|  for (OPEN_INTERNAL_ENTITY *entityList = parser->m_openAttributeEntities;
 1898|  12.0k|       entityList != NULL;) {
  ------------------
  |  Branch (1898:8): [True: 22, False: 12.0k]
  ------------------
 1899|     22|    OPEN_INTERNAL_ENTITY *const openEntity = entityList;
 1900|     22|    entityList = entityList->next;
 1901|     22|    FREE(parser, openEntity);
  ------------------
  |  |  837|     22|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1902|     22|  }
 1903|       |  /* free m_openValueEntities */
 1904|  12.0k|  for (OPEN_INTERNAL_ENTITY *entityList = parser->m_openValueEntities;
 1905|  12.0k|       entityList != NULL;) {
  ------------------
  |  Branch (1905:8): [True: 0, False: 12.0k]
  ------------------
 1906|      0|    OPEN_INTERNAL_ENTITY *const openEntity = entityList;
 1907|      0|    entityList = entityList->next;
 1908|      0|    FREE(parser, openEntity);
  ------------------
  |  |  837|      0|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1909|      0|  }
 1910|       |  /* free m_freeEntities */
 1911|  12.0k|  for (OPEN_INTERNAL_ENTITY *entityList = parser->m_freeEntities;
 1912|  14.0k|       entityList != NULL;) {
  ------------------
  |  Branch (1912:8): [True: 1.99k, False: 12.0k]
  ------------------
 1913|  1.99k|    OPEN_INTERNAL_ENTITY *const openEntity = entityList;
 1914|  1.99k|    entityList = entityList->next;
 1915|  1.99k|    FREE(parser, openEntity);
  ------------------
  |  |  837|  1.99k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1916|  1.99k|  }
 1917|  12.0k|  parser->m_freeEntities = NULL;
 1918|  12.0k|  destroyBindings(parser->m_freeBindingList, parser);
 1919|  12.0k|  destroyBindings(parser->m_inheritedBindings, parser);
 1920|  12.0k|  poolDestroy(&parser->m_tempPool);
 1921|  12.0k|  poolDestroy(&parser->m_temp2Pool);
 1922|  12.0k|  FREE(parser, (void *)parser->m_protocolEncodingName);
  ------------------
  |  |  837|  12.0k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1923|  12.0k|#ifdef XML_DTD
 1924|       |  /* external parameter entity parsers share the DTD structure
 1925|       |     parser->m_dtd with the root parser, so we must not destroy it
 1926|       |  */
 1927|  12.0k|  if (! parser->m_isParamEntity && parser->m_dtd)
  ------------------
  |  Branch (1927:7): [True: 12.0k, False: 0]
  |  Branch (1927:36): [True: 12.0k, False: 0]
  ------------------
 1928|       |#else
 1929|       |  if (parser->m_dtd)
 1930|       |#endif /* XML_DTD */
 1931|  12.0k|    dtdDestroy(parser->m_dtd, (XML_Bool)! parser->m_parentParser, parser);
 1932|  12.0k|  FREE(parser, parser->m_atts);
  ------------------
  |  |  837|  12.0k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1933|  12.0k|  FREE(parser, parser->m_groupConnector);
  ------------------
  |  |  837|  12.0k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1934|       |  // NOTE: We are avoiding FREE(..) here because parser->m_buffer
 1935|       |  //       is not being allocated with MALLOC(..) but with plain
 1936|       |  //       .malloc_fcn(..).
 1937|  12.0k|  parser->m_mem.free_fcn(parser->m_buffer);
 1938|  12.0k|  FREE(parser, parser->m_dataBuf);
  ------------------
  |  |  837|  12.0k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1939|  12.0k|  FREE(parser, parser->m_nsAtts);
  ------------------
  |  |  837|  12.0k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1940|  12.0k|  FREE(parser, parser->m_unknownEncodingMem);
  ------------------
  |  |  837|  12.0k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1941|  12.0k|  FREE(parser, parser);
  ------------------
  |  |  837|  12.0k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1942|  12.0k|}
XML_Parse:
 2301|  12.0k|XML_Parse(XML_Parser parser, const char *s, int len, int isFinal) {
 2302|  12.0k|  if ((parser == NULL) || (len < 0) || ((s == NULL) && (len != 0))) {
  ------------------
  |  Branch (2302:7): [True: 0, False: 12.0k]
  |  Branch (2302:27): [True: 0, False: 12.0k]
  |  Branch (2302:41): [True: 0, False: 12.0k]
  |  Branch (2302:56): [True: 0, False: 0]
  ------------------
 2303|      0|    if (parser != NULL)
  ------------------
  |  Branch (2303:9): [True: 0, False: 0]
  ------------------
 2304|      0|      parser->m_errorCode = XML_ERROR_INVALID_ARGUMENT;
 2305|      0|    return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2306|      0|  }
 2307|  12.0k|  if (isCalledFromInsideHandler(parser))
  ------------------
  |  Branch (2307:7): [True: 0, False: 12.0k]
  ------------------
 2308|      0|    return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2309|  12.0k|  switch (parser->m_parsingStatus.parsing) {
 2310|      0|  case XML_SUSPENDED:
  ------------------
  |  Branch (2310:3): [True: 0, False: 12.0k]
  ------------------
 2311|      0|    parser->m_errorCode = XML_ERROR_SUSPENDED;
 2312|      0|    return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2313|      0|  case XML_FINISHED:
  ------------------
  |  Branch (2313:3): [True: 0, False: 12.0k]
  ------------------
 2314|      0|    parser->m_errorCode = XML_ERROR_FINISHED;
 2315|      0|    return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2316|  12.0k|  case XML_INITIALIZED:
  ------------------
  |  Branch (2316:3): [True: 12.0k, False: 0]
  ------------------
 2317|  12.0k|    if (parser->m_parentParser == NULL && ! startParsing(parser)) {
  ------------------
  |  Branch (2317:9): [True: 12.0k, False: 0]
  |  Branch (2317:43): [True: 0, False: 12.0k]
  ------------------
 2318|      0|      parser->m_errorCode = XML_ERROR_NO_MEMORY;
 2319|      0|      return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2320|      0|    }
 2321|  12.0k|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|  12.0k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 2322|  12.0k|  default:
  ------------------
  |  Branch (2322:3): [True: 0, False: 12.0k]
  ------------------
 2323|  12.0k|    parser->m_parsingStatus.parsing = XML_PARSING;
 2324|  12.0k|  }
 2325|       |
 2326|       |#if XML_CONTEXT_BYTES == 0
 2327|       |  if (parser->m_bufferPtr == parser->m_bufferEnd) {
 2328|       |    const char *end;
 2329|       |    int nLeftOver;
 2330|       |    enum XML_Status result;
 2331|       |    /* Detect overflow (a+b > MAX <==> b > MAX-a) */
 2332|       |    if ((uint64_t)len > UINT64_MAX - parser->m_parseEndByteIndex) {
 2333|       |      parser->m_errorCode = XML_ERROR_NO_MEMORY;
 2334|       |      parser->m_eventPtr = parser->m_eventEndPtr = NULL;
 2335|       |      parser->m_processor = errorProcessor;
 2336|       |      return XML_STATUS_ERROR;
 2337|       |    }
 2338|       |    // though this isn't a buffer request, we assume that `len` is the app's
 2339|       |    // preferred buffer fill size, and therefore save it here.
 2340|       |    parser->m_lastBufferRequestSize = len;
 2341|       |    parser->m_parseEndByteIndex += len;
 2342|       |    parser->m_positionPtr = s;
 2343|       |    parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal;
 2344|       |
 2345|       |    parser->m_errorCode
 2346|       |        = callProcessor(parser, s, parser->m_parseEndPtr = s + len, &end);
 2347|       |
 2348|       |    if (parser->m_errorCode != XML_ERROR_NONE) {
 2349|       |      parser->m_eventEndPtr = parser->m_eventPtr;
 2350|       |      parser->m_processor = errorProcessor;
 2351|       |      return XML_STATUS_ERROR;
 2352|       |    } else {
 2353|       |      switch (parser->m_parsingStatus.parsing) {
 2354|       |      case XML_SUSPENDED:
 2355|       |        result = XML_STATUS_SUSPENDED;
 2356|       |        break;
 2357|       |      case XML_INITIALIZED:
 2358|       |      case XML_PARSING:
 2359|       |        if (isFinal) {
 2360|       |          parser->m_parsingStatus.parsing = XML_FINISHED;
 2361|       |          return XML_STATUS_OK;
 2362|       |        }
 2363|       |        EXPAT_FALLTHROUGH;
 2364|       |      default:
 2365|       |        result = XML_STATUS_OK;
 2366|       |      }
 2367|       |    }
 2368|       |
 2369|       |    XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr, end,
 2370|       |                      &parser->m_position);
 2371|       |    nLeftOver = s + len - end;
 2372|       |    if (nLeftOver) {
 2373|       |      // Back up and restore the parsing status to avoid XML_ERROR_SUSPENDED
 2374|       |      // (and XML_ERROR_FINISHED) from XML_GetBuffer.
 2375|       |      const enum XML_Parsing originalStatus = parser->m_parsingStatus.parsing;
 2376|       |      parser->m_parsingStatus.parsing = XML_PARSING;
 2377|       |      void *const temp = XML_GetBuffer(parser, nLeftOver);
 2378|       |      parser->m_parsingStatus.parsing = originalStatus;
 2379|       |      // GetBuffer may have overwritten this, but we want to remember what the
 2380|       |      // app requested, not how many bytes were left over after parsing.
 2381|       |      parser->m_lastBufferRequestSize = len;
 2382|       |      if (temp == NULL) {
 2383|       |        // NOTE: parser->m_errorCode has already been set by XML_GetBuffer().
 2384|       |        parser->m_eventPtr = parser->m_eventEndPtr = NULL;
 2385|       |        parser->m_processor = errorProcessor;
 2386|       |        return XML_STATUS_ERROR;
 2387|       |      }
 2388|       |      // Since we know that the buffer was empty and XML_CONTEXT_BYTES is 0, we
 2389|       |      // don't have any data to preserve, and can copy straight into the start
 2390|       |      // of the buffer rather than the GetBuffer return pointer (which may be
 2391|       |      // pointing further into the allocated buffer).
 2392|       |      memcpy(parser->m_buffer, end, nLeftOver);
 2393|       |    }
 2394|       |    parser->m_bufferPtr = parser->m_buffer;
 2395|       |    parser->m_bufferEnd = parser->m_buffer + nLeftOver;
 2396|       |    parser->m_positionPtr = parser->m_bufferPtr;
 2397|       |    parser->m_parseEndPtr = parser->m_bufferEnd;
 2398|       |    parser->m_eventPtr = parser->m_bufferPtr;
 2399|       |    parser->m_eventEndPtr = parser->m_bufferPtr;
 2400|       |    return result;
 2401|       |  }
 2402|       |#endif /* XML_CONTEXT_BYTES == 0 */
 2403|  12.0k|  void *buff = XML_GetBuffer(parser, len);
 2404|  12.0k|  if (buff == NULL)
  ------------------
  |  Branch (2404:7): [True: 0, False: 12.0k]
  ------------------
 2405|      0|    return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2406|  12.0k|  if (len > 0) {
  ------------------
  |  Branch (2406:7): [True: 12.0k, False: 0]
  ------------------
 2407|  12.0k|    assert(s != NULL); // make sure s==NULL && len!=0 was rejected above
  ------------------
  |  Branch (2407:5): [True: 0, False: 12.0k]
  |  Branch (2407:5): [True: 12.0k, False: 0]
  ------------------
 2408|  12.0k|    memcpy(buff, s, len);
 2409|  12.0k|  }
 2410|  12.0k|  return XML_ParseBuffer(parser, len, isFinal);
 2411|  12.0k|}
XML_ParseBuffer:
 2414|  12.0k|XML_ParseBuffer(XML_Parser parser, int len, int isFinal) {
 2415|  12.0k|  const char *start;
 2416|  12.0k|  enum XML_Status result = XML_STATUS_OK;
  ------------------
  |  |   83|  12.0k|#  define XML_STATUS_OK XML_STATUS_OK
  ------------------
 2417|       |
 2418|  12.0k|  if ((parser == NULL) || isCalledFromInsideHandler(parser))
  ------------------
  |  Branch (2418:7): [True: 0, False: 12.0k]
  |  Branch (2418:27): [True: 0, False: 12.0k]
  ------------------
 2419|      0|    return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2420|       |
 2421|  12.0k|  if (len < 0) {
  ------------------
  |  Branch (2421:7): [True: 0, False: 12.0k]
  ------------------
 2422|      0|    parser->m_errorCode = XML_ERROR_INVALID_ARGUMENT;
 2423|      0|    return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2424|      0|  }
 2425|       |
 2426|  12.0k|  switch (parser->m_parsingStatus.parsing) {
 2427|      0|  case XML_SUSPENDED:
  ------------------
  |  Branch (2427:3): [True: 0, False: 12.0k]
  ------------------
 2428|      0|    parser->m_errorCode = XML_ERROR_SUSPENDED;
 2429|      0|    return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2430|      0|  case XML_FINISHED:
  ------------------
  |  Branch (2430:3): [True: 0, False: 12.0k]
  ------------------
 2431|      0|    parser->m_errorCode = XML_ERROR_FINISHED;
 2432|      0|    return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2433|      0|  case XML_INITIALIZED:
  ------------------
  |  Branch (2433:3): [True: 0, False: 12.0k]
  ------------------
 2434|       |    /* Has someone called XML_GetBuffer successfully before? */
 2435|      0|    if (! parser->m_bufferPtr) {
  ------------------
  |  Branch (2435:9): [True: 0, False: 0]
  ------------------
 2436|      0|      parser->m_errorCode = XML_ERROR_NO_BUFFER;
 2437|      0|      return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2438|      0|    }
 2439|       |
 2440|      0|    if (parser->m_parentParser == NULL && ! startParsing(parser)) {
  ------------------
  |  Branch (2440:9): [True: 0, False: 0]
  |  Branch (2440:43): [True: 0, False: 0]
  ------------------
 2441|      0|      parser->m_errorCode = XML_ERROR_NO_MEMORY;
 2442|      0|      return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2443|      0|    }
 2444|      0|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 2445|  12.0k|  default:
  ------------------
  |  Branch (2445:3): [True: 12.0k, False: 0]
  ------------------
 2446|  12.0k|    parser->m_parsingStatus.parsing = XML_PARSING;
 2447|  12.0k|  }
 2448|       |
 2449|  12.0k|  if (len > EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_bufferEnd)) {
  ------------------
  |  |  229|  12.0k|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 12.0k, False: 0]
  |  |  |  Branch (229:44): [True: 12.0k, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2449:7): [True: 0, False: 12.0k]
  ------------------
 2450|      0|    parser->m_errorCode = XML_ERROR_INVALID_ARGUMENT;
 2451|      0|    return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2452|      0|  }
 2453|       |
 2454|       |  // Detect and avoid integer overflow
 2455|  12.0k|  if ((uint64_t)len > UINT64_MAX - parser->m_parseEndByteIndex) {
  ------------------
  |  Branch (2455:7): [True: 0, False: 12.0k]
  ------------------
 2456|      0|    parser->m_errorCode = XML_ERROR_NO_MEMORY;
 2457|      0|    parser->m_eventPtr = parser->m_eventEndPtr = NULL;
 2458|      0|    parser->m_processor = errorProcessor;
 2459|      0|    return XML_STATUS_ERROR;
  ------------------
  |  |   81|      0|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2460|      0|  }
 2461|       |
 2462|  12.0k|  start = parser->m_bufferPtr;
 2463|  12.0k|  parser->m_positionPtr = start;
 2464|  12.0k|  parser->m_bufferEnd += len;
 2465|  12.0k|  parser->m_parseEndPtr = parser->m_bufferEnd;
 2466|  12.0k|  parser->m_parseEndByteIndex += len;
 2467|  12.0k|  parser->m_parsingStatus.finalBuffer = (XML_Bool)isFinal;
 2468|       |
 2469|  12.0k|  parser->m_errorCode = callProcessor(parser, start, parser->m_parseEndPtr,
 2470|  12.0k|                                      &parser->m_bufferPtr);
 2471|       |
 2472|  12.0k|  if (parser->m_errorCode != XML_ERROR_NONE) {
  ------------------
  |  Branch (2472:7): [True: 11.8k, False: 251]
  ------------------
 2473|  11.8k|    parser->m_eventEndPtr = parser->m_eventPtr;
 2474|  11.8k|    parser->m_processor = errorProcessor;
 2475|  11.8k|    return XML_STATUS_ERROR;
  ------------------
  |  |   81|  11.8k|#  define XML_STATUS_ERROR XML_STATUS_ERROR
  ------------------
 2476|  11.8k|  } else {
 2477|    251|    switch (parser->m_parsingStatus.parsing) {
 2478|      0|    case XML_SUSPENDED:
  ------------------
  |  Branch (2478:5): [True: 0, False: 251]
  ------------------
 2479|      0|      result = XML_STATUS_SUSPENDED;
  ------------------
  |  |   85|      0|#  define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED
  ------------------
 2480|      0|      break;
 2481|      0|    case XML_INITIALIZED:
  ------------------
  |  Branch (2481:5): [True: 0, False: 251]
  ------------------
 2482|    251|    case XML_PARSING:
  ------------------
  |  Branch (2482:5): [True: 251, False: 0]
  ------------------
 2483|    251|      if (isFinal) {
  ------------------
  |  Branch (2483:11): [True: 251, False: 0]
  ------------------
 2484|    251|        parser->m_parsingStatus.parsing = XML_FINISHED;
 2485|    251|        return result;
 2486|    251|      }
 2487|      0|      break;
 2488|      0|    default:; /* should not happen */
  ------------------
  |  Branch (2488:5): [True: 0, False: 251]
  ------------------
 2489|    251|    }
 2490|    251|  }
 2491|       |
 2492|      0|  XmlUpdatePosition(parser->m_encoding, parser->m_positionPtr,
  ------------------
  |  |  269|      0|    (((enc)->updatePosition)(enc, ptr, end, pos))
  ------------------
 2493|      0|                    parser->m_bufferPtr, &parser->m_position);
 2494|      0|  parser->m_positionPtr = parser->m_bufferPtr;
 2495|      0|  return result;
 2496|  12.0k|}
XML_GetBuffer:
 2522|  12.0k|XML_GetBuffer(XML_Parser parser, int len) {
 2523|  12.0k|  if ((parser == NULL) || isCalledFromInsideHandler(parser))
  ------------------
  |  Branch (2523:7): [True: 0, False: 12.0k]
  |  Branch (2523:27): [True: 0, False: 12.0k]
  ------------------
 2524|      0|    return NULL;
 2525|  12.0k|  if (len < 0) {
  ------------------
  |  Branch (2525:7): [True: 0, False: 12.0k]
  ------------------
 2526|      0|    parser->m_errorCode = XML_ERROR_NO_MEMORY;
 2527|      0|    return NULL;
 2528|      0|  }
 2529|  12.0k|  switch (parser->m_parsingStatus.parsing) {
 2530|      0|  case XML_SUSPENDED:
  ------------------
  |  Branch (2530:3): [True: 0, False: 12.0k]
  ------------------
 2531|      0|    parser->m_errorCode = XML_ERROR_SUSPENDED;
 2532|      0|    return NULL;
 2533|      0|  case XML_FINISHED:
  ------------------
  |  Branch (2533:3): [True: 0, False: 12.0k]
  ------------------
 2534|      0|    parser->m_errorCode = XML_ERROR_FINISHED;
 2535|      0|    return NULL;
 2536|  12.0k|  default:;
  ------------------
  |  Branch (2536:3): [True: 12.0k, False: 0]
  ------------------
 2537|  12.0k|  }
 2538|       |
 2539|       |  // whether or not the request succeeds, `len` seems to be the app's preferred
 2540|       |  // buffer fill size; remember it.
 2541|  12.0k|  parser->m_lastBufferRequestSize = len;
 2542|  12.0k|  if (len > EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_bufferEnd)
  ------------------
  |  |  229|  24.1k|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 0, False: 12.0k]
  |  |  |  Branch (229:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  |  Branch (2542:7): [True: 12.0k, False: 0]
  ------------------
 2543|  12.0k|      || parser->m_buffer == NULL) {
  ------------------
  |  Branch (2543:10): [True: 0, False: 0]
  ------------------
 2544|       |    /* Do not invoke signed arithmetic overflow: */
 2545|  12.0k|    int neededSize = (int)((unsigned)len
 2546|  12.0k|                           + (unsigned)EXPAT_SAFE_PTR_DIFF(
  ------------------
  |  |  229|  12.0k|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 0, False: 12.0k]
  |  |  |  Branch (229:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2547|  12.0k|                               parser->m_bufferEnd, parser->m_bufferPtr));
 2548|  12.0k|    if (neededSize < 0) {
  ------------------
  |  Branch (2548:9): [True: 0, False: 12.0k]
  ------------------
 2549|      0|      parser->m_errorCode = XML_ERROR_NO_MEMORY;
 2550|      0|      return NULL;
 2551|      0|    }
 2552|  12.0k|#if XML_CONTEXT_BYTES > 0
 2553|  12.0k|    const int parsed
 2554|  12.0k|        = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer);
  ------------------
  |  |  229|  12.0k|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 0, False: 12.0k]
  |  |  |  Branch (229:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2555|  12.0k|    int keep = parsed;
 2556|  12.0k|    if (keep > XML_CONTEXT_BYTES)
  ------------------
  |  |  119|  12.0k|#define XML_CONTEXT_BYTES 1024
  ------------------
  |  Branch (2556:9): [True: 0, False: 12.0k]
  ------------------
 2557|      0|      keep = XML_CONTEXT_BYTES;
  ------------------
  |  |  119|      0|#define XML_CONTEXT_BYTES 1024
  ------------------
 2558|       |    /* Detect and prevent integer overflow */
 2559|  12.0k|    if (keep > INT_MAX - neededSize) {
  ------------------
  |  Branch (2559:9): [True: 0, False: 12.0k]
  ------------------
 2560|      0|      parser->m_errorCode = XML_ERROR_NO_MEMORY;
 2561|      0|      return NULL;
 2562|      0|    }
 2563|       |#else
 2564|       |    int keep = 0;
 2565|       |#endif /* XML_CONTEXT_BYTES > 0 */
 2566|  12.0k|    neededSize += keep;
 2567|  12.0k|    if (parser->m_buffer && parser->m_bufferPtr
  ------------------
  |  Branch (2567:9): [True: 0, False: 12.0k]
  |  Branch (2567:29): [True: 0, False: 0]
  ------------------
 2568|      0|        && neededSize
  ------------------
  |  Branch (2568:12): [True: 0, False: 0]
  ------------------
 2569|      0|               <= EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_buffer)) {
  ------------------
  |  |  229|      0|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 0, False: 0]
  |  |  |  Branch (229:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2570|      0|#if XML_CONTEXT_BYTES > 0
 2571|      0|      if (keep < parsed) {
  ------------------
  |  Branch (2571:11): [True: 0, False: 0]
  ------------------
 2572|      0|        int offset = parsed - keep;
 2573|       |        /* The buffer pointers cannot be NULL here; we have at least some bytes
 2574|       |         * in the buffer */
 2575|      0|        memmove(parser->m_buffer, &parser->m_buffer[offset],
 2576|      0|                parser->m_bufferEnd - parser->m_bufferPtr + keep);
 2577|      0|        parser->m_bufferEnd -= offset;
 2578|      0|        parser->m_bufferPtr -= offset;
 2579|      0|      }
 2580|       |#else
 2581|       |      memmove(parser->m_buffer, parser->m_bufferPtr,
 2582|       |              EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr));
 2583|       |      parser->m_bufferEnd
 2584|       |          = parser->m_buffer
 2585|       |            + EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr);
 2586|       |      parser->m_bufferPtr = parser->m_buffer;
 2587|       |#endif /* XML_CONTEXT_BYTES > 0 */
 2588|  12.0k|    } else {
 2589|  12.0k|      int bufferSize
 2590|  12.0k|          = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_buffer);
  ------------------
  |  |  229|  12.0k|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 0, False: 12.0k]
  |  |  |  Branch (229:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2591|  12.0k|      if (bufferSize == 0)
  ------------------
  |  Branch (2591:11): [True: 12.0k, False: 0]
  ------------------
 2592|  12.0k|        bufferSize = INIT_BUFFER_SIZE;
  ------------------
  |  |  258|  12.0k|#define INIT_BUFFER_SIZE 1024
  ------------------
 2593|  12.0k|      do {
 2594|       |        /* Do not invoke signed arithmetic overflow: */
 2595|  12.0k|        bufferSize = (int)(2U * (unsigned)bufferSize);
 2596|  12.0k|      } while (bufferSize < neededSize && bufferSize > 0);
  ------------------
  |  Branch (2596:16): [True: 0, False: 12.0k]
  |  Branch (2596:43): [True: 0, False: 0]
  ------------------
 2597|  12.0k|      if (bufferSize <= 0) {
  ------------------
  |  Branch (2597:11): [True: 0, False: 12.0k]
  ------------------
 2598|      0|        parser->m_errorCode = XML_ERROR_NO_MEMORY;
 2599|      0|        return NULL;
 2600|      0|      }
 2601|       |      // NOTE: We are avoiding MALLOC(..) here to leave limiting
 2602|       |      //       the input size to the application using Expat.
 2603|  12.0k|      char *const newBuf = parser->m_mem.malloc_fcn(bufferSize);
 2604|  12.0k|      if (newBuf == NULL) {
  ------------------
  |  Branch (2604:11): [True: 0, False: 12.0k]
  ------------------
 2605|      0|        parser->m_errorCode = XML_ERROR_NO_MEMORY;
 2606|      0|        return NULL;
 2607|      0|      }
 2608|  12.0k|      setParserBuffer(parser, newBuf, bufferSize, keep);
 2609|  12.0k|    }
 2610|  12.0k|    parser->m_eventPtr = parser->m_eventEndPtr = NULL;
 2611|  12.0k|    parser->m_positionPtr = NULL;
 2612|  12.0k|  }
 2613|  12.0k|  return parser->m_bufferEnd;
 2614|  12.0k|}
xmlparse.c:parserCreate:
 1301|  12.0k|             DTD *dtd, XML_Parser parentParser) {
 1302|  12.0k|  XML_Parser parser = NULL;
 1303|       |
 1304|  12.0k|#if XML_GE == 1
 1305|  12.0k|  const size_t increase
 1306|  12.0k|      = sizeof(size_t) + EXPAT_MALLOC_PADDING + sizeof(struct XML_ParserStruct);
  ------------------
  |  |  124|  12.0k|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|  12.0k|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
 1307|       |
 1308|  12.0k|  if (parentParser != NULL) {
  ------------------
  |  Branch (1308:7): [True: 0, False: 12.0k]
  ------------------
 1309|      0|    const XML_Parser rootParser = getRootParserOf(parentParser, NULL);
 1310|      0|    if (! expat_heap_increase_tolerable(rootParser, increase, __LINE__)) {
  ------------------
  |  Branch (1310:9): [True: 0, False: 0]
  ------------------
 1311|      0|      return NULL;
 1312|      0|    }
 1313|      0|  }
 1314|       |#else
 1315|       |  UNUSED_P(parentParser);
 1316|       |#endif
 1317|       |
 1318|  12.0k|  if (memsuite) {
  ------------------
  |  Branch (1318:7): [True: 0, False: 12.0k]
  ------------------
 1319|      0|    XML_Memory_Handling_Suite *mtemp;
 1320|      0|#if XML_GE == 1
 1321|      0|    void *const sizeAndParser
 1322|      0|        = memsuite->malloc_fcn(sizeof(size_t) + EXPAT_MALLOC_PADDING
  ------------------
  |  |  124|      0|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|      0|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
 1323|      0|                               + sizeof(struct XML_ParserStruct));
 1324|      0|    if (sizeAndParser != NULL) {
  ------------------
  |  Branch (1324:9): [True: 0, False: 0]
  ------------------
 1325|      0|      *(size_t *)sizeAndParser = sizeof(struct XML_ParserStruct);
 1326|      0|      parser = (XML_Parser)((char *)sizeAndParser + sizeof(size_t)
 1327|      0|                            + EXPAT_MALLOC_PADDING);
  ------------------
  |  |  124|      0|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|      0|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
 1328|       |#else
 1329|       |    parser = memsuite->malloc_fcn(sizeof(struct XML_ParserStruct));
 1330|       |    if (parser != NULL) {
 1331|       |#endif
 1332|      0|      mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem);
 1333|      0|      mtemp->malloc_fcn = memsuite->malloc_fcn;
 1334|      0|      mtemp->realloc_fcn = memsuite->realloc_fcn;
 1335|      0|      mtemp->free_fcn = memsuite->free_fcn;
 1336|      0|    }
 1337|  12.0k|  } else {
 1338|  12.0k|    XML_Memory_Handling_Suite *mtemp;
 1339|  12.0k|#if XML_GE == 1
 1340|  12.0k|    void *const sizeAndParser = malloc(sizeof(size_t) + EXPAT_MALLOC_PADDING
  ------------------
  |  |  124|  12.0k|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|  12.0k|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
 1341|  12.0k|                                       + sizeof(struct XML_ParserStruct));
 1342|  12.0k|    if (sizeAndParser != NULL) {
  ------------------
  |  Branch (1342:9): [True: 12.0k, False: 0]
  ------------------
 1343|  12.0k|      *(size_t *)sizeAndParser = sizeof(struct XML_ParserStruct);
 1344|  12.0k|      parser = (XML_Parser)((char *)sizeAndParser + sizeof(size_t)
 1345|  12.0k|                            + EXPAT_MALLOC_PADDING);
  ------------------
  |  |  124|  12.0k|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|  12.0k|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
 1346|       |#else
 1347|       |    parser = malloc(sizeof(struct XML_ParserStruct));
 1348|       |    if (parser != NULL) {
 1349|       |#endif
 1350|  12.0k|      mtemp = (XML_Memory_Handling_Suite *)&(parser->m_mem);
 1351|  12.0k|      mtemp->malloc_fcn = malloc;
 1352|  12.0k|      mtemp->realloc_fcn = realloc;
 1353|  12.0k|      mtemp->free_fcn = free;
 1354|  12.0k|    }
 1355|  12.0k|  } // cppcheck-suppress[memleak symbolName=sizeAndParser] // Cppcheck >=2.18.0
 1356|       |
 1357|  12.0k|  if (! parser)
  ------------------
  |  Branch (1357:7): [True: 0, False: 12.0k]
  ------------------
 1358|      0|    return parser;
 1359|       |
 1360|  12.0k|#if XML_GE == 1
 1361|       |  // Initialize .m_alloc_tracker
 1362|  12.0k|  memset(&parser->m_alloc_tracker, 0, sizeof(MALLOC_TRACKER));
 1363|  12.0k|  if (parentParser == NULL) {
  ------------------
  |  Branch (1363:7): [True: 12.0k, False: 0]
  ------------------
 1364|  12.0k|    parser->m_alloc_tracker.debugLevel
 1365|  12.0k|        = getDebugLevel("EXPAT_MALLOC_DEBUG", 0u);
 1366|  12.0k|    parser->m_alloc_tracker.maximumAmplificationFactor
 1367|  12.0k|        = EXPAT_ALLOC_TRACKER_MAXIMUM_AMPLIFICATION_DEFAULT;
  ------------------
  |  |  113|  12.0k|#  define EXPAT_ALLOC_TRACKER_MAXIMUM_AMPLIFICATION_DEFAULT 100.0f
  ------------------
 1368|  12.0k|    parser->m_alloc_tracker.activationThresholdBytes
 1369|  12.0k|        = EXPAT_ALLOC_TRACKER_ACTIVATION_THRESHOLD_DEFAULT;
  ------------------
  |  |  115|  12.0k|    67108864 // 64 MiB, 2^26
  ------------------
 1370|       |
 1371|       |    // NOTE: This initialization needs to come this early because these fields
 1372|       |    //       are read by allocation tracking code
 1373|  12.0k|    parser->m_parentParser = NULL;
 1374|  12.0k|    parser->m_accounting.countBytesDirect = 0;
 1375|  12.0k|  } else {
 1376|      0|    parser->m_parentParser = parentParser;
 1377|      0|  }
 1378|       |
 1379|       |  // Record XML_ParserStruct allocation we did a few lines up before
 1380|  12.0k|  const XML_Parser rootParser = getRootParserOf(parser, NULL);
 1381|  12.0k|  assert(rootParser->m_parentParser == NULL);
  ------------------
  |  Branch (1381:3): [True: 0, False: 12.0k]
  |  Branch (1381:3): [True: 12.0k, False: 0]
  ------------------
 1382|  12.0k|  assert(SIZE_MAX - rootParser->m_alloc_tracker.bytesAllocated >= increase);
  ------------------
  |  Branch (1382:3): [True: 0, False: 12.0k]
  |  Branch (1382:3): [True: 12.0k, False: 0]
  ------------------
 1383|  12.0k|  rootParser->m_alloc_tracker.bytesAllocated += increase;
 1384|       |
 1385|       |  // Report on allocation
 1386|  12.0k|  if (rootParser->m_alloc_tracker.debugLevel >= 2) {
  ------------------
  |  Branch (1386:7): [True: 0, False: 12.0k]
  ------------------
 1387|      0|    if (rootParser->m_alloc_tracker.bytesAllocated
  ------------------
  |  Branch (1387:9): [True: 0, False: 0]
  ------------------
 1388|      0|        > rootParser->m_alloc_tracker.peakBytesAllocated) {
 1389|      0|      rootParser->m_alloc_tracker.peakBytesAllocated
 1390|      0|          = rootParser->m_alloc_tracker.bytesAllocated;
 1391|      0|    }
 1392|       |
 1393|      0|    expat_heap_stat(rootParser, '+', increase,
 1394|      0|                    rootParser->m_alloc_tracker.bytesAllocated,
 1395|      0|                    rootParser->m_alloc_tracker.peakBytesAllocated, __LINE__);
 1396|      0|  }
 1397|       |#else
 1398|       |  parser->m_parentParser = NULL;
 1399|       |#endif // XML_GE == 1
 1400|       |
 1401|  12.0k|  parser->m_buffer = NULL;
 1402|  12.0k|  parser->m_bufferLim = NULL;
 1403|       |
 1404|  12.0k|  parser->m_attsSize = INIT_ATTS_SIZE;
  ------------------
  |  |  255|  12.0k|#define INIT_ATTS_SIZE 16
  ------------------
 1405|  12.0k|  parser->m_atts = MALLOC(parser, parser->m_attsSize * sizeof(ATTRIBUTE));
  ------------------
  |  |  835|  12.0k|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 1406|  12.0k|  if (parser->m_atts == NULL) {
  ------------------
  |  Branch (1406:7): [True: 0, False: 12.0k]
  ------------------
 1407|      0|    FREE(parser, parser);
  ------------------
  |  |  837|      0|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1408|      0|    return NULL;
 1409|      0|  }
 1410|  12.0k|  parser->m_dataBuf = MALLOC(parser, INIT_DATA_BUF_SIZE * sizeof(XML_Char));
  ------------------
  |  |  835|  12.0k|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 1411|  12.0k|  if (parser->m_dataBuf == NULL) {
  ------------------
  |  Branch (1411:7): [True: 0, False: 12.0k]
  ------------------
 1412|      0|    FREE(parser, parser->m_atts);
  ------------------
  |  |  837|      0|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1413|      0|    FREE(parser, parser);
  ------------------
  |  |  837|      0|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1414|      0|    return NULL;
 1415|      0|  }
 1416|  12.0k|  parser->m_dataBufEnd = parser->m_dataBuf + INIT_DATA_BUF_SIZE;
  ------------------
  |  |  254|  12.0k|#define INIT_DATA_BUF_SIZE 1024
  ------------------
 1417|       |
 1418|  12.0k|  if (dtd)
  ------------------
  |  Branch (1418:7): [True: 0, False: 12.0k]
  ------------------
 1419|      0|    parser->m_dtd = dtd;
 1420|  12.0k|  else {
 1421|  12.0k|    parser->m_dtd = dtdCreate(parser);
 1422|  12.0k|    if (parser->m_dtd == NULL) {
  ------------------
  |  Branch (1422:9): [True: 0, False: 12.0k]
  ------------------
 1423|      0|      FREE(parser, parser->m_dataBuf);
  ------------------
  |  |  837|      0|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1424|      0|      FREE(parser, parser->m_atts);
  ------------------
  |  |  837|      0|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1425|      0|      FREE(parser, parser);
  ------------------
  |  |  837|      0|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1426|      0|      return NULL;
 1427|      0|    }
 1428|  12.0k|  }
 1429|       |
 1430|  12.0k|  parser->m_freeBindingList = NULL;
 1431|  12.0k|  parser->m_freeTagList = NULL;
 1432|  12.0k|  parser->m_freeEntities = NULL;
 1433|       |
 1434|  12.0k|  parser->m_groupSize = 0;
 1435|  12.0k|  parser->m_groupConnector = NULL;
 1436|       |
 1437|  12.0k|  parser->m_unknownEncodingHandler = NULL;
 1438|  12.0k|  parser->m_unknownEncodingHandlerData = NULL;
 1439|       |
 1440|  12.0k|  parser->m_namespaceSeparator = ASCII_EXCL;
  ------------------
  |  |  105|  12.0k|#define ASCII_EXCL 0x21
  ------------------
 1441|  12.0k|  parser->m_ns = XML_FALSE;
  ------------------
  |  |   64|  12.0k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 1442|  12.0k|  parser->m_ns_triplets = XML_FALSE;
  ------------------
  |  |   64|  12.0k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 1443|       |
 1444|  12.0k|  parser->m_nsAtts = NULL;
 1445|  12.0k|  parser->m_nsAttsVersion = 0;
 1446|  12.0k|  parser->m_nsAttsPower = 0;
 1447|       |
 1448|  12.0k|  parser->m_protocolEncodingName = NULL;
 1449|       |
 1450|  12.0k|  poolInit(&parser->m_tempPool, parser);
 1451|  12.0k|  poolInit(&parser->m_temp2Pool, parser);
 1452|  12.0k|  parserInit(parser, encodingName);
 1453|       |
 1454|  12.0k|  if (encodingName && ! parser->m_protocolEncodingName) {
  ------------------
  |  Branch (1454:7): [True: 12.0k, False: 0]
  |  Branch (1454:23): [True: 0, False: 12.0k]
  ------------------
 1455|      0|    if (dtd) {
  ------------------
  |  Branch (1455:9): [True: 0, False: 0]
  ------------------
 1456|       |      // We need to stop the upcoming call to XML_ParserFree from happily
 1457|       |      // destroying parser->m_dtd because the DTD is shared with the parent
 1458|       |      // parser and the only guard that keeps XML_ParserFree from destroying
 1459|       |      // parser->m_dtd is parser->m_isParamEntity but it will be set to
 1460|       |      // XML_TRUE only later in XML_ExternalEntityParserCreate (or not at all).
 1461|      0|      parser->m_dtd = NULL;
 1462|      0|    }
 1463|      0|    XML_ParserFree(parser);
 1464|      0|    return NULL;
 1465|      0|  }
 1466|       |
 1467|  12.0k|  if (nameSep) {
  ------------------
  |  Branch (1467:7): [True: 4.76k, False: 7.30k]
  ------------------
 1468|  4.76k|    parser->m_ns = XML_TRUE;
  ------------------
  |  |   63|  4.76k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 1469|  4.76k|    parser->m_internalEncoding = XmlGetInternalEncodingNS();
  ------------------
  |  |  192|  4.76k|#  define XmlGetInternalEncodingNS XmlGetUtf8InternalEncodingNS
  ------------------
 1470|  4.76k|    parser->m_namespaceSeparator = *nameSep;
 1471|  7.30k|  } else {
 1472|  7.30k|    parser->m_internalEncoding = XmlGetInternalEncoding();
  ------------------
  |  |  191|  7.30k|#  define XmlGetInternalEncoding XmlGetUtf8InternalEncoding
  ------------------
 1473|  7.30k|  }
 1474|       |
 1475|  12.0k|  return parser;
 1476|  12.0k|}
xmlparse.c:expat_heap_increase_tolerable:
  861|   217k|                              int sourceLine) {
  862|   217k|  assert(rootParser != NULL);
  ------------------
  |  Branch (862:3): [True: 0, False: 217k]
  |  Branch (862:3): [True: 217k, False: 0]
  ------------------
  863|   217k|  assert(increase > 0);
  ------------------
  |  Branch (863:3): [True: 0, False: 217k]
  |  Branch (863:3): [True: 217k, False: 0]
  ------------------
  864|       |
  865|   217k|  size_t newTotal = 0;
  866|   217k|  bool tolerable = true;
  867|       |
  868|       |  // Detect integer overflow
  869|   217k|  if (SIZE_MAX - rootParser->m_alloc_tracker.bytesAllocated < increase) {
  ------------------
  |  Branch (869:7): [True: 0, False: 217k]
  ------------------
  870|      0|    tolerable = false;
  871|   217k|  } else {
  872|   217k|    newTotal = rootParser->m_alloc_tracker.bytesAllocated + increase;
  873|       |
  874|   217k|    if (newTotal >= rootParser->m_alloc_tracker.activationThresholdBytes) {
  ------------------
  |  Branch (874:9): [True: 0, False: 217k]
  ------------------
  875|      0|      assert(newTotal > 0);
  ------------------
  |  Branch (875:7): [True: 0, False: 0]
  |  Branch (875:7): [True: 0, False: 0]
  ------------------
  876|       |      // NOTE: This can be +infinity when dividing by zero but not -nan
  877|      0|      const float amplification
  878|      0|          = (float)newTotal / (float)rootParser->m_accounting.countBytesDirect;
  879|      0|      if (amplification
  ------------------
  |  Branch (879:11): [True: 0, False: 0]
  ------------------
  880|      0|          > rootParser->m_alloc_tracker.maximumAmplificationFactor) {
  881|      0|        tolerable = false;
  882|      0|      }
  883|      0|    }
  884|   217k|  }
  885|       |
  886|   217k|  if (! tolerable && (rootParser->m_alloc_tracker.debugLevel >= 1)) {
  ------------------
  |  Branch (886:7): [True: 0, False: 217k]
  |  Branch (886:22): [True: 0, False: 0]
  ------------------
  887|      0|    expat_heap_stat(rootParser, '+', increase, newTotal, newTotal, sourceLine);
  888|      0|  }
  889|       |
  890|   217k|  return tolerable;
  891|   217k|}
xmlparse.c:getDebugLevel:
 9689|  48.2k|getDebugLevel(const char *variableName, unsigned long defaultDebugLevel) {
 9690|  48.2k|  const char *const valueOrNull = getenv(variableName);
 9691|  48.2k|  if (valueOrNull == NULL) {
  ------------------
  |  Branch (9691:7): [True: 48.2k, False: 0]
  ------------------
 9692|  48.2k|    return defaultDebugLevel;
 9693|  48.2k|  }
 9694|      0|  const char *const value = valueOrNull;
 9695|       |
 9696|      0|  errno = 0;
 9697|      0|  char *afterValue = NULL;
 9698|      0|  unsigned long debugLevel = strtoul(value, &afterValue, 10);
 9699|      0|  if ((errno != 0) || (afterValue == value) || (afterValue[0] != '\0')) {
  ------------------
  |  Branch (9699:7): [True: 0, False: 0]
  |  Branch (9699:23): [True: 0, False: 0]
  |  Branch (9699:48): [True: 0, False: 0]
  ------------------
 9700|      0|    errno = 0;
 9701|      0|    return defaultDebugLevel;
 9702|      0|  }
 9703|       |
 9704|      0|  return debugLevel;
 9705|      0|}
xmlparse.c:expat_malloc:
  898|   214k|expat_malloc(XML_Parser parser, size_t size, int sourceLine) {
  899|       |  // Detect integer overflow
  900|   214k|  if (SIZE_MAX - size < sizeof(size_t) + EXPAT_MALLOC_PADDING) {
  ------------------
  |  |  124|   214k|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|   214k|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
  |  Branch (900:7): [True: 0, False: 214k]
  ------------------
  901|      0|    return NULL;
  902|      0|  }
  903|       |
  904|   214k|  const XML_Parser rootParser = getRootParserOf(parser, NULL);
  905|   214k|  assert(rootParser->m_parentParser == NULL);
  ------------------
  |  Branch (905:3): [True: 0, False: 214k]
  |  Branch (905:3): [True: 214k, False: 0]
  ------------------
  906|       |
  907|   214k|  const size_t bytesToAllocate = sizeof(size_t) + EXPAT_MALLOC_PADDING + size;
  ------------------
  |  |  124|   214k|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|   214k|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
  908|       |
  909|   214k|  if (SIZE_MAX - rootParser->m_alloc_tracker.bytesAllocated < bytesToAllocate) {
  ------------------
  |  Branch (909:7): [True: 0, False: 214k]
  ------------------
  910|      0|    return NULL; // i.e. signal integer overflow as out-of-memory
  911|      0|  }
  912|       |
  913|   214k|  if (! expat_heap_increase_tolerable(rootParser, bytesToAllocate,
  ------------------
  |  Branch (913:7): [True: 0, False: 214k]
  ------------------
  914|   214k|                                      sourceLine)) {
  915|      0|    return NULL; // i.e. signal violation as out-of-memory
  916|      0|  }
  917|       |
  918|       |  // Actually allocate
  919|   214k|  void *const mallocedPtr = parser->m_mem.malloc_fcn(bytesToAllocate);
  920|       |
  921|   214k|  if (mallocedPtr == NULL) {
  ------------------
  |  Branch (921:7): [True: 0, False: 214k]
  ------------------
  922|      0|    return NULL;
  923|      0|  }
  924|       |
  925|       |  // Update in-block recorded size
  926|   214k|  *(size_t *)mallocedPtr = size;
  927|       |
  928|       |  // Update accounting
  929|   214k|  rootParser->m_alloc_tracker.bytesAllocated += bytesToAllocate;
  930|       |
  931|       |  // Report as needed
  932|   214k|  if (rootParser->m_alloc_tracker.debugLevel >= 2) {
  ------------------
  |  Branch (932:7): [True: 0, False: 214k]
  ------------------
  933|      0|    if (rootParser->m_alloc_tracker.bytesAllocated
  ------------------
  |  Branch (933:9): [True: 0, False: 0]
  ------------------
  934|      0|        > rootParser->m_alloc_tracker.peakBytesAllocated) {
  935|      0|      rootParser->m_alloc_tracker.peakBytesAllocated
  936|      0|          = rootParser->m_alloc_tracker.bytesAllocated;
  937|      0|    }
  938|      0|    expat_heap_stat(rootParser, '+', bytesToAllocate,
  939|      0|                    rootParser->m_alloc_tracker.bytesAllocated,
  940|      0|                    rootParser->m_alloc_tracker.peakBytesAllocated, sourceLine);
  941|      0|  }
  942|       |
  943|   214k|  return (char *)mallocedPtr + sizeof(size_t) + EXPAT_MALLOC_PADDING;
  ------------------
  |  |  124|   214k|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|   214k|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
  944|   214k|}
xmlparse.c:dtdCreate:
 7864|  12.0k|dtdCreate(XML_Parser parser) {
 7865|  12.0k|  DTD *p = MALLOC(parser, sizeof(DTD));
  ------------------
  |  |  835|  12.0k|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 7866|  12.0k|  if (p == NULL)
  ------------------
  |  Branch (7866:7): [True: 0, False: 12.0k]
  ------------------
 7867|      0|    return p;
 7868|  12.0k|  poolInit(&(p->pool), parser);
 7869|  12.0k|  poolInit(&(p->entityValuePool), parser);
 7870|  12.0k|  hashTableInit(&(p->generalEntities), parser);
 7871|  12.0k|  hashTableInit(&(p->elementTypes), parser);
 7872|  12.0k|  hashTableInit(&(p->attributeIds), parser);
 7873|  12.0k|  hashTableInit(&(p->prefixes), parser);
 7874|  12.0k|#ifdef XML_DTD
 7875|  12.0k|  p->paramEntityRead = false;
 7876|  12.0k|  hashTableInit(&(p->paramEntities), parser);
 7877|  12.0k|#endif /* XML_DTD */
 7878|  12.0k|  p->defaultPrefix.name = NULL;
 7879|  12.0k|  p->defaultPrefix.binding = NULL;
 7880|       |
 7881|  12.0k|  p->in_eldecl = false;
 7882|  12.0k|  p->scaffIndex = NULL;
 7883|  12.0k|  p->scaffIndexSize = 0;
 7884|  12.0k|  p->scaffold = NULL;
 7885|  12.0k|  p->scaffLevel = 0;
 7886|  12.0k|  p->scaffSize = 0;
 7887|  12.0k|  p->scaffCount = 0;
 7888|  12.0k|  p->contentStringLen = 0;
 7889|       |
 7890|  12.0k|  p->keepProcessing = XML_TRUE;
  ------------------
  |  |   63|  12.0k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 7891|  12.0k|  p->hasParamEntityRefs = XML_FALSE;
  ------------------
  |  |   64|  12.0k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7892|  12.0k|  p->standalone = XML_FALSE;
  ------------------
  |  |   64|  12.0k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7893|  12.0k|  return p;
 7894|  12.0k|}
xmlparse.c:hashTableInit:
 8379|  75.7k|hashTableInit(HASH_TABLE *p, XML_Parser parser) {
 8380|  75.7k|  p->power = 0;
 8381|  75.7k|  p->size = 0;
 8382|  75.7k|  p->used = 0;
 8383|       |  p->v = NULL;
 8384|  75.7k|  p->parser = parser;
 8385|  75.7k|}
xmlparse.c:poolInit:
 8404|  48.2k|poolInit(STRING_POOL *pool, XML_Parser parser) {
 8405|  48.2k|  pool->blocks = NULL;
 8406|  48.2k|  pool->freeBlocks = NULL;
 8407|  48.2k|  pool->start = NULL;
 8408|  48.2k|  pool->ptr = NULL;
 8409|       |  pool->end = NULL;
 8410|  48.2k|  pool->parser = parser;
 8411|  48.2k|}
xmlparse.c:isCalledFromInsideHandler:
 1187|  48.2k|isCalledFromInsideHandler(XML_Parser parser) {
 1188|  48.2k|  return parser->m_handlerCallDepth > 0;
 1189|  48.2k|}
xmlparse.c:expat_free:
  951|  1.52M|expat_free(XML_Parser parser, void *ptr, int sourceLine) {
  952|  1.52M|  assert(parser != NULL);
  ------------------
  |  Branch (952:3): [True: 0, False: 1.52M]
  |  Branch (952:3): [True: 1.52M, False: 0]
  ------------------
  953|       |
  954|  1.52M|  if (ptr == NULL) {
  ------------------
  |  Branch (954:7): [True: 1.29M, False: 226k]
  ------------------
  955|  1.29M|    return;
  956|  1.29M|  }
  957|       |
  958|   226k|  const XML_Parser rootParser = getRootParserOf(parser, NULL);
  959|   226k|  assert(rootParser->m_parentParser == NULL);
  ------------------
  |  Branch (959:3): [True: 0, False: 226k]
  |  Branch (959:3): [True: 226k, False: 0]
  ------------------
  960|       |
  961|       |  // Extract size (to the eyes of malloc_fcn/realloc_fcn) and
  962|       |  // the original pointer returned by malloc/realloc
  963|   226k|  void *const mallocedPtr = (char *)ptr - EXPAT_MALLOC_PADDING - sizeof(size_t);
  ------------------
  |  |  124|   226k|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|   226k|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
  964|   226k|  const size_t bytesAllocated
  965|   226k|      = sizeof(size_t) + EXPAT_MALLOC_PADDING + *(size_t *)mallocedPtr;
  ------------------
  |  |  124|   226k|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|   226k|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
  966|       |
  967|       |  // Update accounting
  968|   226k|  assert(rootParser->m_alloc_tracker.bytesAllocated >= bytesAllocated);
  ------------------
  |  Branch (968:3): [True: 0, False: 226k]
  |  Branch (968:3): [True: 226k, False: 0]
  ------------------
  969|   226k|  rootParser->m_alloc_tracker.bytesAllocated -= bytesAllocated;
  970|       |
  971|       |  // Report as needed
  972|   226k|  if (rootParser->m_alloc_tracker.debugLevel >= 2) {
  ------------------
  |  Branch (972:7): [True: 0, False: 226k]
  ------------------
  973|      0|    expat_heap_stat(rootParser, '-', bytesAllocated,
  974|      0|                    rootParser->m_alloc_tracker.bytesAllocated,
  975|      0|                    rootParser->m_alloc_tracker.peakBytesAllocated, sourceLine);
  976|      0|  }
  977|       |
  978|       |  // NOTE: This may be freeing rootParser, so freeing has to come last
  979|   226k|  parser->m_mem.free_fcn(mallocedPtr);
  980|   226k|}
xmlparse.c:parserInit:
 1479|  12.0k|parserInit(XML_Parser parser, const XML_Char *encodingName) {
 1480|  12.0k|  parser->m_processor = prologInitProcessor;
 1481|  12.0k|  XmlPrologStateInit(&parser->m_prologState);
 1482|  12.0k|  if (encodingName != NULL) {
  ------------------
  |  Branch (1482:7): [True: 12.0k, False: 0]
  ------------------
 1483|  12.0k|    parser->m_protocolEncodingName = copyString(encodingName, parser);
 1484|  12.0k|  }
 1485|  12.0k|  parser->m_curBase = NULL;
 1486|  12.0k|  XmlInitEncoding(&parser->m_initEncoding, &parser->m_encoding, 0);
 1487|  12.0k|  parser->m_userData = NULL;
 1488|  12.0k|  parser->m_handlerArg = NULL;
 1489|  12.0k|  parser->m_startElementHandler = NULL;
 1490|  12.0k|  parser->m_endElementHandler = NULL;
 1491|  12.0k|  parser->m_characterDataHandler = NULL;
 1492|  12.0k|  parser->m_processingInstructionHandler = NULL;
 1493|  12.0k|  parser->m_commentHandler = NULL;
 1494|  12.0k|  parser->m_startCdataSectionHandler = NULL;
 1495|  12.0k|  parser->m_endCdataSectionHandler = NULL;
 1496|  12.0k|  parser->m_defaultHandler = NULL;
 1497|  12.0k|  parser->m_startDoctypeDeclHandler = NULL;
 1498|  12.0k|  parser->m_endDoctypeDeclHandler = NULL;
 1499|  12.0k|  parser->m_unparsedEntityDeclHandler = NULL;
 1500|  12.0k|  parser->m_notationDeclHandler = NULL;
 1501|  12.0k|  parser->m_startNamespaceDeclHandler = NULL;
 1502|  12.0k|  parser->m_endNamespaceDeclHandler = NULL;
 1503|  12.0k|  parser->m_notStandaloneHandler = NULL;
 1504|  12.0k|  parser->m_externalEntityRefHandler = NULL;
 1505|  12.0k|  parser->m_externalEntityRefHandlerArg = parser;
 1506|  12.0k|  parser->m_skippedEntityHandler = NULL;
 1507|  12.0k|  parser->m_elementDeclHandler = NULL;
 1508|  12.0k|  parser->m_attlistDeclHandler = NULL;
 1509|  12.0k|  parser->m_entityDeclHandler = NULL;
 1510|  12.0k|  parser->m_xmlDeclHandler = NULL;
 1511|  12.0k|  parser->m_bufferPtr = parser->m_buffer;
 1512|  12.0k|  parser->m_bufferEnd = parser->m_buffer;
 1513|  12.0k|  parser->m_parseEndByteIndex = 0;
 1514|  12.0k|  parser->m_parseEndPtr = NULL;
 1515|  12.0k|  parser->m_partialTokenBytesBefore = 0;
 1516|  12.0k|  parser->m_reparseDeferralEnabled = g_reparseDeferralEnabledDefault;
 1517|  12.0k|  parser->m_lastBufferRequestSize = 0;
 1518|  12.0k|  parser->m_declElementType = NULL;
 1519|  12.0k|  parser->m_declAttributeId = NULL;
 1520|  12.0k|  parser->m_declEntity = NULL;
 1521|  12.0k|  parser->m_doctypeName = NULL;
 1522|  12.0k|  parser->m_doctypeSysid = NULL;
 1523|  12.0k|  parser->m_doctypePubid = NULL;
 1524|  12.0k|  parser->m_declAttributeType = NULL;
 1525|  12.0k|  parser->m_declNotationName = NULL;
 1526|  12.0k|  parser->m_declNotationPublicId = NULL;
 1527|  12.0k|  parser->m_declAttributeIsCdata = false;
 1528|  12.0k|  parser->m_declAttributeIsId = false;
 1529|  12.0k|  memset(&parser->m_position, 0, sizeof(POSITION));
 1530|  12.0k|  parser->m_errorCode = XML_ERROR_NONE;
 1531|  12.0k|  parser->m_eventPtr = NULL;
 1532|  12.0k|  parser->m_eventEndPtr = NULL;
 1533|  12.0k|  parser->m_positionPtr = NULL;
 1534|  12.0k|  parser->m_openInternalEntities = NULL;
 1535|  12.0k|  parser->m_openAttributeEntities = NULL;
 1536|  12.0k|  parser->m_openValueEntities = NULL;
 1537|  12.0k|  parser->m_defaultExpandInternalEntities = XML_TRUE;
  ------------------
  |  |   63|  12.0k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 1538|  12.0k|  parser->m_tagLevel = 0;
 1539|  12.0k|  parser->m_tagStack = NULL;
 1540|  12.0k|  parser->m_inheritedBindings = NULL;
 1541|  12.0k|  parser->m_nSpecifiedAtts = 0;
 1542|  12.0k|  parser->m_unknownEncodingMem = NULL;
 1543|  12.0k|  parser->m_unknownEncodingConvert = NULL;
 1544|  12.0k|  parser->m_unknownEncodingRelease = NULL;
 1545|  12.0k|  parser->m_unknownEncodingData = NULL;
 1546|  12.0k|  parser->m_parsingStatus.parsing = XML_INITIALIZED;
 1547|       |  // Reentry can only be triggered inside m_processor calls
 1548|  12.0k|  parser->m_reenter = XML_FALSE;
  ------------------
  |  |   64|  12.0k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 1549|  12.0k|  parser->m_handlerCallDepth = 0;
 1550|  12.0k|#ifdef XML_DTD
 1551|  12.0k|  parser->m_isParamEntity = XML_FALSE;
  ------------------
  |  |   64|  12.0k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 1552|  12.0k|  parser->m_useForeignDTD = XML_FALSE;
  ------------------
  |  |   64|  12.0k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 1553|  12.0k|  parser->m_paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;
 1554|  12.0k|#endif
 1555|  12.0k|  parser->m_hash_secret_salt_128.k[0] = 0;
 1556|  12.0k|  parser->m_hash_secret_salt_128.k[1] = 0;
 1557|  12.0k|  parser->m_hash_secret_salt_set = XML_FALSE;
  ------------------
  |  |   64|  12.0k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 1558|       |
 1559|  12.0k|#if XML_GE == 1
 1560|  12.0k|  memset(&parser->m_accounting, 0, sizeof(ACCOUNTING));
 1561|  12.0k|  parser->m_accounting.debugLevel = getDebugLevel("EXPAT_ACCOUNTING_DEBUG", 0u);
 1562|  12.0k|  parser->m_accounting.maximumAmplificationFactor
 1563|  12.0k|      = EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT;
  ------------------
  |  |  109|  12.0k|    100.0f
  ------------------
 1564|  12.0k|  parser->m_accounting.activationThresholdBytes
 1565|  12.0k|      = EXPAT_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT;
  ------------------
  |  |  111|  12.0k|    8388608 // 8 MiB, 2^23
  ------------------
 1566|       |
 1567|  12.0k|  memset(&parser->m_entity_stats, 0, sizeof(ENTITY_STATS));
 1568|  12.0k|  parser->m_entity_stats.debugLevel = getDebugLevel("EXPAT_ENTITY_DEBUG", 0u);
 1569|  12.0k|#endif
 1570|  12.0k|}
xmlparse.c:prologInitProcessor:
 5266|  12.0k|                    const char **nextPtr) {
 5267|  12.0k|  enum XML_Error result = initializeEncoding(parser);
 5268|  12.0k|  if (result != XML_ERROR_NONE)
  ------------------
  |  Branch (5268:7): [True: 2, False: 12.0k]
  ------------------
 5269|      2|    return result;
 5270|  12.0k|  parser->m_processor = prologProcessor;
 5271|  12.0k|  return prologProcessor(parser, s, end, nextPtr);
 5272|  12.0k|}
xmlparse.c:initializeEncoding:
 5095|  12.0k|initializeEncoding(XML_Parser parser) {
 5096|  12.0k|  const char *s;
 5097|       |#ifdef XML_UNICODE
 5098|       |  char encodingBuf[128];
 5099|       |  /* See comments about `protocolEncodingName` in parserInit() */
 5100|       |  if (! parser->m_protocolEncodingName)
 5101|       |    s = NULL;
 5102|       |  else {
 5103|       |    int i;
 5104|       |    for (i = 0; parser->m_protocolEncodingName[i]; i++) {
 5105|       |      if (i == sizeof(encodingBuf) - 1
 5106|       |          || (parser->m_protocolEncodingName[i] & ~0x7f) != 0) {
 5107|       |        encodingBuf[0] = '\0';
 5108|       |        break;
 5109|       |      }
 5110|       |      encodingBuf[i] = (char)parser->m_protocolEncodingName[i];
 5111|       |    }
 5112|       |    encodingBuf[i] = '\0';
 5113|       |    s = encodingBuf;
 5114|       |  }
 5115|       |#else
 5116|  12.0k|  s = parser->m_protocolEncodingName;
 5117|  12.0k|#endif
 5118|  12.0k|  if ((parser->m_ns ? XmlInitEncodingNS : XmlInitEncoding)(
  ------------------
  |  Branch (5118:7): [True: 12.0k, False: 2]
  |  Branch (5118:8): [True: 4.76k, False: 7.30k]
  ------------------
 5119|  12.0k|          &parser->m_initEncoding, &parser->m_encoding, s))
 5120|  12.0k|    return XML_ERROR_NONE;
 5121|      2|  return handleUnknownEncoding(parser, parser->m_protocolEncodingName);
 5122|  12.0k|}
xmlparse.c:handleUnknownEncoding:
 5219|      2|handleUnknownEncoding(XML_Parser parser, const XML_Char *encodingName) {
 5220|      2|  if (parser->m_unknownEncodingHandler) {
  ------------------
  |  Branch (5220:7): [True: 0, False: 2]
  ------------------
 5221|      0|    XML_Encoding info;
 5222|      0|    int i;
 5223|      0|    for (i = 0; i < 256; i++)
  ------------------
  |  Branch (5223:17): [True: 0, False: 0]
  ------------------
 5224|      0|      info.map[i] = -1;
 5225|      0|    info.convert = NULL;
 5226|      0|    info.data = NULL;
 5227|      0|    info.release = NULL;
 5228|      0|    beforeHandler(parser);
 5229|      0|    const int status = parser->m_unknownEncodingHandler(
 5230|      0|        parser->m_unknownEncodingHandlerData, encodingName, &info);
 5231|      0|    afterHandler(parser);
 5232|       |
 5233|      0|    parser->m_unknownEncodingRelease = info.release;
 5234|      0|    parser->m_unknownEncodingData = info.data;
 5235|       |
 5236|      0|    if (status) {
  ------------------
  |  Branch (5236:9): [True: 0, False: 0]
  ------------------
 5237|      0|      ENCODING *enc;
 5238|      0|      parser->m_unknownEncodingMem = MALLOC(parser, XmlSizeOfUnknownEncoding());
  ------------------
  |  |  835|      0|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 5239|      0|      if (! parser->m_unknownEncodingMem) {
  ------------------
  |  Branch (5239:11): [True: 0, False: 0]
  ------------------
 5240|      0|        if (parser->m_unknownEncodingRelease)
  ------------------
  |  Branch (5240:13): [True: 0, False: 0]
  ------------------
 5241|      0|          callUnknownEncodingRelease(parser);
 5242|      0|        else
 5243|      0|          parser->m_unknownEncodingData = NULL;
 5244|      0|        return XML_ERROR_NO_MEMORY;
 5245|      0|      }
 5246|      0|      parser->m_unknownEncodingConvert = info.convert;
 5247|      0|      enc = (parser->m_ns ? XmlInitUnknownEncodingNS : XmlInitUnknownEncoding)(
  ------------------
  |  Branch (5247:14): [True: 0, False: 0]
  ------------------
 5248|      0|          parser->m_unknownEncodingMem, info.map,
 5249|      0|          info.convert ? callUnknownEncodingConvert : NULL, parser);
  ------------------
  |  Branch (5249:11): [True: 0, False: 0]
  ------------------
 5250|      0|      if (enc) {
  ------------------
  |  Branch (5250:11): [True: 0, False: 0]
  ------------------
 5251|      0|        parser->m_encoding = enc;
 5252|      0|        return XML_ERROR_NONE;
 5253|      0|      }
 5254|      0|      parser->m_unknownEncodingConvert = NULL;
 5255|      0|    }
 5256|      0|    if (parser->m_unknownEncodingRelease != NULL)
  ------------------
  |  Branch (5256:9): [True: 0, False: 0]
  ------------------
 5257|      0|      callUnknownEncodingRelease(parser);
 5258|      0|    else
 5259|      0|      parser->m_unknownEncodingData = NULL;
 5260|      0|  }
 5261|      2|  return XML_ERROR_UNKNOWN_ENCODING;
 5262|      2|}
xmlparse.c:prologProcessor:
 5475|  12.0k|                const char **nextPtr) {
 5476|  12.0k|  const char *next = s;
 5477|  12.0k|  int tok = XmlPrologTok(parser->m_encoding, s, end, &next);
  ------------------
  |  |  226|  12.0k|    XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |  223|  12.0k|    (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
  |  |  ------------------
  ------------------
 5478|  12.0k|  return doProlog(parser, parser->m_encoding, s, end, tok, next, nextPtr,
 5479|  12.0k|                  (XML_Bool)! parser->m_parsingStatus.finalBuffer, XML_TRUE,
  ------------------
  |  |   63|  12.0k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 5480|  12.0k|                  XML_ACCOUNT_DIRECT);
 5481|  12.0k|}
xmlparse.c:doProlog:
 5486|  12.0k|         XML_Bool allowClosingDoctype, enum XML_Account account) {
 5487|  12.0k|#ifdef XML_DTD
 5488|  12.0k|  static const XML_Char externalSubsetName[] = {ASCII_HASH, '\0'};
  ------------------
  |  |  123|  12.0k|#define ASCII_HASH 0x23
  ------------------
 5489|  12.0k|#endif /* XML_DTD */
 5490|  12.0k|  static const XML_Char atypeCDATA[]
 5491|  12.0k|      = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'};
  ------------------
  |  |   40|  12.0k|#define ASCII_C 0x43
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'};
  ------------------
  |  |   41|  12.0k|#define ASCII_D 0x44
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'};
  ------------------
  |  |   38|  12.0k|#define ASCII_A 0x41
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'};
  ------------------
  |  |   57|  12.0k|#define ASCII_T 0x54
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, '\0'};
  ------------------
  |  |   38|  12.0k|#define ASCII_A 0x41
  ------------------
 5492|  12.0k|  static const XML_Char atypeID[] = {ASCII_I, ASCII_D, '\0'};
  ------------------
  |  |   46|  12.0k|#define ASCII_I 0x49
  ------------------
                static const XML_Char atypeID[] = {ASCII_I, ASCII_D, '\0'};
  ------------------
  |  |   41|  12.0k|#define ASCII_D 0x44
  ------------------
 5493|  12.0k|  static const XML_Char atypeIDREF[]
 5494|  12.0k|      = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0'};
  ------------------
  |  |   46|  12.0k|#define ASCII_I 0x49
  ------------------
                    = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0'};
  ------------------
  |  |   41|  12.0k|#define ASCII_D 0x44
  ------------------
                    = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0'};
  ------------------
  |  |   55|  12.0k|#define ASCII_R 0x52
  ------------------
                    = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0'};
  ------------------
  |  |   42|  12.0k|#define ASCII_E 0x45
  ------------------
                    = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, '\0'};
  ------------------
  |  |   43|  12.0k|#define ASCII_F 0x46
  ------------------
 5495|  12.0k|  static const XML_Char atypeIDREFS[]
 5496|  12.0k|      = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0'};
  ------------------
  |  |   46|  12.0k|#define ASCII_I 0x49
  ------------------
                    = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0'};
  ------------------
  |  |   41|  12.0k|#define ASCII_D 0x44
  ------------------
                    = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0'};
  ------------------
  |  |   55|  12.0k|#define ASCII_R 0x52
  ------------------
                    = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0'};
  ------------------
  |  |   42|  12.0k|#define ASCII_E 0x45
  ------------------
                    = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0'};
  ------------------
  |  |   43|  12.0k|#define ASCII_F 0x46
  ------------------
                    = {ASCII_I, ASCII_D, ASCII_R, ASCII_E, ASCII_F, ASCII_S, '\0'};
  ------------------
  |  |   56|  12.0k|#define ASCII_S 0x53
  ------------------
 5497|  12.0k|  static const XML_Char atypeENTITY[]
 5498|  12.0k|      = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0'};
  ------------------
  |  |   42|  12.0k|#define ASCII_E 0x45
  ------------------
                    = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0'};
  ------------------
  |  |   51|  12.0k|#define ASCII_N 0x4E
  ------------------
                    = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0'};
  ------------------
  |  |   57|  12.0k|#define ASCII_T 0x54
  ------------------
                    = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0'};
  ------------------
  |  |   46|  12.0k|#define ASCII_I 0x49
  ------------------
                    = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0'};
  ------------------
  |  |   57|  12.0k|#define ASCII_T 0x54
  ------------------
                    = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T, ASCII_Y, '\0'};
  ------------------
  |  |   62|  12.0k|#define ASCII_Y 0x59
  ------------------
 5499|  12.0k|  static const XML_Char atypeENTITIES[]
 5500|  12.0k|      = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T,
  ------------------
  |  |   42|  12.0k|#define ASCII_E 0x45
  ------------------
                    = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T,
  ------------------
  |  |   51|  12.0k|#define ASCII_N 0x4E
  ------------------
                    = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T,
  ------------------
  |  |   57|  12.0k|#define ASCII_T 0x54
  ------------------
                    = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T,
  ------------------
  |  |   46|  12.0k|#define ASCII_I 0x49
  ------------------
                    = {ASCII_E, ASCII_N, ASCII_T, ASCII_I, ASCII_T,
  ------------------
  |  |   57|  12.0k|#define ASCII_T 0x54
  ------------------
 5501|  12.0k|         ASCII_I, ASCII_E, ASCII_S, '\0'};
  ------------------
  |  |   46|  12.0k|#define ASCII_I 0x49
  ------------------
                       ASCII_I, ASCII_E, ASCII_S, '\0'};
  ------------------
  |  |   42|  12.0k|#define ASCII_E 0x45
  ------------------
                       ASCII_I, ASCII_E, ASCII_S, '\0'};
  ------------------
  |  |   56|  12.0k|#define ASCII_S 0x53
  ------------------
 5502|  12.0k|  static const XML_Char atypeNMTOKEN[]
 5503|  12.0k|      = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0'};
  ------------------
  |  |   51|  12.0k|#define ASCII_N 0x4E
  ------------------
                    = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0'};
  ------------------
  |  |   50|  12.0k|#define ASCII_M 0x4D
  ------------------
                    = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0'};
  ------------------
  |  |   57|  12.0k|#define ASCII_T 0x54
  ------------------
                    = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0'};
  ------------------
  |  |   52|  12.0k|#define ASCII_O 0x4F
  ------------------
                    = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0'};
  ------------------
  |  |   48|  12.0k|#define ASCII_K 0x4B
  ------------------
                    = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0'};
  ------------------
  |  |   42|  12.0k|#define ASCII_E 0x45
  ------------------
                    = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K, ASCII_E, ASCII_N, '\0'};
  ------------------
  |  |   51|  12.0k|#define ASCII_N 0x4E
  ------------------
 5504|  12.0k|  static const XML_Char atypeNMTOKENS[]
 5505|  12.0k|      = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K,
  ------------------
  |  |   51|  12.0k|#define ASCII_N 0x4E
  ------------------
                    = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K,
  ------------------
  |  |   50|  12.0k|#define ASCII_M 0x4D
  ------------------
                    = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K,
  ------------------
  |  |   57|  12.0k|#define ASCII_T 0x54
  ------------------
                    = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K,
  ------------------
  |  |   52|  12.0k|#define ASCII_O 0x4F
  ------------------
                    = {ASCII_N, ASCII_M, ASCII_T, ASCII_O, ASCII_K,
  ------------------
  |  |   48|  12.0k|#define ASCII_K 0x4B
  ------------------
 5506|  12.0k|         ASCII_E, ASCII_N, ASCII_S, '\0'};
  ------------------
  |  |   42|  12.0k|#define ASCII_E 0x45
  ------------------
                       ASCII_E, ASCII_N, ASCII_S, '\0'};
  ------------------
  |  |   51|  12.0k|#define ASCII_N 0x4E
  ------------------
                       ASCII_E, ASCII_N, ASCII_S, '\0'};
  ------------------
  |  |   56|  12.0k|#define ASCII_S 0x53
  ------------------
 5507|  12.0k|  static const XML_Char notationPrefix[]
 5508|  12.0k|      = {ASCII_N, ASCII_O, ASCII_T, ASCII_A,      ASCII_T,
  ------------------
  |  |   51|  12.0k|#define ASCII_N 0x4E
  ------------------
                    = {ASCII_N, ASCII_O, ASCII_T, ASCII_A,      ASCII_T,
  ------------------
  |  |   52|  12.0k|#define ASCII_O 0x4F
  ------------------
                    = {ASCII_N, ASCII_O, ASCII_T, ASCII_A,      ASCII_T,
  ------------------
  |  |   57|  12.0k|#define ASCII_T 0x54
  ------------------
                    = {ASCII_N, ASCII_O, ASCII_T, ASCII_A,      ASCII_T,
  ------------------
  |  |   38|  12.0k|#define ASCII_A 0x41
  ------------------
                    = {ASCII_N, ASCII_O, ASCII_T, ASCII_A,      ASCII_T,
  ------------------
  |  |   57|  12.0k|#define ASCII_T 0x54
  ------------------
 5509|  12.0k|         ASCII_I, ASCII_O, ASCII_N, ASCII_LPAREN, '\0'};
  ------------------
  |  |   46|  12.0k|#define ASCII_I 0x49
  ------------------
                       ASCII_I, ASCII_O, ASCII_N, ASCII_LPAREN, '\0'};
  ------------------
  |  |   52|  12.0k|#define ASCII_O 0x4F
  ------------------
                       ASCII_I, ASCII_O, ASCII_N, ASCII_LPAREN, '\0'};
  ------------------
  |  |   51|  12.0k|#define ASCII_N 0x4E
  ------------------
                       ASCII_I, ASCII_O, ASCII_N, ASCII_LPAREN, '\0'};
  ------------------
  |  |  119|  12.0k|#define ASCII_LPAREN 0x28
  ------------------
 5510|  12.0k|  static const XML_Char enumValueSep[] = {ASCII_PIPE, '\0'};
  ------------------
  |  |  124|  12.0k|#define ASCII_PIPE 0x7C
  ------------------
 5511|  12.0k|  static const XML_Char enumValueStart[] = {ASCII_LPAREN, '\0'};
  ------------------
  |  |  119|  12.0k|#define ASCII_LPAREN 0x28
  ------------------
 5512|       |
 5513|       |#ifndef XML_DTD
 5514|       |  UNUSED_P(account);
 5515|       |#endif
 5516|       |
 5517|       |  /* save one level of indirection */
 5518|  12.0k|  DTD *const dtd = parser->m_dtd;
 5519|       |
 5520|  12.0k|  const char **eventPP;
 5521|  12.0k|  const char **eventEndPP;
 5522|  12.0k|  enum XML_Content_Quant quant;
 5523|       |
 5524|  12.0k|  if (enc == parser->m_encoding) {
  ------------------
  |  Branch (5524:7): [True: 12.0k, False: 0]
  ------------------
 5525|  12.0k|    eventPP = &parser->m_eventPtr;
 5526|  12.0k|    eventEndPP = &parser->m_eventEndPtr;
 5527|  12.0k|  } else {
 5528|      0|    eventPP = &(parser->m_openInternalEntities->internalEventPtr);
 5529|      0|    eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr);
 5530|      0|  }
 5531|       |
 5532|   163k|  for (;;) {
 5533|   163k|    int role;
 5534|   163k|    XML_Bool handleDefault = XML_TRUE;
  ------------------
  |  |   63|   163k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 5535|   163k|    *eventPP = s;
 5536|   163k|    *eventEndPP = next;
 5537|   163k|    if (tok <= 0) {
  ------------------
  |  Branch (5537:9): [True: 2.45k, False: 161k]
  ------------------
 5538|  2.45k|      if (haveMore && tok != XML_TOK_INVALID) {
  ------------------
  |  |   57|      0|#  define XML_TOK_INVALID 0
  ------------------
  |  Branch (5538:11): [True: 0, False: 2.45k]
  |  Branch (5538:23): [True: 0, False: 0]
  ------------------
 5539|      0|        *nextPtr = s;
 5540|      0|        return XML_ERROR_NONE;
 5541|      0|      }
 5542|  2.45k|      switch (tok) {
 5543|  1.94k|      case XML_TOK_INVALID:
  ------------------
  |  |   57|  1.94k|#  define XML_TOK_INVALID 0
  ------------------
  |  Branch (5543:7): [True: 1.94k, False: 509]
  ------------------
 5544|  1.94k|        *eventPP = next;
 5545|  1.94k|        return XML_ERROR_INVALID_TOKEN;
 5546|    477|      case XML_TOK_PARTIAL:
  ------------------
  |  |   56|    477|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  |  Branch (5546:7): [True: 477, False: 1.98k]
  ------------------
 5547|    477|        return XML_ERROR_UNCLOSED_TOKEN;
 5548|     17|      case XML_TOK_PARTIAL_CHAR:
  ------------------
  |  |   55|     17|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  ------------------
  |  Branch (5548:7): [True: 17, False: 2.44k]
  ------------------
 5549|     17|        return XML_ERROR_PARTIAL_CHAR;
 5550|      2|      case -XML_TOK_PROLOG_S:
  ------------------
  |  |   82|      2|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (5550:7): [True: 2, False: 2.45k]
  ------------------
 5551|      2|        tok = -tok;
 5552|      2|        break;
 5553|      5|      case XML_TOK_NONE:
  ------------------
  |  |   51|      5|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
  |  Branch (5553:7): [True: 5, False: 2.45k]
  ------------------
 5554|      5|#ifdef XML_DTD
 5555|       |        /* for internal PE NOT referenced between declarations */
 5556|      5|        if (enc != parser->m_encoding
  ------------------
  |  Branch (5556:13): [True: 0, False: 5]
  ------------------
 5557|      0|            && ! parser->m_openInternalEntities->betweenDecl) {
  ------------------
  |  Branch (5557:16): [True: 0, False: 0]
  ------------------
 5558|      0|          *nextPtr = s;
 5559|      0|          return XML_ERROR_NONE;
 5560|      0|        }
 5561|       |        /* WFC: PE Between Declarations - must check that PE contains
 5562|       |           complete markup, not only for external PEs, but also for
 5563|       |           internal PEs if the reference occurs between declarations.
 5564|       |        */
 5565|      5|        if (parser->m_isParamEntity || enc != parser->m_encoding) {
  ------------------
  |  Branch (5565:13): [True: 0, False: 5]
  |  Branch (5565:40): [True: 0, False: 5]
  ------------------
 5566|      0|          if (XmlTokenRole(&parser->m_prologState, XML_TOK_NONE, end, end, enc)
  ------------------
  |  |  128|      0|    (((state)->handler)(state, tok, ptr, end, enc))
  ------------------
  |  Branch (5566:15): [True: 0, False: 0]
  ------------------
 5567|      0|              == XML_ROLE_ERROR)
 5568|      0|            return XML_ERROR_INCOMPLETE_PE;
 5569|      0|          *nextPtr = s;
 5570|      0|          return XML_ERROR_NONE;
 5571|      0|        }
 5572|      5|#endif /* XML_DTD */
 5573|      5|        return XML_ERROR_NO_ELEMENTS;
 5574|      8|      default:
  ------------------
  |  Branch (5574:7): [True: 8, False: 2.44k]
  ------------------
 5575|      8|        tok = -tok;
 5576|      8|        next = end;
 5577|      8|        break;
 5578|  2.45k|      }
 5579|  2.45k|    }
 5580|   161k|    role = XmlTokenRole(&parser->m_prologState, tok, s, next, enc);
  ------------------
  |  |  128|   161k|    (((state)->handler)(state, tok, ptr, end, enc))
  ------------------
 5581|   161k|#if XML_GE == 1
 5582|   161k|    switch (role) {
 5583|  7.68k|    case XML_ROLE_INSTANCE_START: // bytes accounted in contentProcessor
  ------------------
  |  Branch (5583:5): [True: 7.68k, False: 153k]
  ------------------
 5584|  8.16k|    case XML_ROLE_XML_DECL:       // bytes accounted in processXmlDecl
  ------------------
  |  Branch (5584:5): [True: 481, False: 160k]
  ------------------
 5585|  8.16k|#  ifdef XML_DTD
 5586|  8.16k|    case XML_ROLE_TEXT_DECL: // bytes accounted in processXmlDecl
  ------------------
  |  Branch (5586:5): [True: 0, False: 161k]
  ------------------
 5587|  8.16k|#  endif
 5588|  8.16k|      break;
 5589|   153k|    default:
  ------------------
  |  Branch (5589:5): [True: 153k, False: 8.16k]
  ------------------
 5590|   153k|      if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, account)) {
  ------------------
  |  Branch (5590:11): [True: 0, False: 153k]
  ------------------
 5591|      0|        accountingOnAbort(parser);
 5592|      0|        return XML_ERROR_AMPLIFICATION_LIMIT_BREACH;
 5593|      0|      }
 5594|   161k|    }
 5595|   161k|#endif
 5596|   161k|    switch (role) {
  ------------------
  |  Branch (5596:13): [True: 161k, False: 0]
  ------------------
 5597|    481|    case XML_ROLE_XML_DECL: {
  ------------------
  |  Branch (5597:5): [True: 481, False: 160k]
  ------------------
 5598|    481|      enum XML_Error result = processXmlDecl(parser, 0, s, next);
 5599|    481|      if (result != XML_ERROR_NONE)
  ------------------
  |  Branch (5599:11): [True: 344, False: 137]
  ------------------
 5600|    344|        return result;
 5601|    137|      enc = parser->m_encoding;
 5602|    137|      handleDefault = XML_FALSE;
  ------------------
  |  |   64|    137|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5603|    137|    } break;
 5604|  6.06k|    case XML_ROLE_DOCTYPE_NAME:
  ------------------
  |  Branch (5604:5): [True: 6.06k, False: 155k]
  ------------------
 5605|  6.06k|      if (parser->m_startDoctypeDeclHandler) {
  ------------------
  |  Branch (5605:11): [True: 0, False: 6.06k]
  ------------------
 5606|      0|        parser->m_doctypeName
 5607|      0|            = poolStoreString(&parser->m_tempPool, enc, s, next);
 5608|      0|        if (! parser->m_doctypeName)
  ------------------
  |  Branch (5608:13): [True: 0, False: 0]
  ------------------
 5609|      0|          return XML_ERROR_NO_MEMORY;
 5610|      0|        poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|      0|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 5611|      0|        parser->m_doctypePubid = NULL;
 5612|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5613|      0|      }
 5614|  6.06k|      parser->m_doctypeSysid = NULL; /* always initialize to NULL */
 5615|  6.06k|      break;
 5616|  3.34k|    case XML_ROLE_DOCTYPE_INTERNAL_SUBSET:
  ------------------
  |  Branch (5616:5): [True: 3.34k, False: 158k]
  ------------------
 5617|  3.34k|      if (parser->m_startDoctypeDeclHandler) {
  ------------------
  |  Branch (5617:11): [True: 0, False: 3.34k]
  ------------------
 5618|      0|        beforeHandler(parser);
 5619|      0|        parser->m_startDoctypeDeclHandler(
 5620|      0|            parser->m_handlerArg, parser->m_doctypeName, parser->m_doctypeSysid,
 5621|      0|            parser->m_doctypePubid, 1);
 5622|      0|        afterHandler(parser);
 5623|      0|        parser->m_doctypeName = NULL;
 5624|      0|        poolClear(&parser->m_tempPool);
 5625|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5626|      0|      }
 5627|  3.34k|      break;
 5628|      0|#ifdef XML_DTD
 5629|      0|    case XML_ROLE_TEXT_DECL: {
  ------------------
  |  Branch (5629:5): [True: 0, False: 161k]
  ------------------
 5630|      0|      enum XML_Error result = processXmlDecl(parser, 1, s, next);
 5631|      0|      if (result != XML_ERROR_NONE)
  ------------------
  |  Branch (5631:11): [True: 0, False: 0]
  ------------------
 5632|      0|        return result;
 5633|      0|      enc = parser->m_encoding;
 5634|      0|      handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5635|      0|    } break;
 5636|      0|#endif /* XML_DTD */
 5637|    252|    case XML_ROLE_DOCTYPE_PUBLIC_ID:
  ------------------
  |  Branch (5637:5): [True: 252, False: 161k]
  ------------------
 5638|    252|#ifdef XML_DTD
 5639|    252|      parser->m_useForeignDTD = XML_FALSE;
  ------------------
  |  |   64|    252|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5640|    252|      parser->m_declEntity = (ENTITY *)lookup(
 5641|    252|          parser, &dtd->paramEntities, externalSubsetName, sizeof(ENTITY));
 5642|    252|      if (! parser->m_declEntity)
  ------------------
  |  Branch (5642:11): [True: 0, False: 252]
  ------------------
 5643|      0|        return XML_ERROR_NO_MEMORY;
 5644|    252|#endif /* XML_DTD */
 5645|    252|      dtd->hasParamEntityRefs = XML_TRUE;
  ------------------
  |  |   63|    252|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 5646|    252|      if (parser->m_startDoctypeDeclHandler) {
  ------------------
  |  Branch (5646:11): [True: 0, False: 252]
  ------------------
 5647|      0|        XML_Char *pubId;
 5648|      0|        if (! XmlIsPublicId(enc, s, next, eventPP))
  ------------------
  |  |  272|      0|    (((enc)->isPublicId)(enc, ptr, end, badPtr))
  ------------------
  |  Branch (5648:13): [True: 0, False: 0]
  ------------------
 5649|      0|          return XML_ERROR_PUBLICID;
 5650|      0|        pubId = poolStoreString(&parser->m_tempPool, enc,
 5651|      0|                                s + enc->minBytesPerChar,
 5652|      0|                                next - enc->minBytesPerChar);
 5653|      0|        if (! pubId)
  ------------------
  |  Branch (5653:13): [True: 0, False: 0]
  ------------------
 5654|      0|          return XML_ERROR_NO_MEMORY;
 5655|      0|        normalizePublicId(pubId);
 5656|      0|        poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|      0|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 5657|      0|        parser->m_doctypePubid = pubId;
 5658|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5659|      0|        goto alreadyChecked;
 5660|      0|      }
 5661|    252|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|    252|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 5662|    794|    case XML_ROLE_ENTITY_PUBLIC_ID:
  ------------------
  |  Branch (5662:5): [True: 542, False: 160k]
  ------------------
 5663|    794|      if (! XmlIsPublicId(enc, s, next, eventPP))
  ------------------
  |  |  272|    794|    (((enc)->isPublicId)(enc, ptr, end, badPtr))
  ------------------
  |  Branch (5663:11): [True: 15, False: 779]
  ------------------
 5664|     15|        return XML_ERROR_PUBLICID;
 5665|    779|    alreadyChecked:
 5666|    779|      if (dtd->keepProcessing && parser->m_declEntity) {
  ------------------
  |  Branch (5666:11): [True: 645, False: 134]
  |  Branch (5666:34): [True: 345, False: 300]
  ------------------
 5667|    345|        XML_Char *tem
 5668|    345|            = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar,
 5669|    345|                              next - enc->minBytesPerChar);
 5670|    345|        if (! tem)
  ------------------
  |  Branch (5670:13): [True: 0, False: 345]
  ------------------
 5671|      0|          return XML_ERROR_NO_MEMORY;
 5672|    345|        normalizePublicId(tem);
 5673|    345|        parser->m_declEntity->publicId = tem;
 5674|    345|        poolFinish(&dtd->pool);
  ------------------
  |  |  676|    345|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 5675|       |        /* Don't suppress the default handler if we fell through from
 5676|       |         * the XML_ROLE_DOCTYPE_PUBLIC_ID case.
 5677|       |         */
 5678|    345|        if (parser->m_entityDeclHandler && role == XML_ROLE_ENTITY_PUBLIC_ID)
  ------------------
  |  Branch (5678:13): [True: 0, False: 345]
  |  Branch (5678:44): [True: 0, False: 0]
  ------------------
 5679|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5680|    345|      }
 5681|    779|      break;
 5682|  3.99k|    case XML_ROLE_DOCTYPE_CLOSE:
  ------------------
  |  Branch (5682:5): [True: 3.99k, False: 157k]
  ------------------
 5683|  3.99k|      if (allowClosingDoctype != XML_TRUE) {
  ------------------
  |  |   63|  3.99k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
  |  Branch (5683:11): [True: 0, False: 3.99k]
  ------------------
 5684|       |        /* Must not close doctype from within expanded parameter entities */
 5685|      0|        return XML_ERROR_INVALID_TOKEN;
 5686|      0|      }
 5687|       |
 5688|  3.99k|      if (parser->m_doctypeName) {
  ------------------
  |  Branch (5688:11): [True: 0, False: 3.99k]
  ------------------
 5689|      0|        beforeHandler(parser);
 5690|      0|        parser->m_startDoctypeDeclHandler(
 5691|      0|            parser->m_handlerArg, parser->m_doctypeName, parser->m_doctypeSysid,
 5692|      0|            parser->m_doctypePubid, 0);
 5693|      0|        afterHandler(parser);
 5694|      0|        poolClear(&parser->m_tempPool);
 5695|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5696|      0|      }
 5697|       |      /* parser->m_doctypeSysid will be non-NULL in the case of a previous
 5698|       |         XML_ROLE_DOCTYPE_SYSTEM_ID, even if parser->m_startDoctypeDeclHandler
 5699|       |         was not set, indicating an external subset
 5700|       |      */
 5701|  3.99k|#ifdef XML_DTD
 5702|  3.99k|      if (parser->m_doctypeSysid || parser->m_useForeignDTD) {
  ------------------
  |  Branch (5702:11): [True: 151, False: 3.84k]
  |  Branch (5702:37): [True: 0, False: 3.84k]
  ------------------
 5703|    151|        XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs;
 5704|    151|        dtd->hasParamEntityRefs = XML_TRUE;
  ------------------
  |  |   63|    151|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 5705|    151|        if (parser->m_paramEntityParsing
  ------------------
  |  Branch (5705:13): [True: 0, False: 151]
  ------------------
 5706|      0|            && parser->m_externalEntityRefHandler) {
  ------------------
  |  Branch (5706:16): [True: 0, False: 0]
  ------------------
 5707|      0|          ENTITY *entity = (ENTITY *)lookup(parser, &dtd->paramEntities,
 5708|      0|                                            externalSubsetName, sizeof(ENTITY));
 5709|      0|          if (! entity) {
  ------------------
  |  Branch (5709:15): [True: 0, False: 0]
  ------------------
 5710|       |            /* The external subset name "#" will have already been
 5711|       |             * inserted into the hash table at the start of the
 5712|       |             * external entity parsing, so no allocation will happen
 5713|       |             * and lookup() cannot fail.
 5714|       |             */
 5715|      0|            return XML_ERROR_NO_MEMORY; /* LCOV_EXCL_LINE */
 5716|      0|          }
 5717|      0|          if (parser->m_useForeignDTD)
  ------------------
  |  Branch (5717:15): [True: 0, False: 0]
  ------------------
 5718|      0|            entity->base = parser->m_curBase;
 5719|      0|          dtd->paramEntityRead = false;
 5720|      0|          beforeHandler(parser);
 5721|      0|          const int status = parser->m_externalEntityRefHandler(
 5722|      0|              parser->m_externalEntityRefHandlerArg, 0, entity->base,
 5723|      0|              entity->systemId, entity->publicId);
 5724|      0|          afterHandler(parser);
 5725|      0|          if (! status)
  ------------------
  |  Branch (5725:15): [True: 0, False: 0]
  ------------------
 5726|      0|            return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
 5727|      0|          if (dtd->paramEntityRead) {
  ------------------
  |  Branch (5727:15): [True: 0, False: 0]
  ------------------
 5728|      0|            if (! dtd->standalone && parser->m_notStandaloneHandler) {
  ------------------
  |  Branch (5728:17): [True: 0, False: 0]
  |  Branch (5728:38): [True: 0, False: 0]
  ------------------
 5729|      0|              beforeHandler(parser);
 5730|      0|              const int handlerStatus
 5731|      0|                  = parser->m_notStandaloneHandler(parser->m_handlerArg);
 5732|      0|              afterHandler(parser);
 5733|      0|              if (! handlerStatus)
  ------------------
  |  Branch (5733:19): [True: 0, False: 0]
  ------------------
 5734|      0|                return XML_ERROR_NOT_STANDALONE;
 5735|      0|            }
 5736|      0|          }
 5737|       |          /* if we didn't read the foreign DTD then this means that there
 5738|       |             is no external subset and we must reset dtd->hasParamEntityRefs
 5739|       |          */
 5740|      0|          else if (! parser->m_doctypeSysid)
  ------------------
  |  Branch (5740:20): [True: 0, False: 0]
  ------------------
 5741|      0|            dtd->hasParamEntityRefs = hadParamEntityRefs;
 5742|       |          /* end of DTD - no need to update dtd->keepProcessing */
 5743|      0|        }
 5744|    151|        parser->m_useForeignDTD = XML_FALSE;
  ------------------
  |  |   64|    151|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5745|    151|      }
 5746|  3.99k|#endif /* XML_DTD */
 5747|  3.99k|      if (parser->m_endDoctypeDeclHandler) {
  ------------------
  |  Branch (5747:11): [True: 0, False: 3.99k]
  ------------------
 5748|      0|        beforeHandler(parser);
 5749|      0|        parser->m_endDoctypeDeclHandler(parser->m_handlerArg);
 5750|      0|        afterHandler(parser);
 5751|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5752|      0|      }
 5753|  3.99k|      break;
 5754|  7.68k|    case XML_ROLE_INSTANCE_START:
  ------------------
  |  Branch (5754:5): [True: 7.68k, False: 153k]
  ------------------
 5755|  7.68k|#ifdef XML_DTD
 5756|       |      /* if there is no DOCTYPE declaration then now is the
 5757|       |         last chance to read the foreign DTD
 5758|       |      */
 5759|  7.68k|      if (parser->m_useForeignDTD) {
  ------------------
  |  Branch (5759:11): [True: 0, False: 7.68k]
  ------------------
 5760|      0|        XML_Bool hadParamEntityRefs = dtd->hasParamEntityRefs;
 5761|      0|        dtd->hasParamEntityRefs = XML_TRUE;
  ------------------
  |  |   63|      0|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 5762|      0|        if (parser->m_paramEntityParsing
  ------------------
  |  Branch (5762:13): [True: 0, False: 0]
  ------------------
 5763|      0|            && parser->m_externalEntityRefHandler) {
  ------------------
  |  Branch (5763:16): [True: 0, False: 0]
  ------------------
 5764|      0|          ENTITY *entity = (ENTITY *)lookup(parser, &dtd->paramEntities,
 5765|      0|                                            externalSubsetName, sizeof(ENTITY));
 5766|      0|          if (! entity)
  ------------------
  |  Branch (5766:15): [True: 0, False: 0]
  ------------------
 5767|      0|            return XML_ERROR_NO_MEMORY;
 5768|      0|          entity->base = parser->m_curBase;
 5769|      0|          dtd->paramEntityRead = false;
 5770|      0|          beforeHandler(parser);
 5771|      0|          const int status = parser->m_externalEntityRefHandler(
 5772|      0|              parser->m_externalEntityRefHandlerArg, 0, entity->base,
 5773|      0|              entity->systemId, entity->publicId);
 5774|      0|          afterHandler(parser);
 5775|      0|          if (! status)
  ------------------
  |  Branch (5775:15): [True: 0, False: 0]
  ------------------
 5776|      0|            return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
 5777|      0|          if (dtd->paramEntityRead) {
  ------------------
  |  Branch (5777:15): [True: 0, False: 0]
  ------------------
 5778|      0|            if (! dtd->standalone && parser->m_notStandaloneHandler) {
  ------------------
  |  Branch (5778:17): [True: 0, False: 0]
  |  Branch (5778:38): [True: 0, False: 0]
  ------------------
 5779|      0|              beforeHandler(parser);
 5780|      0|              const int handlerStatus
 5781|      0|                  = parser->m_notStandaloneHandler(parser->m_handlerArg);
 5782|      0|              afterHandler(parser);
 5783|      0|              if (! handlerStatus)
  ------------------
  |  Branch (5783:19): [True: 0, False: 0]
  ------------------
 5784|      0|                return XML_ERROR_NOT_STANDALONE;
 5785|      0|            }
 5786|      0|          }
 5787|       |          /* if we didn't read the foreign DTD then this means that there
 5788|       |             is no external subset and we must reset dtd->hasParamEntityRefs
 5789|       |          */
 5790|      0|          else
 5791|      0|            dtd->hasParamEntityRefs = hadParamEntityRefs;
 5792|       |          /* end of DTD - no need to update dtd->keepProcessing */
 5793|      0|        }
 5794|      0|      }
 5795|  7.68k|#endif /* XML_DTD */
 5796|  7.68k|      parser->m_processor = contentProcessor;
 5797|  7.68k|      return contentProcessor(parser, s, end, nextPtr);
 5798|  1.52k|    case XML_ROLE_ATTLIST_ELEMENT_NAME:
  ------------------
  |  Branch (5798:5): [True: 1.52k, False: 159k]
  ------------------
 5799|  1.52k|      parser->m_declElementType = getElementType(parser, enc, s, next);
 5800|  1.52k|      if (! parser->m_declElementType)
  ------------------
  |  Branch (5800:11): [True: 0, False: 1.52k]
  ------------------
 5801|      0|        return XML_ERROR_NO_MEMORY;
 5802|  1.52k|      goto checkAttListDeclHandler;
 5803|  3.82k|    case XML_ROLE_ATTRIBUTE_NAME:
  ------------------
  |  Branch (5803:5): [True: 3.82k, False: 157k]
  ------------------
 5804|  3.82k|      parser->m_declAttributeId = getAttributeId(parser, enc, s, next);
 5805|  3.82k|      if (! parser->m_declAttributeId)
  ------------------
  |  Branch (5805:11): [True: 0, False: 3.82k]
  ------------------
 5806|      0|        return XML_ERROR_NO_MEMORY;
 5807|  3.82k|      parser->m_declAttributeIsCdata = false;
 5808|  3.82k|      parser->m_declAttributeType = NULL;
 5809|  3.82k|      parser->m_declAttributeIsId = false;
 5810|  3.82k|      goto checkAttListDeclHandler;
 5811|    727|    case XML_ROLE_ATTRIBUTE_TYPE_CDATA:
  ------------------
  |  Branch (5811:5): [True: 727, False: 160k]
  ------------------
 5812|    727|      parser->m_declAttributeIsCdata = true;
 5813|    727|      parser->m_declAttributeType = atypeCDATA;
 5814|    727|      goto checkAttListDeclHandler;
 5815|  1.64k|    case XML_ROLE_ATTRIBUTE_TYPE_ID:
  ------------------
  |  Branch (5815:5): [True: 1.64k, False: 159k]
  ------------------
 5816|  1.64k|      parser->m_declAttributeIsId = true;
 5817|  1.64k|      parser->m_declAttributeType = atypeID;
 5818|  1.64k|      goto checkAttListDeclHandler;
 5819|     71|    case XML_ROLE_ATTRIBUTE_TYPE_IDREF:
  ------------------
  |  Branch (5819:5): [True: 71, False: 161k]
  ------------------
 5820|     71|      parser->m_declAttributeType = atypeIDREF;
 5821|     71|      goto checkAttListDeclHandler;
 5822|    124|    case XML_ROLE_ATTRIBUTE_TYPE_IDREFS:
  ------------------
  |  Branch (5822:5): [True: 124, False: 161k]
  ------------------
 5823|    124|      parser->m_declAttributeType = atypeIDREFS;
 5824|    124|      goto checkAttListDeclHandler;
 5825|    128|    case XML_ROLE_ATTRIBUTE_TYPE_ENTITY:
  ------------------
  |  Branch (5825:5): [True: 128, False: 161k]
  ------------------
 5826|    128|      parser->m_declAttributeType = atypeENTITY;
 5827|    128|      goto checkAttListDeclHandler;
 5828|     68|    case XML_ROLE_ATTRIBUTE_TYPE_ENTITIES:
  ------------------
  |  Branch (5828:5): [True: 68, False: 161k]
  ------------------
 5829|     68|      parser->m_declAttributeType = atypeENTITIES;
 5830|     68|      goto checkAttListDeclHandler;
 5831|     99|    case XML_ROLE_ATTRIBUTE_TYPE_NMTOKEN:
  ------------------
  |  Branch (5831:5): [True: 99, False: 161k]
  ------------------
 5832|     99|      parser->m_declAttributeType = atypeNMTOKEN;
 5833|     99|      goto checkAttListDeclHandler;
 5834|    108|    case XML_ROLE_ATTRIBUTE_TYPE_NMTOKENS:
  ------------------
  |  Branch (5834:5): [True: 108, False: 161k]
  ------------------
 5835|    108|      parser->m_declAttributeType = atypeNMTOKENS;
 5836|  8.32k|    checkAttListDeclHandler:
 5837|  8.32k|      if (dtd->keepProcessing && parser->m_attlistDeclHandler)
  ------------------
  |  Branch (5837:11): [True: 7.54k, False: 778]
  |  Branch (5837:34): [True: 0, False: 7.54k]
  ------------------
 5838|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5839|  8.32k|      break;
 5840|  3.87k|    case XML_ROLE_ATTRIBUTE_ENUM_VALUE:
  ------------------
  |  Branch (5840:5): [True: 3.87k, False: 157k]
  ------------------
 5841|  4.67k|    case XML_ROLE_ATTRIBUTE_NOTATION_VALUE:
  ------------------
  |  Branch (5841:5): [True: 796, False: 160k]
  ------------------
 5842|  4.67k|      if (dtd->keepProcessing && parser->m_attlistDeclHandler) {
  ------------------
  |  Branch (5842:11): [True: 4.20k, False: 470]
  |  Branch (5842:34): [True: 0, False: 4.20k]
  ------------------
 5843|      0|        const XML_Char *prefix;
 5844|      0|        if (parser->m_declAttributeType) {
  ------------------
  |  Branch (5844:13): [True: 0, False: 0]
  ------------------
 5845|      0|          prefix = enumValueSep;
 5846|      0|        } else {
 5847|      0|          prefix = (role == XML_ROLE_ATTRIBUTE_NOTATION_VALUE ? notationPrefix
  ------------------
  |  Branch (5847:21): [True: 0, False: 0]
  ------------------
 5848|      0|                                                              : enumValueStart);
 5849|      0|        }
 5850|      0|        if (! poolAppendString(&parser->m_tempPool, prefix))
  ------------------
  |  Branch (5850:13): [True: 0, False: 0]
  ------------------
 5851|      0|          return XML_ERROR_NO_MEMORY;
 5852|      0|        if (! poolAppend(&parser->m_tempPool, enc, s, next))
  ------------------
  |  Branch (5852:13): [True: 0, False: 0]
  ------------------
 5853|      0|          return XML_ERROR_NO_MEMORY;
 5854|      0|        parser->m_declAttributeType = parser->m_tempPool.start;
 5855|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5856|      0|      }
 5857|  4.67k|      break;
 5858|  4.67k|    case XML_ROLE_IMPLIED_ATTRIBUTE_VALUE:
  ------------------
  |  Branch (5858:5): [True: 693, False: 160k]
  ------------------
 5859|    774|    case XML_ROLE_REQUIRED_ATTRIBUTE_VALUE:
  ------------------
  |  Branch (5859:5): [True: 81, False: 161k]
  ------------------
 5860|    774|      if (dtd->keepProcessing) {
  ------------------
  |  Branch (5860:11): [True: 708, False: 66]
  ------------------
 5861|    708|        if (! defineAttribute(parser->m_declElementType,
  ------------------
  |  Branch (5861:13): [True: 0, False: 708]
  ------------------
 5862|    708|                              parser->m_declAttributeId,
 5863|    708|                              parser->m_declAttributeIsCdata,
 5864|    708|                              parser->m_declAttributeIsId, 0, parser))
 5865|      0|          return XML_ERROR_NO_MEMORY;
 5866|    708|        if (parser->m_attlistDeclHandler && parser->m_declAttributeType) {
  ------------------
  |  Branch (5866:13): [True: 0, False: 708]
  |  Branch (5866:45): [True: 0, False: 0]
  ------------------
 5867|      0|          if (*parser->m_declAttributeType == XML_T(ASCII_LPAREN)
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
  |  Branch (5867:15): [True: 0, False: 0]
  ------------------
 5868|      0|              || (*parser->m_declAttributeType == XML_T(ASCII_N)
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
  |  Branch (5868:19): [True: 0, False: 0]
  ------------------
 5869|      0|                  && parser->m_declAttributeType[1] == XML_T(ASCII_O))) {
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
  |  Branch (5869:22): [True: 0, False: 0]
  ------------------
 5870|       |            /* Enumerated or Notation type */
 5871|      0|            if (! poolAppendChar(&parser->m_tempPool, XML_T(ASCII_RPAREN))
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
  |  Branch (5871:17): [True: 0, False: 0]
  ------------------
 5872|      0|                || ! poolAppendChar(&parser->m_tempPool, XML_T('\0')))
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
  |  Branch (5872:20): [True: 0, False: 0]
  ------------------
 5873|      0|              return XML_ERROR_NO_MEMORY;
 5874|      0|            parser->m_declAttributeType = parser->m_tempPool.start;
 5875|      0|            poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|      0|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 5876|      0|          }
 5877|      0|          *eventEndPP = s;
 5878|      0|          beforeHandler(parser);
 5879|      0|          parser->m_attlistDeclHandler(
 5880|      0|              parser->m_handlerArg, parser->m_declElementType->name,
 5881|      0|              parser->m_declAttributeId->name, parser->m_declAttributeType, 0,
 5882|      0|              role == XML_ROLE_REQUIRED_ATTRIBUTE_VALUE);
 5883|      0|          afterHandler(parser);
 5884|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5885|      0|        }
 5886|    708|      }
 5887|    774|      poolClear(&parser->m_tempPool);
 5888|    774|      break;
 5889|  2.58k|    case XML_ROLE_DEFAULT_ATTRIBUTE_VALUE:
  ------------------
  |  Branch (5889:5): [True: 2.58k, False: 158k]
  ------------------
 5890|  2.72k|    case XML_ROLE_FIXED_ATTRIBUTE_VALUE:
  ------------------
  |  Branch (5890:5): [True: 136, False: 161k]
  ------------------
 5891|  2.72k|      if (dtd->keepProcessing) {
  ------------------
  |  Branch (5891:11): [True: 2.41k, False: 307]
  ------------------
 5892|  2.41k|        const XML_Char *attVal;
 5893|  2.41k|        enum XML_Error result = storeAttributeValue(
 5894|  2.41k|            parser, enc, parser->m_declAttributeIsCdata,
 5895|  2.41k|            s + enc->minBytesPerChar, next - enc->minBytesPerChar, &dtd->pool,
 5896|  2.41k|            XML_ACCOUNT_NONE);
 5897|  2.41k|        if (result)
  ------------------
  |  Branch (5897:13): [True: 21, False: 2.39k]
  ------------------
 5898|     21|          return result;
 5899|  2.39k|        attVal = poolStart(&dtd->pool);
  ------------------
  |  |  671|  2.39k|#define poolStart(pool) ((pool)->start)
  ------------------
 5900|  2.39k|        poolFinish(&dtd->pool);
  ------------------
  |  |  676|  2.39k|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 5901|       |        /* ID attributes aren't allowed to have a default */
 5902|  2.39k|        if (! defineAttribute(
  ------------------
  |  Branch (5902:13): [True: 0, False: 2.39k]
  ------------------
 5903|  2.39k|                parser->m_declElementType, parser->m_declAttributeId,
 5904|  2.39k|                parser->m_declAttributeIsCdata, false, attVal, parser))
 5905|      0|          return XML_ERROR_NO_MEMORY;
 5906|  2.39k|        if (parser->m_attlistDeclHandler && parser->m_declAttributeType) {
  ------------------
  |  Branch (5906:13): [True: 0, False: 2.39k]
  |  Branch (5906:45): [True: 0, False: 0]
  ------------------
 5907|      0|          if (*parser->m_declAttributeType == XML_T(ASCII_LPAREN)
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
  |  Branch (5907:15): [True: 0, False: 0]
  ------------------
 5908|      0|              || (*parser->m_declAttributeType == XML_T(ASCII_N)
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
  |  Branch (5908:19): [True: 0, False: 0]
  ------------------
 5909|      0|                  && parser->m_declAttributeType[1] == XML_T(ASCII_O))) {
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
  |  Branch (5909:22): [True: 0, False: 0]
  ------------------
 5910|       |            /* Enumerated or Notation type */
 5911|      0|            if (! poolAppendChar(&parser->m_tempPool, XML_T(ASCII_RPAREN))
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
  |  Branch (5911:17): [True: 0, False: 0]
  ------------------
 5912|      0|                || ! poolAppendChar(&parser->m_tempPool, XML_T('\0')))
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
  |  Branch (5912:20): [True: 0, False: 0]
  ------------------
 5913|      0|              return XML_ERROR_NO_MEMORY;
 5914|      0|            parser->m_declAttributeType = parser->m_tempPool.start;
 5915|      0|            poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|      0|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 5916|      0|          }
 5917|      0|          *eventEndPP = s;
 5918|      0|          beforeHandler(parser);
 5919|      0|          parser->m_attlistDeclHandler(
 5920|      0|              parser->m_handlerArg, parser->m_declElementType->name,
 5921|      0|              parser->m_declAttributeId->name, parser->m_declAttributeType,
 5922|      0|              attVal, role == XML_ROLE_FIXED_ATTRIBUTE_VALUE);
 5923|      0|          afterHandler(parser);
 5924|      0|          poolClear(&parser->m_tempPool);
 5925|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5926|      0|        }
 5927|  2.39k|      }
 5928|  2.70k|      break;
 5929|  3.89k|    case XML_ROLE_ENTITY_VALUE:
  ------------------
  |  Branch (5929:5): [True: 3.89k, False: 157k]
  ------------------
 5930|  3.89k|      if (dtd->keepProcessing) {
  ------------------
  |  Branch (5930:11): [True: 3.72k, False: 168]
  ------------------
 5931|  3.72k|#if XML_GE == 1
 5932|       |        // This will store the given replacement text in
 5933|       |        // parser->m_declEntity->textPtr.
 5934|  3.72k|        const enum XML_Error result = callStoreEntityValue(
 5935|  3.72k|            parser, enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar,
 5936|  3.72k|            XML_ACCOUNT_NONE);
 5937|  3.72k|        if (result != XML_ERROR_NONE) {
  ------------------
  |  Branch (5937:13): [True: 23, False: 3.70k]
  ------------------
 5938|     23|          poolDiscard(&dtd->entityValuePool);
  ------------------
  |  |  675|     23|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 5939|     23|          return result;
 5940|     23|        }
 5941|  3.70k|        if (parser->m_declEntity) {
  ------------------
  |  Branch (5941:13): [True: 2.68k, False: 1.02k]
  ------------------
 5942|       |          /* Detect and prevent signed integer overflow */
 5943|  2.68k|          if ((size_t)poolLength(&dtd->entityValuePool) > (size_t)INT_MAX) {
  ------------------
  |  |  672|  2.68k|#define poolLength(pool) ((pool)->ptr - (pool)->start)
  ------------------
  |  Branch (5943:15): [True: 0, False: 2.68k]
  ------------------
 5944|      0|            poolDiscard(&dtd->entityValuePool);
  ------------------
  |  |  675|      0|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 5945|      0|            return XML_ERROR_NO_MEMORY;
 5946|      0|          }
 5947|  2.68k|          parser->m_declEntity->textPtr = poolStart(&dtd->entityValuePool);
  ------------------
  |  |  671|  2.68k|#define poolStart(pool) ((pool)->start)
  ------------------
 5948|  2.68k|          parser->m_declEntity->textLen = poolLength(&dtd->entityValuePool);
  ------------------
  |  |  672|  2.68k|#define poolLength(pool) ((pool)->ptr - (pool)->start)
  ------------------
 5949|  2.68k|          poolFinish(&dtd->entityValuePool);
  ------------------
  |  |  676|  2.68k|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 5950|  2.68k|          if (parser->m_entityDeclHandler) {
  ------------------
  |  Branch (5950:15): [True: 0, False: 2.68k]
  ------------------
 5951|      0|            *eventEndPP = s;
 5952|      0|            beforeHandler(parser);
 5953|      0|            parser->m_entityDeclHandler(
 5954|      0|                parser->m_handlerArg, parser->m_declEntity->name,
 5955|      0|                parser->m_declEntity->is_param, parser->m_declEntity->textPtr,
 5956|      0|                (int)parser->m_declEntity->textLen, parser->m_curBase, 0, 0, 0);
 5957|      0|            afterHandler(parser);
 5958|      0|            handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5959|      0|          }
 5960|  2.68k|        } else
 5961|  1.02k|          poolDiscard(&dtd->entityValuePool);
  ------------------
  |  |  675|  1.02k|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 5962|       |#else
 5963|       |        // This will store "&amp;entity123;" in parser->m_declEntity->textPtr
 5964|       |        // to end up as "&entity123;" in the handler.
 5965|       |        if (parser->m_declEntity != NULL) {
 5966|       |          const enum XML_Error result
 5967|       |              = storeSelfEntityValue(parser, parser->m_declEntity);
 5968|       |          if (result != XML_ERROR_NONE)
 5969|       |            return result;
 5970|       |
 5971|       |          if (parser->m_entityDeclHandler) {
 5972|       |            *eventEndPP = s;
 5973|       |            beforeHandler(parser);
 5974|       |            parser->m_entityDeclHandler(
 5975|       |                parser->m_handlerArg, parser->m_declEntity->name,
 5976|       |                parser->m_declEntity->is_param, parser->m_declEntity->textPtr,
 5977|       |                (int)parser->m_declEntity->textLen, parser->m_curBase, 0, 0, 0);
 5978|       |            afterHandler(parser);
 5979|       |            handleDefault = XML_FALSE;
 5980|       |          }
 5981|       |        }
 5982|       |#endif
 5983|  3.70k|      }
 5984|  3.87k|      break;
 5985|  3.87k|    case XML_ROLE_DOCTYPE_SYSTEM_ID:
  ------------------
  |  Branch (5985:5): [True: 178, False: 161k]
  ------------------
 5986|    178|#ifdef XML_DTD
 5987|    178|      parser->m_useForeignDTD = XML_FALSE;
  ------------------
  |  |   64|    178|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5988|    178|#endif /* XML_DTD */
 5989|    178|      dtd->hasParamEntityRefs = XML_TRUE;
  ------------------
  |  |   63|    178|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 5990|    178|      if (parser->m_startDoctypeDeclHandler) {
  ------------------
  |  Branch (5990:11): [True: 0, False: 178]
  ------------------
 5991|      0|        parser->m_doctypeSysid = poolStoreString(&parser->m_tempPool, enc,
 5992|      0|                                                 s + enc->minBytesPerChar,
 5993|      0|                                                 next - enc->minBytesPerChar);
 5994|      0|        if (parser->m_doctypeSysid == NULL)
  ------------------
  |  Branch (5994:13): [True: 0, False: 0]
  ------------------
 5995|      0|          return XML_ERROR_NO_MEMORY;
 5996|      0|        poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|      0|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 5997|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 5998|      0|      }
 5999|    178|#ifdef XML_DTD
 6000|    178|      else
 6001|       |        /* use externalSubsetName to make parser->m_doctypeSysid non-NULL
 6002|       |           for the case where no parser->m_startDoctypeDeclHandler is set */
 6003|    178|        parser->m_doctypeSysid = externalSubsetName;
 6004|    178|#endif /* XML_DTD */
 6005|    178|      if (! dtd->standalone
  ------------------
  |  Branch (6005:11): [True: 178, False: 0]
  ------------------
 6006|    178|#ifdef XML_DTD
 6007|    178|          && ! parser->m_paramEntityParsing
  ------------------
  |  Branch (6007:14): [True: 178, False: 0]
  ------------------
 6008|    178|#endif /* XML_DTD */
 6009|    178|          && parser->m_notStandaloneHandler) {
  ------------------
  |  Branch (6009:14): [True: 0, False: 178]
  ------------------
 6010|      0|        beforeHandler(parser);
 6011|      0|        const int status = parser->m_notStandaloneHandler(parser->m_handlerArg);
 6012|      0|        afterHandler(parser);
 6013|      0|        if (! status)
  ------------------
  |  Branch (6013:13): [True: 0, False: 0]
  ------------------
 6014|      0|          return XML_ERROR_NOT_STANDALONE;
 6015|      0|      }
 6016|       |#ifndef XML_DTD
 6017|       |      break;
 6018|       |#else  /* XML_DTD */
 6019|    178|      if (! parser->m_declEntity) {
  ------------------
  |  Branch (6019:11): [True: 138, False: 40]
  ------------------
 6020|    138|        parser->m_declEntity = (ENTITY *)lookup(
 6021|    138|            parser, &dtd->paramEntities, externalSubsetName, sizeof(ENTITY));
 6022|    138|        if (! parser->m_declEntity)
  ------------------
  |  Branch (6022:13): [True: 0, False: 138]
  ------------------
 6023|      0|          return XML_ERROR_NO_MEMORY;
 6024|    138|        parser->m_declEntity->publicId = NULL;
 6025|    138|      }
 6026|    178|#endif /* XML_DTD */
 6027|    178|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|    178|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 6028|  1.23k|    case XML_ROLE_ENTITY_SYSTEM_ID:
  ------------------
  |  Branch (6028:5): [True: 1.05k, False: 160k]
  ------------------
 6029|  1.23k|      if (dtd->keepProcessing && parser->m_declEntity) {
  ------------------
  |  Branch (6029:11): [True: 1.04k, False: 191]
  |  Branch (6029:34): [True: 385, False: 661]
  ------------------
 6030|    385|        parser->m_declEntity->systemId
 6031|    385|            = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar,
 6032|    385|                              next - enc->minBytesPerChar);
 6033|    385|        if (! parser->m_declEntity->systemId)
  ------------------
  |  Branch (6033:13): [True: 0, False: 385]
  ------------------
 6034|      0|          return XML_ERROR_NO_MEMORY;
 6035|    385|        parser->m_declEntity->base = parser->m_curBase;
 6036|    385|        poolFinish(&dtd->pool);
  ------------------
  |  |  676|    385|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 6037|       |        /* Don't suppress the default handler if we fell through from
 6038|       |         * the XML_ROLE_DOCTYPE_SYSTEM_ID case.
 6039|       |         */
 6040|    385|        if (parser->m_entityDeclHandler && role == XML_ROLE_ENTITY_SYSTEM_ID)
  ------------------
  |  Branch (6040:13): [True: 0, False: 385]
  |  Branch (6040:44): [True: 0, False: 0]
  ------------------
 6041|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6042|    385|      }
 6043|  1.23k|      break;
 6044|  1.23k|    case XML_ROLE_ENTITY_COMPLETE:
  ------------------
  |  Branch (6044:5): [True: 835, False: 160k]
  ------------------
 6045|       |#if XML_GE == 0
 6046|       |      // This will store "&amp;entity123;" in entity->textPtr
 6047|       |      // to end up as "&entity123;" in the handler.
 6048|       |      if (parser->m_declEntity != NULL) {
 6049|       |        const enum XML_Error result
 6050|       |            = storeSelfEntityValue(parser, parser->m_declEntity);
 6051|       |        if (result != XML_ERROR_NONE)
 6052|       |          return result;
 6053|       |      }
 6054|       |#endif
 6055|    835|      if (dtd->keepProcessing && parser->m_declEntity
  ------------------
  |  Branch (6055:11): [True: 710, False: 125]
  |  Branch (6055:34): [True: 168, False: 542]
  ------------------
 6056|    168|          && parser->m_entityDeclHandler) {
  ------------------
  |  Branch (6056:14): [True: 0, False: 168]
  ------------------
 6057|      0|        *eventEndPP = s;
 6058|      0|        beforeHandler(parser);
 6059|      0|        parser->m_entityDeclHandler(
 6060|      0|            parser->m_handlerArg, parser->m_declEntity->name,
 6061|      0|            parser->m_declEntity->is_param, 0, 0, parser->m_declEntity->base,
 6062|      0|            parser->m_declEntity->systemId, parser->m_declEntity->publicId, 0);
 6063|      0|        afterHandler(parser);
 6064|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6065|      0|      }
 6066|    835|      break;
 6067|    218|    case XML_ROLE_ENTITY_NOTATION_NAME:
  ------------------
  |  Branch (6067:5): [True: 218, False: 161k]
  ------------------
 6068|    218|      if (dtd->keepProcessing && parser->m_declEntity) {
  ------------------
  |  Branch (6068:11): [True: 152, False: 66]
  |  Branch (6068:34): [True: 33, False: 119]
  ------------------
 6069|     33|        parser->m_declEntity->notation
 6070|     33|            = poolStoreString(&dtd->pool, enc, s, next);
 6071|     33|        if (! parser->m_declEntity->notation)
  ------------------
  |  Branch (6071:13): [True: 0, False: 33]
  ------------------
 6072|      0|          return XML_ERROR_NO_MEMORY;
 6073|     33|        poolFinish(&dtd->pool);
  ------------------
  |  |  676|     33|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 6074|     33|        if (parser->m_unparsedEntityDeclHandler) {
  ------------------
  |  Branch (6074:13): [True: 0, False: 33]
  ------------------
 6075|      0|          *eventEndPP = s;
 6076|      0|          beforeHandler(parser);
 6077|      0|          parser->m_unparsedEntityDeclHandler(
 6078|      0|              parser->m_handlerArg, parser->m_declEntity->name,
 6079|      0|              parser->m_declEntity->base, parser->m_declEntity->systemId,
 6080|      0|              parser->m_declEntity->publicId, parser->m_declEntity->notation);
 6081|      0|          afterHandler(parser);
 6082|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6083|     33|        } else if (parser->m_entityDeclHandler) {
  ------------------
  |  Branch (6083:20): [True: 0, False: 33]
  ------------------
 6084|      0|          *eventEndPP = s;
 6085|      0|          beforeHandler(parser);
 6086|      0|          parser->m_entityDeclHandler(
 6087|      0|              parser->m_handlerArg, parser->m_declEntity->name, 0, 0, 0,
 6088|      0|              parser->m_declEntity->base, parser->m_declEntity->systemId,
 6089|      0|              parser->m_declEntity->publicId, parser->m_declEntity->notation);
 6090|      0|          afterHandler(parser);
 6091|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6092|      0|        }
 6093|     33|      }
 6094|    218|      break;
 6095|  4.23k|    case XML_ROLE_GENERAL_ENTITY_NAME: {
  ------------------
  |  Branch (6095:5): [True: 4.23k, False: 157k]
  ------------------
 6096|  4.23k|      if (XmlPredefinedEntityName(enc, s, next)) {
  ------------------
  |  |  266|  4.23k|    (((enc)->predefinedEntityName)(enc, ptr, end))
  |  |  ------------------
  |  |  |  Branch (266:5): [True: 68, False: 4.16k]
  |  |  ------------------
  ------------------
 6097|     68|        parser->m_declEntity = NULL;
 6098|     68|        break;
 6099|     68|      }
 6100|  4.16k|      if (dtd->keepProcessing) {
  ------------------
  |  Branch (6100:11): [True: 3.86k, False: 296]
  ------------------
 6101|  3.86k|        const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next);
 6102|  3.86k|        if (! name)
  ------------------
  |  Branch (6102:13): [True: 0, False: 3.86k]
  ------------------
 6103|      0|          return XML_ERROR_NO_MEMORY;
 6104|  3.86k|        parser->m_declEntity = (ENTITY *)lookup(parser, &dtd->generalEntities,
 6105|  3.86k|                                                name, sizeof(ENTITY));
 6106|  3.86k|        if (! parser->m_declEntity)
  ------------------
  |  Branch (6106:13): [True: 0, False: 3.86k]
  ------------------
 6107|      0|          return XML_ERROR_NO_MEMORY;
 6108|  3.86k|        if (parser->m_declEntity->name != name) {
  ------------------
  |  Branch (6108:13): [True: 1.05k, False: 2.81k]
  ------------------
 6109|  1.05k|          poolDiscard(&dtd->pool);
  ------------------
  |  |  675|  1.05k|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 6110|  1.05k|          parser->m_declEntity = NULL;
 6111|  2.81k|        } else {
 6112|  2.81k|          poolFinish(&dtd->pool);
  ------------------
  |  |  676|  2.81k|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 6113|  2.81k|          parser->m_declEntity->publicId = NULL;
 6114|  2.81k|          parser->m_declEntity->is_param = false;
 6115|       |          /* if we have a parent parser or are reading an internal parameter
 6116|       |             entity, then the entity declaration is not considered "internal"
 6117|       |          */
 6118|  2.81k|          parser->m_declEntity->is_internal
 6119|  2.81k|              = ! (parser->m_parentParser || parser->m_openInternalEntities);
  ------------------
  |  Branch (6119:20): [True: 0, False: 2.81k]
  |  Branch (6119:46): [True: 0, False: 2.81k]
  ------------------
 6120|  2.81k|          if (parser->m_entityDeclHandler)
  ------------------
  |  Branch (6120:15): [True: 0, False: 2.81k]
  ------------------
 6121|      0|            handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6122|  2.81k|        }
 6123|  3.86k|      } else {
 6124|    296|        poolDiscard(&dtd->pool);
  ------------------
  |  |  675|    296|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 6125|    296|        parser->m_declEntity = NULL;
 6126|    296|      }
 6127|  4.16k|    } break;
 6128|  4.16k|    case XML_ROLE_PARAM_ENTITY_NAME:
  ------------------
  |  Branch (6128:5): [True: 903, False: 160k]
  ------------------
 6129|    903|#ifdef XML_DTD
 6130|    903|      if (dtd->keepProcessing) {
  ------------------
  |  Branch (6130:11): [True: 812, False: 91]
  ------------------
 6131|    812|        const XML_Char *name = poolStoreString(&dtd->pool, enc, s, next);
 6132|    812|        if (! name)
  ------------------
  |  Branch (6132:13): [True: 0, False: 812]
  ------------------
 6133|      0|          return XML_ERROR_NO_MEMORY;
 6134|    812|        parser->m_declEntity = (ENTITY *)lookup(parser, &dtd->paramEntities,
 6135|    812|                                                name, sizeof(ENTITY));
 6136|    812|        if (! parser->m_declEntity)
  ------------------
  |  Branch (6136:13): [True: 0, False: 812]
  ------------------
 6137|      0|          return XML_ERROR_NO_MEMORY;
 6138|    812|        if (parser->m_declEntity->name != name) {
  ------------------
  |  Branch (6138:13): [True: 662, False: 150]
  ------------------
 6139|    662|          poolDiscard(&dtd->pool);
  ------------------
  |  |  675|    662|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 6140|    662|          parser->m_declEntity = NULL;
 6141|    662|        } else {
 6142|    150|          poolFinish(&dtd->pool);
  ------------------
  |  |  676|    150|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 6143|    150|          parser->m_declEntity->publicId = NULL;
 6144|    150|          parser->m_declEntity->is_param = true;
 6145|       |          /* if we have a parent parser or are reading an internal parameter
 6146|       |             entity, then the entity declaration is not considered "internal"
 6147|       |          */
 6148|    150|          parser->m_declEntity->is_internal
 6149|    150|              = ! (parser->m_parentParser || parser->m_openInternalEntities);
  ------------------
  |  Branch (6149:20): [True: 0, False: 150]
  |  Branch (6149:46): [True: 0, False: 150]
  ------------------
 6150|    150|          if (parser->m_entityDeclHandler)
  ------------------
  |  Branch (6150:15): [True: 0, False: 150]
  ------------------
 6151|      0|            handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6152|    150|        }
 6153|    812|      } else {
 6154|     91|        poolDiscard(&dtd->pool);
  ------------------
  |  |  675|     91|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 6155|     91|        parser->m_declEntity = NULL;
 6156|     91|      }
 6157|       |#else  /* not XML_DTD */
 6158|       |      parser->m_declEntity = NULL;
 6159|       |#endif /* XML_DTD */
 6160|    903|      break;
 6161|    903|    case XML_ROLE_NOTATION_NAME:
  ------------------
  |  Branch (6161:5): [True: 866, False: 160k]
  ------------------
 6162|    866|      parser->m_declNotationPublicId = NULL;
 6163|    866|      parser->m_declNotationName = NULL;
 6164|    866|      if (parser->m_notationDeclHandler) {
  ------------------
  |  Branch (6164:11): [True: 0, False: 866]
  ------------------
 6165|      0|        parser->m_declNotationName
 6166|      0|            = poolStoreString(&parser->m_tempPool, enc, s, next);
 6167|      0|        if (! parser->m_declNotationName)
  ------------------
  |  Branch (6167:13): [True: 0, False: 0]
  ------------------
 6168|      0|          return XML_ERROR_NO_MEMORY;
 6169|      0|        poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|      0|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 6170|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6171|      0|      }
 6172|    866|      break;
 6173|    866|    case XML_ROLE_NOTATION_PUBLIC_ID:
  ------------------
  |  Branch (6173:5): [True: 533, False: 160k]
  ------------------
 6174|    533|      if (! XmlIsPublicId(enc, s, next, eventPP))
  ------------------
  |  |  272|    533|    (((enc)->isPublicId)(enc, ptr, end, badPtr))
  ------------------
  |  Branch (6174:11): [True: 1, False: 532]
  ------------------
 6175|      1|        return XML_ERROR_PUBLICID;
 6176|    532|      if (parser
  ------------------
  |  Branch (6176:11): [True: 0, False: 532]
  ------------------
 6177|    532|              ->m_declNotationName) { /* means m_notationDeclHandler != NULL */
 6178|      0|        XML_Char *tem = poolStoreString(&parser->m_tempPool, enc,
 6179|      0|                                        s + enc->minBytesPerChar,
 6180|      0|                                        next - enc->minBytesPerChar);
 6181|      0|        if (! tem)
  ------------------
  |  Branch (6181:13): [True: 0, False: 0]
  ------------------
 6182|      0|          return XML_ERROR_NO_MEMORY;
 6183|      0|        normalizePublicId(tem);
 6184|      0|        parser->m_declNotationPublicId = tem;
 6185|      0|        poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|      0|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 6186|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6187|      0|      }
 6188|    532|      break;
 6189|    532|    case XML_ROLE_NOTATION_SYSTEM_ID:
  ------------------
  |  Branch (6189:5): [True: 404, False: 161k]
  ------------------
 6190|    404|      if (parser->m_declNotationName && parser->m_notationDeclHandler) {
  ------------------
  |  Branch (6190:11): [True: 0, False: 404]
  |  Branch (6190:41): [True: 0, False: 0]
  ------------------
 6191|      0|        const XML_Char *systemId = poolStoreString(&parser->m_tempPool, enc,
 6192|      0|                                                   s + enc->minBytesPerChar,
 6193|      0|                                                   next - enc->minBytesPerChar);
 6194|      0|        if (! systemId)
  ------------------
  |  Branch (6194:13): [True: 0, False: 0]
  ------------------
 6195|      0|          return XML_ERROR_NO_MEMORY;
 6196|      0|        *eventEndPP = s;
 6197|      0|        beforeHandler(parser);
 6198|      0|        parser->m_notationDeclHandler(
 6199|      0|            parser->m_handlerArg, parser->m_declNotationName, parser->m_curBase,
 6200|      0|            systemId, parser->m_declNotationPublicId);
 6201|      0|        afterHandler(parser);
 6202|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6203|      0|      }
 6204|    404|      poolClear(&parser->m_tempPool);
 6205|    404|      break;
 6206|    411|    case XML_ROLE_NOTATION_NO_SYSTEM_ID:
  ------------------
  |  Branch (6206:5): [True: 411, False: 161k]
  ------------------
 6207|    411|      if (parser->m_declNotationPublicId && parser->m_notationDeclHandler) {
  ------------------
  |  Branch (6207:11): [True: 0, False: 411]
  |  Branch (6207:45): [True: 0, False: 0]
  ------------------
 6208|      0|        *eventEndPP = s;
 6209|      0|        beforeHandler(parser);
 6210|      0|        parser->m_notationDeclHandler(
 6211|      0|            parser->m_handlerArg, parser->m_declNotationName, parser->m_curBase,
 6212|      0|            0, parser->m_declNotationPublicId);
 6213|      0|        afterHandler(parser);
 6214|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6215|      0|      }
 6216|    411|      poolClear(&parser->m_tempPool);
 6217|    411|      break;
 6218|  1.52k|    case XML_ROLE_ERROR:
  ------------------
  |  Branch (6218:5): [True: 1.52k, False: 159k]
  ------------------
 6219|  1.52k|      switch (tok) {
 6220|     42|      case XML_TOK_PARAM_ENTITY_REF:
  ------------------
  |  |   95|     42|#  define XML_TOK_PARAM_ENTITY_REF 28
  ------------------
  |  Branch (6220:7): [True: 42, False: 1.48k]
  ------------------
 6221|       |        /* PE references in internal subset are
 6222|       |           not allowed within declarations. */
 6223|     42|        return XML_ERROR_PARAM_ENTITY_REF;
 6224|      2|      case XML_TOK_XML_DECL:
  ------------------
  |  |   77|      2|#  define XML_TOK_XML_DECL 12 /* XML decl or text decl */
  ------------------
  |  Branch (6224:7): [True: 2, False: 1.52k]
  ------------------
 6225|      2|        return XML_ERROR_MISPLACED_XML_PI;
 6226|  1.48k|      default:
  ------------------
  |  Branch (6226:7): [True: 1.48k, False: 44]
  ------------------
 6227|  1.48k|        return XML_ERROR_SYNTAX;
 6228|  1.52k|      }
 6229|      0|#ifdef XML_DTD
 6230|      0|    case XML_ROLE_IGNORE_SECT: {
  ------------------
  |  Branch (6230:5): [True: 0, False: 161k]
  ------------------
 6231|      0|      enum XML_Error result;
 6232|      0|      if (parser->m_defaultHandler)
  ------------------
  |  Branch (6232:11): [True: 0, False: 0]
  ------------------
 6233|      0|        reportDefault(parser, enc, s, next);
 6234|      0|      handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6235|      0|      result = doIgnoreSection(parser, enc, &next, end, nextPtr, haveMore);
 6236|      0|      if (result != XML_ERROR_NONE)
  ------------------
  |  Branch (6236:11): [True: 0, False: 0]
  ------------------
 6237|      0|        return result;
 6238|      0|      else if (! next) {
  ------------------
  |  Branch (6238:16): [True: 0, False: 0]
  ------------------
 6239|      0|        parser->m_processor = ignoreSectionProcessor;
 6240|      0|        return result;
 6241|      0|      }
 6242|      0|    } break;
 6243|      0|#endif /* XML_DTD */
 6244|  8.37k|    case XML_ROLE_GROUP_OPEN:
  ------------------
  |  Branch (6244:5): [True: 8.37k, False: 153k]
  ------------------
 6245|  8.37k|      if (parser->m_prologState.level >= parser->m_groupSize) {
  ------------------
  |  Branch (6245:11): [True: 584, False: 7.79k]
  ------------------
 6246|    584|        if (parser->m_groupSize) {
  ------------------
  |  Branch (6246:13): [True: 99, False: 485]
  ------------------
 6247|       |          /* Detect and prevent integer overflow */
 6248|     99|          if (parser->m_groupSize > SIZE_MAX / 2) {
  ------------------
  |  Branch (6248:15): [True: 0, False: 99]
  ------------------
 6249|      0|            return XML_ERROR_NO_MEMORY;
 6250|      0|          }
 6251|       |
 6252|     99|          char *const new_connector = REALLOC(parser, parser->m_groupConnector,
  ------------------
  |  |  836|     99|#  define REALLOC(parser, p, s) (expat_realloc((parser), (p), (s), __LINE__))
  ------------------
 6253|     99|                                              parser->m_groupSize *= 2);
 6254|     99|          if (new_connector == NULL) {
  ------------------
  |  Branch (6254:15): [True: 0, False: 99]
  ------------------
 6255|      0|            parser->m_groupSize /= 2;
 6256|      0|            return XML_ERROR_NO_MEMORY;
 6257|      0|          }
 6258|     99|          parser->m_groupConnector = new_connector;
 6259|    485|        } else {
 6260|    485|          parser->m_groupConnector = MALLOC(parser, parser->m_groupSize = 32);
  ------------------
  |  |  835|    485|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 6261|    485|          if (! parser->m_groupConnector) {
  ------------------
  |  Branch (6261:15): [True: 0, False: 485]
  ------------------
 6262|      0|            parser->m_groupSize = 0;
 6263|      0|            return XML_ERROR_NO_MEMORY;
 6264|      0|          }
 6265|    485|        }
 6266|    584|      }
 6267|  8.37k|      parser->m_groupConnector[parser->m_prologState.level] = 0;
 6268|  8.37k|      if (dtd->in_eldecl) {
  ------------------
  |  Branch (6268:11): [True: 0, False: 8.37k]
  ------------------
 6269|      0|        int myindex = nextScaffoldPart(parser);
 6270|      0|        if (myindex < 0)
  ------------------
  |  Branch (6270:13): [True: 0, False: 0]
  ------------------
 6271|      0|          return XML_ERROR_NO_MEMORY;
 6272|      0|        assert(dtd->scaffIndex != NULL);
  ------------------
  |  Branch (6272:9): [True: 0, False: 0]
  |  Branch (6272:9): [True: 0, False: 0]
  ------------------
 6273|      0|        if ((size_t)dtd->scaffLevel >= dtd->scaffIndexSize) {
  ------------------
  |  Branch (6273:13): [True: 0, False: 0]
  ------------------
 6274|       |          /* Detect and prevent integer overflow */
 6275|      0|          if (dtd->scaffIndexSize > SIZE_MAX / 2 / sizeof(int)) {
  ------------------
  |  Branch (6275:15): [True: 0, False: 0]
  ------------------
 6276|      0|            return XML_ERROR_NO_MEMORY;
 6277|      0|          }
 6278|      0|          assert(dtd->scaffIndexSize > 0);
  ------------------
  |  Branch (6278:11): [True: 0, False: 0]
  |  Branch (6278:11): [True: 0, False: 0]
  ------------------
 6279|      0|          const size_t new_size = dtd->scaffIndexSize * 2;
 6280|      0|          int *const new_scaff_index
 6281|      0|              = REALLOC(parser, dtd->scaffIndex, new_size * sizeof(int));
  ------------------
  |  |  836|      0|#  define REALLOC(parser, p, s) (expat_realloc((parser), (p), (s), __LINE__))
  ------------------
 6282|      0|          if (new_scaff_index == NULL) {
  ------------------
  |  Branch (6282:15): [True: 0, False: 0]
  ------------------
 6283|      0|            return XML_ERROR_NO_MEMORY;
 6284|      0|          }
 6285|      0|          dtd->scaffIndex = new_scaff_index;
 6286|      0|          dtd->scaffIndexSize = new_size;
 6287|      0|        }
 6288|      0|        dtd->scaffIndex[dtd->scaffLevel] = myindex;
 6289|      0|        dtd->scaffLevel++;
 6290|      0|        dtd->scaffold[myindex].type = XML_CTYPE_SEQ;
 6291|      0|        if (parser->m_elementDeclHandler)
  ------------------
  |  Branch (6291:13): [True: 0, False: 0]
  ------------------
 6292|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6293|      0|      }
 6294|  8.37k|      break;
 6295|  8.37k|    case XML_ROLE_GROUP_SEQUENCE:
  ------------------
  |  Branch (6295:5): [True: 1.63k, False: 159k]
  ------------------
 6296|  1.63k|      if (parser->m_groupConnector[parser->m_prologState.level] == ASCII_PIPE)
  ------------------
  |  |  124|  1.63k|#define ASCII_PIPE 0x7C
  ------------------
  |  Branch (6296:11): [True: 1, False: 1.63k]
  ------------------
 6297|      1|        return XML_ERROR_SYNTAX;
 6298|  1.63k|      parser->m_groupConnector[parser->m_prologState.level] = ASCII_COMMA;
  ------------------
  |  |  125|  1.63k|#define ASCII_COMMA 0x2C
  ------------------
 6299|  1.63k|      if (dtd->in_eldecl && parser->m_elementDeclHandler)
  ------------------
  |  Branch (6299:11): [True: 0, False: 1.63k]
  |  Branch (6299:29): [True: 0, False: 0]
  ------------------
 6300|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6301|  1.63k|      break;
 6302|  1.61k|    case XML_ROLE_GROUP_CHOICE:
  ------------------
  |  Branch (6302:5): [True: 1.61k, False: 159k]
  ------------------
 6303|  1.61k|      if (parser->m_groupConnector[parser->m_prologState.level] == ASCII_COMMA)
  ------------------
  |  |  125|  1.61k|#define ASCII_COMMA 0x2C
  ------------------
  |  Branch (6303:11): [True: 1, False: 1.61k]
  ------------------
 6304|      1|        return XML_ERROR_SYNTAX;
 6305|  1.61k|      if (dtd->in_eldecl
  ------------------
  |  Branch (6305:11): [True: 0, False: 1.61k]
  ------------------
 6306|      0|          && ! parser->m_groupConnector[parser->m_prologState.level]
  ------------------
  |  Branch (6306:14): [True: 0, False: 0]
  ------------------
 6307|      0|          && (dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type
  ------------------
  |  Branch (6307:14): [True: 0, False: 0]
  ------------------
 6308|      0|              != XML_CTYPE_MIXED)) {
 6309|      0|        dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type
 6310|      0|            = XML_CTYPE_CHOICE;
 6311|      0|        if (parser->m_elementDeclHandler)
  ------------------
  |  Branch (6311:13): [True: 0, False: 0]
  ------------------
 6312|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6313|      0|      }
 6314|  1.61k|      parser->m_groupConnector[parser->m_prologState.level] = ASCII_PIPE;
  ------------------
  |  |  124|  1.61k|#define ASCII_PIPE 0x7C
  ------------------
 6315|  1.61k|      break;
 6316|    789|    case XML_ROLE_PARAM_ENTITY_REF:
  ------------------
  |  Branch (6316:5): [True: 789, False: 160k]
  ------------------
 6317|    789|#ifdef XML_DTD
 6318|    789|    case XML_ROLE_INNER_PARAM_ENTITY_REF:
  ------------------
  |  Branch (6318:5): [True: 0, False: 161k]
  ------------------
 6319|    789|      dtd->hasParamEntityRefs = XML_TRUE;
  ------------------
  |  |   63|    789|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 6320|    789|      if (! parser->m_paramEntityParsing)
  ------------------
  |  Branch (6320:11): [True: 789, False: 0]
  ------------------
 6321|    789|        dtd->keepProcessing = dtd->standalone;
 6322|      0|      else {
 6323|      0|        const XML_Char *name;
 6324|      0|        ENTITY *entity;
 6325|      0|        name = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar,
 6326|      0|                               next - enc->minBytesPerChar);
 6327|      0|        if (! name)
  ------------------
  |  Branch (6327:13): [True: 0, False: 0]
  ------------------
 6328|      0|          return XML_ERROR_NO_MEMORY;
 6329|      0|        entity = (ENTITY *)lookup(parser, &dtd->paramEntities, name, 0);
 6330|      0|        poolDiscard(&dtd->pool);
  ------------------
  |  |  675|      0|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 6331|       |        /* first, determine if a check for an existing declaration is needed;
 6332|       |           if yes, check that the entity exists, and that it is internal,
 6333|       |           otherwise call the skipped entity handler
 6334|       |        */
 6335|      0|        if (parser->m_prologState.documentEntity
  ------------------
  |  Branch (6335:13): [True: 0, False: 0]
  ------------------
 6336|      0|            && (dtd->standalone ? ! parser->m_openInternalEntities
  ------------------
  |  Branch (6336:16): [True: 0, False: 0]
  |  Branch (6336:17): [True: 0, False: 0]
  ------------------
 6337|      0|                                : ! dtd->hasParamEntityRefs)) {
 6338|      0|          if (! entity)
  ------------------
  |  Branch (6338:15): [True: 0, False: 0]
  ------------------
 6339|      0|            return XML_ERROR_UNDEFINED_ENTITY;
 6340|      0|          else if (! entity->is_internal) {
  ------------------
  |  Branch (6340:20): [True: 0, False: 0]
  ------------------
 6341|       |            /* It's hard to exhaustively search the code to be sure,
 6342|       |             * but there doesn't seem to be a way of executing the
 6343|       |             * following line.  There are two cases:
 6344|       |             *
 6345|       |             * If 'standalone' is false, the DTD must have no
 6346|       |             * parameter entities or we wouldn't have passed the outer
 6347|       |             * 'if' statement.  That means the only entity in the hash
 6348|       |             * table is the external subset name "#" which cannot be
 6349|       |             * given as a parameter entity name in XML syntax, so the
 6350|       |             * lookup must have returned NULL and we don't even reach
 6351|       |             * the test for an internal entity.
 6352|       |             *
 6353|       |             * If 'standalone' is true, it does not seem to be
 6354|       |             * possible to create entities taking this code path that
 6355|       |             * are not internal entities, so fail the test above.
 6356|       |             *
 6357|       |             * Because this analysis is very uncertain, the code is
 6358|       |             * being left in place and merely removed from the
 6359|       |             * coverage test statistics.
 6360|       |             */
 6361|      0|            return XML_ERROR_ENTITY_DECLARED_IN_PE; /* LCOV_EXCL_LINE */
 6362|      0|          }
 6363|      0|        } else if (! entity) {
  ------------------
  |  Branch (6363:20): [True: 0, False: 0]
  ------------------
 6364|      0|          dtd->keepProcessing = dtd->standalone;
 6365|       |          /* cannot report skipped entities in declarations */
 6366|      0|          if ((role == XML_ROLE_PARAM_ENTITY_REF)
  ------------------
  |  Branch (6366:15): [True: 0, False: 0]
  ------------------
 6367|      0|              && parser->m_skippedEntityHandler) {
  ------------------
  |  Branch (6367:18): [True: 0, False: 0]
  ------------------
 6368|      0|            beforeHandler(parser);
 6369|      0|            parser->m_skippedEntityHandler(parser->m_handlerArg, name, 1);
 6370|      0|            afterHandler(parser);
 6371|      0|            handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6372|      0|          }
 6373|      0|          break;
 6374|      0|        }
 6375|      0|        if (entity->open)
  ------------------
  |  Branch (6375:13): [True: 0, False: 0]
  ------------------
 6376|      0|          return XML_ERROR_RECURSIVE_ENTITY_REF;
 6377|      0|        if (entity->textPtr) {
  ------------------
  |  Branch (6377:13): [True: 0, False: 0]
  ------------------
 6378|      0|          enum XML_Error result;
 6379|      0|          bool betweenDecl = (role == XML_ROLE_PARAM_ENTITY_REF);
 6380|      0|          result = processEntity(parser, entity, betweenDecl, ENTITY_INTERNAL);
 6381|      0|          if (result != XML_ERROR_NONE)
  ------------------
  |  Branch (6381:15): [True: 0, False: 0]
  ------------------
 6382|      0|            return result;
 6383|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6384|      0|          break;
 6385|      0|        }
 6386|      0|        if (parser->m_externalEntityRefHandler) {
  ------------------
  |  Branch (6386:13): [True: 0, False: 0]
  ------------------
 6387|      0|          dtd->paramEntityRead = false;
 6388|      0|          entity->open = true;
 6389|      0|          entityTrackingOnOpen(parser, entity, __LINE__);
 6390|      0|          beforeHandler(parser);
 6391|      0|          const int status = parser->m_externalEntityRefHandler(
 6392|      0|              parser->m_externalEntityRefHandlerArg, 0, entity->base,
 6393|      0|              entity->systemId, entity->publicId);
 6394|      0|          afterHandler(parser);
 6395|      0|          if (! status) {
  ------------------
  |  Branch (6395:15): [True: 0, False: 0]
  ------------------
 6396|      0|            entityTrackingOnClose(parser, entity, __LINE__);
 6397|      0|            entity->open = false;
 6398|      0|            return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
 6399|      0|          }
 6400|      0|          entityTrackingOnClose(parser, entity, __LINE__);
 6401|      0|          entity->open = false;
 6402|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6403|      0|          if (! dtd->paramEntityRead) {
  ------------------
  |  Branch (6403:15): [True: 0, False: 0]
  ------------------
 6404|      0|            dtd->keepProcessing = dtd->standalone;
 6405|      0|            break;
 6406|      0|          }
 6407|      0|        } else {
 6408|      0|          dtd->keepProcessing = dtd->standalone;
 6409|      0|          break;
 6410|      0|        }
 6411|      0|      }
 6412|    789|#endif /* XML_DTD */
 6413|    789|      if (! dtd->standalone && parser->m_notStandaloneHandler) {
  ------------------
  |  Branch (6413:11): [True: 789, False: 0]
  |  Branch (6413:32): [True: 0, False: 789]
  ------------------
 6414|      0|        beforeHandler(parser);
 6415|      0|        const int status = parser->m_notStandaloneHandler(parser->m_handlerArg);
 6416|      0|        afterHandler(parser);
 6417|      0|        if (! status)
  ------------------
  |  Branch (6417:13): [True: 0, False: 0]
  ------------------
 6418|      0|          return XML_ERROR_NOT_STANDALONE;
 6419|      0|      }
 6420|    789|      break;
 6421|       |
 6422|       |      /* Element declaration stuff */
 6423|       |
 6424|  1.55k|    case XML_ROLE_ELEMENT_NAME:
  ------------------
  |  Branch (6424:5): [True: 1.55k, False: 159k]
  ------------------
 6425|  1.55k|      if (parser->m_elementDeclHandler) {
  ------------------
  |  Branch (6425:11): [True: 0, False: 1.55k]
  ------------------
 6426|      0|        parser->m_declElementType = getElementType(parser, enc, s, next);
 6427|      0|        if (! parser->m_declElementType)
  ------------------
  |  Branch (6427:13): [True: 0, False: 0]
  ------------------
 6428|      0|          return XML_ERROR_NO_MEMORY;
 6429|      0|        dtd->scaffLevel = 0;
 6430|      0|        dtd->scaffCount = 0;
 6431|      0|        dtd->in_eldecl = true;
 6432|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6433|      0|      }
 6434|  1.55k|      break;
 6435|       |
 6436|  1.55k|    case XML_ROLE_CONTENT_ANY:
  ------------------
  |  Branch (6436:5): [True: 82, False: 161k]
  ------------------
 6437|    148|    case XML_ROLE_CONTENT_EMPTY:
  ------------------
  |  Branch (6437:5): [True: 66, False: 161k]
  ------------------
 6438|    148|      if (dtd->in_eldecl) {
  ------------------
  |  Branch (6438:11): [True: 0, False: 148]
  ------------------
 6439|      0|        if (parser->m_elementDeclHandler) {
  ------------------
  |  Branch (6439:13): [True: 0, False: 0]
  ------------------
 6440|       |          // NOTE: We are avoiding MALLOC(..) here to so that
 6441|       |          //       applications that are not using XML_FreeContentModel but
 6442|       |          //       plain free(..) or .free_fcn() to free the content model's
 6443|       |          //       memory are safe.
 6444|      0|          XML_Content *content = parser->m_mem.malloc_fcn(sizeof(XML_Content));
 6445|      0|          if (! content)
  ------------------
  |  Branch (6445:15): [True: 0, False: 0]
  ------------------
 6446|      0|            return XML_ERROR_NO_MEMORY;
 6447|      0|          content->quant = XML_CQUANT_NONE;
 6448|      0|          content->name = NULL;
 6449|      0|          content->numchildren = 0;
 6450|      0|          content->children = NULL;
 6451|      0|          content->type = ((role == XML_ROLE_CONTENT_ANY) ? XML_CTYPE_ANY
  ------------------
  |  Branch (6451:28): [True: 0, False: 0]
  ------------------
 6452|      0|                                                          : XML_CTYPE_EMPTY);
 6453|      0|          *eventEndPP = s;
 6454|      0|          beforeHandler(parser);
 6455|      0|          parser->m_elementDeclHandler(
 6456|      0|              parser->m_handlerArg, parser->m_declElementType->name, content);
 6457|      0|          afterHandler(parser);
 6458|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6459|      0|        }
 6460|      0|        dtd->in_eldecl = false;
 6461|      0|      }
 6462|    148|      break;
 6463|       |
 6464|    300|    case XML_ROLE_CONTENT_PCDATA:
  ------------------
  |  Branch (6464:5): [True: 300, False: 161k]
  ------------------
 6465|    300|      if (dtd->in_eldecl) {
  ------------------
  |  Branch (6465:11): [True: 0, False: 300]
  ------------------
 6466|      0|        dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel - 1]].type
 6467|      0|            = XML_CTYPE_MIXED;
 6468|      0|        if (parser->m_elementDeclHandler)
  ------------------
  |  Branch (6468:13): [True: 0, False: 0]
  ------------------
 6469|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6470|      0|      }
 6471|    300|      break;
 6472|       |
 6473|  4.37k|    case XML_ROLE_CONTENT_ELEMENT:
  ------------------
  |  Branch (6473:5): [True: 4.37k, False: 157k]
  ------------------
 6474|  4.37k|      quant = XML_CQUANT_NONE;
 6475|  4.37k|      goto elementContent;
 6476|    277|    case XML_ROLE_CONTENT_ELEMENT_OPT:
  ------------------
  |  Branch (6476:5): [True: 277, False: 161k]
  ------------------
 6477|    277|      quant = XML_CQUANT_OPT;
 6478|    277|      goto elementContent;
 6479|    295|    case XML_ROLE_CONTENT_ELEMENT_REP:
  ------------------
  |  Branch (6479:5): [True: 295, False: 161k]
  ------------------
 6480|    295|      quant = XML_CQUANT_REP;
 6481|    295|      goto elementContent;
 6482|    333|    case XML_ROLE_CONTENT_ELEMENT_PLUS:
  ------------------
  |  Branch (6482:5): [True: 333, False: 161k]
  ------------------
 6483|    333|      quant = XML_CQUANT_PLUS;
 6484|  5.28k|    elementContent:
 6485|  5.28k|      if (dtd->in_eldecl) {
  ------------------
  |  Branch (6485:11): [True: 0, False: 5.28k]
  ------------------
 6486|      0|        ELEMENT_TYPE *el;
 6487|      0|        const XML_Char *name;
 6488|      0|        size_t nameLen;
 6489|      0|        const char *nxt
 6490|      0|            = (quant == XML_CQUANT_NONE ? next : next - enc->minBytesPerChar);
  ------------------
  |  Branch (6490:16): [True: 0, False: 0]
  ------------------
 6491|      0|        int myindex = nextScaffoldPart(parser);
 6492|      0|        if (myindex < 0)
  ------------------
  |  Branch (6492:13): [True: 0, False: 0]
  ------------------
 6493|      0|          return XML_ERROR_NO_MEMORY;
 6494|      0|        dtd->scaffold[myindex].type = XML_CTYPE_NAME;
 6495|      0|        dtd->scaffold[myindex].quant = quant;
 6496|      0|        el = getElementType(parser, enc, s, nxt);
 6497|      0|        if (! el)
  ------------------
  |  Branch (6497:13): [True: 0, False: 0]
  ------------------
 6498|      0|          return XML_ERROR_NO_MEMORY;
 6499|      0|        name = el->name;
 6500|      0|        dtd->scaffold[myindex].name = name;
 6501|      0|        nameLen = xcslen(name) + /*null terminator*/ 1;
 6502|       |
 6503|       |        /* Detect and prevent integer overflow */
 6504|      0|        if (nameLen > UINT_MAX - dtd->contentStringLen) {
  ------------------
  |  Branch (6504:13): [True: 0, False: 0]
  ------------------
 6505|      0|          return XML_ERROR_NO_MEMORY;
 6506|      0|        }
 6507|       |
 6508|      0|        dtd->contentStringLen += (unsigned)nameLen;
 6509|      0|        if (parser->m_elementDeclHandler)
  ------------------
  |  Branch (6509:13): [True: 0, False: 0]
  ------------------
 6510|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6511|      0|      }
 6512|  5.28k|      break;
 6513|       |
 6514|  5.28k|    case XML_ROLE_GROUP_CLOSE:
  ------------------
  |  Branch (6514:5): [True: 1.84k, False: 159k]
  ------------------
 6515|  1.84k|      quant = XML_CQUANT_NONE;
 6516|  1.84k|      goto closeGroup;
 6517|    253|    case XML_ROLE_GROUP_CLOSE_OPT:
  ------------------
  |  Branch (6517:5): [True: 253, False: 161k]
  ------------------
 6518|    253|      quant = XML_CQUANT_OPT;
 6519|    253|      goto closeGroup;
 6520|    279|    case XML_ROLE_GROUP_CLOSE_REP:
  ------------------
  |  Branch (6520:5): [True: 279, False: 161k]
  ------------------
 6521|    279|      quant = XML_CQUANT_REP;
 6522|    279|      goto closeGroup;
 6523|    326|    case XML_ROLE_GROUP_CLOSE_PLUS:
  ------------------
  |  Branch (6523:5): [True: 326, False: 161k]
  ------------------
 6524|    326|      quant = XML_CQUANT_PLUS;
 6525|  2.70k|    closeGroup:
 6526|  2.70k|      if (dtd->in_eldecl) {
  ------------------
  |  Branch (6526:11): [True: 0, False: 2.70k]
  ------------------
 6527|      0|        if (parser->m_elementDeclHandler)
  ------------------
  |  Branch (6527:13): [True: 0, False: 0]
  ------------------
 6528|      0|          handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6529|      0|        dtd->scaffLevel--;
 6530|      0|        dtd->scaffold[dtd->scaffIndex[dtd->scaffLevel]].quant = quant;
 6531|      0|        if (dtd->scaffLevel == 0) {
  ------------------
  |  Branch (6531:13): [True: 0, False: 0]
  ------------------
 6532|      0|          if (! handleDefault) {
  ------------------
  |  Branch (6532:15): [True: 0, False: 0]
  ------------------
 6533|      0|            XML_Content *model = build_model(parser);
 6534|      0|            if (! model)
  ------------------
  |  Branch (6534:17): [True: 0, False: 0]
  ------------------
 6535|      0|              return XML_ERROR_NO_MEMORY;
 6536|      0|            *eventEndPP = s;
 6537|      0|            beforeHandler(parser);
 6538|      0|            parser->m_elementDeclHandler(
 6539|      0|                parser->m_handlerArg, parser->m_declElementType->name, model);
 6540|      0|            afterHandler(parser);
 6541|      0|          }
 6542|      0|          dtd->in_eldecl = false;
 6543|      0|          dtd->contentStringLen = 0;
 6544|      0|        }
 6545|      0|      }
 6546|  2.70k|      break;
 6547|       |      /* End element declaration stuff */
 6548|       |
 6549|  3.12k|    case XML_ROLE_PI:
  ------------------
  |  Branch (6549:5): [True: 3.12k, False: 158k]
  ------------------
 6550|  3.12k|      if (! reportProcessingInstruction(parser, enc, s, next))
  ------------------
  |  Branch (6550:11): [True: 0, False: 3.12k]
  ------------------
 6551|      0|        return XML_ERROR_NO_MEMORY;
 6552|  3.12k|      handleDefault = XML_FALSE;
  ------------------
  |  |   64|  3.12k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6553|  3.12k|      break;
 6554|    824|    case XML_ROLE_COMMENT:
  ------------------
  |  Branch (6554:5): [True: 824, False: 160k]
  ------------------
 6555|    824|      if (! reportComment(parser, enc, s, next))
  ------------------
  |  Branch (6555:11): [True: 0, False: 824]
  ------------------
 6556|      0|        return XML_ERROR_NO_MEMORY;
 6557|    824|      handleDefault = XML_FALSE;
  ------------------
  |  |   64|    824|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6558|    824|      break;
 6559|  1.43k|    case XML_ROLE_NONE:
  ------------------
  |  Branch (6559:5): [True: 1.43k, False: 160k]
  ------------------
 6560|  1.43k|      switch (tok) {
  ------------------
  |  Branch (6560:15): [True: 0, False: 1.43k]
  ------------------
 6561|      0|      case XML_TOK_BOM:
  ------------------
  |  |   79|      0|#  define XML_TOK_BOM 14 /* Byte order mark */
  ------------------
  |  Branch (6561:7): [True: 0, False: 1.43k]
  ------------------
 6562|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6563|      0|        break;
 6564|  1.43k|      }
 6565|  1.43k|      break;
 6566|  17.7k|    case XML_ROLE_DOCTYPE_NONE:
  ------------------
  |  Branch (6566:5): [True: 17.7k, False: 143k]
  ------------------
 6567|  17.7k|      if (parser->m_startDoctypeDeclHandler)
  ------------------
  |  Branch (6567:11): [True: 0, False: 17.7k]
  ------------------
 6568|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6569|  17.7k|      break;
 6570|  25.2k|    case XML_ROLE_ENTITY_NONE:
  ------------------
  |  Branch (6570:5): [True: 25.2k, False: 136k]
  ------------------
 6571|  25.2k|      if (dtd->keepProcessing && parser->m_entityDeclHandler)
  ------------------
  |  Branch (6571:11): [True: 22.9k, False: 2.32k]
  |  Branch (6571:34): [True: 0, False: 22.9k]
  ------------------
 6572|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6573|  25.2k|      break;
 6574|  4.92k|    case XML_ROLE_NOTATION_NONE:
  ------------------
  |  Branch (6574:5): [True: 4.92k, False: 156k]
  ------------------
 6575|  4.92k|      if (parser->m_notationDeclHandler)
  ------------------
  |  Branch (6575:11): [True: 0, False: 4.92k]
  ------------------
 6576|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6577|  4.92k|      break;
 6578|  22.5k|    case XML_ROLE_ATTLIST_NONE:
  ------------------
  |  Branch (6578:5): [True: 22.5k, False: 138k]
  ------------------
 6579|  22.5k|      if (dtd->keepProcessing && parser->m_attlistDeclHandler)
  ------------------
  |  Branch (6579:11): [True: 20.6k, False: 1.87k]
  |  Branch (6579:34): [True: 0, False: 20.6k]
  ------------------
 6580|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6581|  22.5k|      break;
 6582|  9.32k|    case XML_ROLE_ELEMENT_NONE:
  ------------------
  |  Branch (6582:5): [True: 9.32k, False: 152k]
  ------------------
 6583|  9.32k|      if (parser->m_elementDeclHandler)
  ------------------
  |  Branch (6583:11): [True: 0, False: 9.32k]
  ------------------
 6584|      0|        handleDefault = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6585|  9.32k|      break;
 6586|   161k|    } /* end of big switch */
 6587|       |
 6588|   151k|    if (handleDefault && parser->m_defaultHandler)
  ------------------
  |  Branch (6588:9): [True: 147k, False: 4.08k]
  |  Branch (6588:26): [True: 0, False: 147k]
  ------------------
 6589|      0|      reportDefault(parser, enc, s, next);
 6590|       |
 6591|   151k|    switch (parser->m_parsingStatus.parsing) {
 6592|      0|    case XML_SUSPENDED:
  ------------------
  |  Branch (6592:5): [True: 0, False: 151k]
  ------------------
 6593|      0|      *nextPtr = next;
 6594|      0|      return XML_ERROR_NONE;
 6595|      0|    case XML_FINISHED:
  ------------------
  |  Branch (6595:5): [True: 0, False: 151k]
  ------------------
 6596|      0|      return XML_ERROR_ABORTED;
 6597|   151k|    case XML_PARSING:
  ------------------
  |  Branch (6597:5): [True: 151k, False: 0]
  ------------------
 6598|   151k|      if (parser->m_reenter) {
  ------------------
  |  Branch (6598:11): [True: 0, False: 151k]
  ------------------
 6599|      0|        *nextPtr = next;
 6600|      0|        return XML_ERROR_NONE;
 6601|      0|      }
 6602|   151k|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|   151k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 6603|   151k|    default:
  ------------------
  |  Branch (6603:5): [True: 0, False: 151k]
  ------------------
 6604|   151k|      s = next;
 6605|   151k|      tok = XmlPrologTok(enc, s, end, &next);
  ------------------
  |  |  226|   151k|    XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |  223|   151k|    (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
  |  |  ------------------
  ------------------
 6606|   151k|    }
 6607|   151k|  }
 6608|       |  /* not reached */
 6609|  12.0k|}
xmlparse.c:accountingDiffTolerated:
 9018|  17.2M|                        enum XML_Account account) {
 9019|       |  /* Note: We need to check the token type *first* to be sure that
 9020|       |   *       we can even access variable <after>, safely.
 9021|       |   *       E.g. for XML_TOK_NONE <after> may hold an invalid pointer. */
 9022|  17.2M|  switch (tok) {
  ------------------
  |  Branch (9022:11): [True: 700k, False: 16.5M]
  ------------------
 9023|  3.44k|  case XML_TOK_INVALID:
  ------------------
  |  |   57|  3.44k|#  define XML_TOK_INVALID 0
  ------------------
  |  Branch (9023:3): [True: 3.44k, False: 17.2M]
  ------------------
 9024|  4.36k|  case XML_TOK_PARTIAL:
  ------------------
  |  |   56|  4.36k|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  |  Branch (9024:3): [True: 924, False: 17.2M]
  ------------------
 9025|  4.40k|  case XML_TOK_PARTIAL_CHAR:
  ------------------
  |  |   55|  4.40k|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  ------------------
  |  Branch (9025:3): [True: 43, False: 17.2M]
  ------------------
 9026|   700k|  case XML_TOK_NONE:
  ------------------
  |  |   51|   700k|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
  |  Branch (9026:3): [True: 696k, False: 16.5M]
  ------------------
 9027|   700k|    return XML_TRUE;
  ------------------
  |  |   63|   700k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 9028|  17.2M|  }
 9029|       |
 9030|  16.5M|  if (account == XML_ACCOUNT_NONE)
  ------------------
  |  Branch (9030:7): [True: 40.1k, False: 16.5M]
  ------------------
 9031|  40.1k|    return XML_TRUE; /* because these bytes have been accounted for, already */
  ------------------
  |  |   63|  40.1k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 9032|       |
 9033|  16.5M|  unsigned int levelsAwayFromRootParser;
 9034|  16.5M|  const XML_Parser rootParser
 9035|  16.5M|      = getRootParserOf(originParser, &levelsAwayFromRootParser);
 9036|  16.5M|  assert(! rootParser->m_parentParser);
  ------------------
  |  Branch (9036:3): [True: 0, False: 16.5M]
  |  Branch (9036:3): [True: 16.5M, False: 0]
  ------------------
 9037|       |
 9038|  16.5M|  const int isDirect
 9039|  16.5M|      = (account == XML_ACCOUNT_DIRECT) && (originParser == rootParser);
  ------------------
  |  Branch (9039:9): [True: 234k, False: 16.2M]
  |  Branch (9039:44): [True: 234k, False: 0]
  ------------------
 9040|  16.5M|  const ptrdiff_t bytesMore = after - before;
 9041|       |
 9042|  16.5M|  XmlBigCount *const additionTarget
 9043|  16.5M|      = isDirect ? &rootParser->m_accounting.countBytesDirect
  ------------------
  |  Branch (9043:9): [True: 234k, False: 16.2M]
  ------------------
 9044|  16.5M|                 : &rootParser->m_accounting.countBytesIndirect;
 9045|       |
 9046|       |  /* Detect and avoid integer overflow */
 9047|  16.5M|  if (*additionTarget > (XmlBigCount)(-1) - (XmlBigCount)bytesMore)
  ------------------
  |  Branch (9047:7): [True: 0, False: 16.5M]
  ------------------
 9048|      0|    return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 9049|  16.5M|  *additionTarget += bytesMore;
 9050|       |
 9051|  16.5M|  const XmlBigCount countBytesOutput
 9052|  16.5M|      = rootParser->m_accounting.countBytesDirect
 9053|  16.5M|        + rootParser->m_accounting.countBytesIndirect;
 9054|  16.5M|  const float amplificationFactor
 9055|  16.5M|      = accountingGetCurrentAmplification(rootParser);
 9056|  16.5M|  const XML_Bool tolerated
 9057|  16.5M|      = (countBytesOutput < rootParser->m_accounting.activationThresholdBytes)
  ------------------
  |  Branch (9057:9): [True: 16.5M, False: 23]
  ------------------
 9058|     23|        || (amplificationFactor
  ------------------
  |  Branch (9058:12): [True: 23, False: 0]
  ------------------
 9059|     23|            <= rootParser->m_accounting.maximumAmplificationFactor);
 9060|       |
 9061|  16.5M|  if (rootParser->m_accounting.debugLevel >= 2u) {
  ------------------
  |  Branch (9061:7): [True: 0, False: 16.5M]
  ------------------
 9062|      0|    accountingReportStats(rootParser, "");
 9063|      0|    accountingReportDiff(rootParser, levelsAwayFromRootParser, before, after,
 9064|      0|                         bytesMore, source_line, account);
 9065|      0|  }
 9066|       |
 9067|  16.5M|  return tolerated;
 9068|  16.5M|}
xmlparse.c:accountingGetCurrentAmplification:
 8937|  16.5M|accountingGetCurrentAmplification(XML_Parser rootParser) {
 8938|       |  //                                          1.........1.........12 => 22
 8939|  16.5M|  const size_t lenOfShortestInclude = sizeof("<!ENTITY a SYSTEM 'b'>") - 1;
 8940|  16.5M|  const XmlBigCount countBytesOutput
 8941|  16.5M|      = rootParser->m_accounting.countBytesDirect
 8942|  16.5M|        + rootParser->m_accounting.countBytesIndirect;
 8943|  16.5M|  const float amplificationFactor
 8944|  16.5M|      = rootParser->m_accounting.countBytesDirect
  ------------------
  |  Branch (8944:9): [True: 16.5M, False: 0]
  ------------------
 8945|  16.5M|            ? ((float)countBytesOutput
 8946|  16.5M|               / (float)(rootParser->m_accounting.countBytesDirect))
 8947|  16.5M|            : ((float)(lenOfShortestInclude
 8948|      0|                       + rootParser->m_accounting.countBytesIndirect)
 8949|      0|               / (float)lenOfShortestInclude);
 8950|  16.5M|  assert(! rootParser->m_parentParser);
  ------------------
  |  Branch (8950:3): [True: 0, False: 16.5M]
  |  Branch (8950:3): [True: 16.5M, False: 0]
  ------------------
 8951|  16.5M|  return amplificationFactor;
 8952|  16.5M|}
xmlparse.c:processXmlDecl:
 5126|    481|               const char *next) {
 5127|    481|  const char *encodingName = NULL;
 5128|    481|  const XML_Char *storedEncName = NULL;
 5129|    481|  const ENCODING *newEncoding = NULL;
 5130|    481|  const char *version = NULL;
 5131|    481|  const char *versionend = NULL;
 5132|    481|  const XML_Char *storedversion = NULL;
 5133|    481|  int standalone = -1;
 5134|       |
 5135|    481|#if XML_GE == 1
 5136|    481|  if (! accountingDiffTolerated(parser, XML_TOK_XML_DECL, s, next, __LINE__,
  ------------------
  |  |   77|    481|#  define XML_TOK_XML_DECL 12 /* XML decl or text decl */
  ------------------
  |  Branch (5136:7): [True: 0, False: 481]
  ------------------
 5137|    481|                                XML_ACCOUNT_DIRECT)) {
 5138|      0|    accountingOnAbort(parser);
 5139|      0|    return XML_ERROR_AMPLIFICATION_LIMIT_BREACH;
 5140|      0|  }
 5141|    481|#endif
 5142|       |
 5143|    481|  if (! (parser->m_ns ? XmlParseXmlDeclNS : XmlParseXmlDecl)(
  ------------------
  |  Branch (5143:7): [True: 344, False: 137]
  |  Branch (5143:10): [True: 269, False: 212]
  ------------------
 5144|    481|          isGeneralTextEntity, parser->m_encoding, s, next, &parser->m_eventPtr,
 5145|    481|          &version, &versionend, &encodingName, &newEncoding, &standalone)) {
 5146|    344|    if (isGeneralTextEntity)
  ------------------
  |  Branch (5146:9): [True: 0, False: 344]
  ------------------
 5147|      0|      return XML_ERROR_TEXT_DECL;
 5148|    344|    else
 5149|    344|      return XML_ERROR_XML_DECL;
 5150|    344|  }
 5151|    137|  if (! isGeneralTextEntity && standalone == 1) {
  ------------------
  |  Branch (5151:7): [True: 137, False: 0]
  |  Branch (5151:32): [True: 0, False: 137]
  ------------------
 5152|      0|    parser->m_dtd->standalone = XML_TRUE;
  ------------------
  |  |   63|      0|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 5153|      0|#ifdef XML_DTD
 5154|      0|    if (parser->m_paramEntityParsing
  ------------------
  |  Branch (5154:9): [True: 0, False: 0]
  ------------------
 5155|      0|        == XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE)
 5156|      0|      parser->m_paramEntityParsing = XML_PARAM_ENTITY_PARSING_NEVER;
 5157|      0|#endif /* XML_DTD */
 5158|      0|  }
 5159|    137|  if (parser->m_xmlDeclHandler) {
  ------------------
  |  Branch (5159:7): [True: 0, False: 137]
  ------------------
 5160|      0|    if (encodingName != NULL) {
  ------------------
  |  Branch (5160:9): [True: 0, False: 0]
  ------------------
 5161|      0|      storedEncName = poolStoreString(
 5162|      0|          &parser->m_temp2Pool, parser->m_encoding, encodingName,
 5163|      0|          encodingName + XmlNameLength(parser->m_encoding, encodingName));
  ------------------
  |  |  256|      0|#  define XmlNameLength(enc, ptr) (((enc)->nameLength)(enc, ptr))
  ------------------
 5164|      0|      if (! storedEncName)
  ------------------
  |  Branch (5164:11): [True: 0, False: 0]
  ------------------
 5165|      0|        return XML_ERROR_NO_MEMORY;
 5166|      0|      poolFinish(&parser->m_temp2Pool);
  ------------------
  |  |  676|      0|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 5167|      0|    }
 5168|      0|    if (version) {
  ------------------
  |  Branch (5168:9): [True: 0, False: 0]
  ------------------
 5169|      0|      storedversion
 5170|      0|          = poolStoreString(&parser->m_temp2Pool, parser->m_encoding, version,
 5171|      0|                            versionend - parser->m_encoding->minBytesPerChar);
 5172|      0|      if (! storedversion)
  ------------------
  |  Branch (5172:11): [True: 0, False: 0]
  ------------------
 5173|      0|        return XML_ERROR_NO_MEMORY;
 5174|      0|    }
 5175|      0|    beforeHandler(parser);
 5176|      0|    parser->m_xmlDeclHandler(parser->m_handlerArg, storedversion, storedEncName,
 5177|      0|                             standalone);
 5178|      0|    afterHandler(parser);
 5179|    137|  } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (5179:14): [True: 0, False: 137]
  ------------------
 5180|      0|    reportDefault(parser, parser->m_encoding, s, next);
 5181|    137|  if (parser->m_protocolEncodingName == NULL) {
  ------------------
  |  Branch (5181:7): [True: 0, False: 137]
  ------------------
 5182|      0|    if (newEncoding) {
  ------------------
  |  Branch (5182:9): [True: 0, False: 0]
  ------------------
 5183|       |      /* Check that the specified encoding does not conflict with what
 5184|       |       * the parser has already deduced.  Do we have the same number
 5185|       |       * of bytes in the smallest representation of a character?  If
 5186|       |       * this is UTF-16, is it the same endianness?
 5187|       |       */
 5188|      0|      if (newEncoding->minBytesPerChar != parser->m_encoding->minBytesPerChar
  ------------------
  |  Branch (5188:11): [True: 0, False: 0]
  ------------------
 5189|      0|          || (newEncoding->minBytesPerChar == 2
  ------------------
  |  Branch (5189:15): [True: 0, False: 0]
  ------------------
 5190|      0|              && newEncoding != parser->m_encoding)) {
  ------------------
  |  Branch (5190:18): [True: 0, False: 0]
  ------------------
 5191|      0|        parser->m_eventPtr = encodingName;
 5192|      0|        return XML_ERROR_INCORRECT_ENCODING;
 5193|      0|      }
 5194|      0|      parser->m_encoding = newEncoding;
 5195|      0|    } else if (encodingName) {
  ------------------
  |  Branch (5195:16): [True: 0, False: 0]
  ------------------
 5196|      0|      enum XML_Error result;
 5197|      0|      if (! storedEncName) {
  ------------------
  |  Branch (5197:11): [True: 0, False: 0]
  ------------------
 5198|      0|        storedEncName = poolStoreString(
 5199|      0|            &parser->m_temp2Pool, parser->m_encoding, encodingName,
 5200|      0|            encodingName + XmlNameLength(parser->m_encoding, encodingName));
  ------------------
  |  |  256|      0|#  define XmlNameLength(enc, ptr) (((enc)->nameLength)(enc, ptr))
  ------------------
 5201|      0|        if (! storedEncName)
  ------------------
  |  Branch (5201:13): [True: 0, False: 0]
  ------------------
 5202|      0|          return XML_ERROR_NO_MEMORY;
 5203|      0|      }
 5204|      0|      result = handleUnknownEncoding(parser, storedEncName);
 5205|      0|      poolClear(&parser->m_temp2Pool);
 5206|      0|      if (result == XML_ERROR_UNKNOWN_ENCODING)
  ------------------
  |  Branch (5206:11): [True: 0, False: 0]
  ------------------
 5207|      0|        parser->m_eventPtr = encodingName;
 5208|      0|      return result;
 5209|      0|    }
 5210|      0|  }
 5211|       |
 5212|    137|  if (storedEncName || storedversion)
  ------------------
  |  Branch (5212:7): [True: 0, False: 137]
  |  Branch (5212:24): [True: 0, False: 137]
  ------------------
 5213|      0|    poolClear(&parser->m_temp2Pool);
 5214|       |
 5215|    137|  return XML_ERROR_NONE;
 5216|    137|}
xmlparse.c:poolStoreString:
 8523|   807k|                const char *end) {
 8524|   807k|  if (! poolAppend(pool, enc, ptr, end))
  ------------------
  |  Branch (8524:7): [True: 0, False: 807k]
  ------------------
 8525|      0|    return NULL;
 8526|   807k|  if (! poolAppendChar(pool, 0))
  ------------------
  |  Branch (8526:7): [True: 0, False: 807k]
  ------------------
 8527|      0|    return NULL;
 8528|   807k|  return pool->start;
 8529|   807k|}
xmlparse.c:lookup:
 8356|   860k|lookup(XML_Parser parser, HASH_TABLE *table, KEY name, size_t createSize) {
 8357|   860k|  return lookupWithLength(parser, table, name, keylen(name), createSize);
 8358|   860k|}
xmlparse.c:lookupWithLength:
 8250|   860k|                 size_t createSize) {
 8251|   860k|  size_t i;
 8252|   860k|  if (table->size == 0) {
  ------------------
  |  Branch (8252:7): [True: 26.9k, False: 833k]
  ------------------
 8253|  26.9k|    size_t tsize;
 8254|  26.9k|    if (! createSize)
  ------------------
  |  Branch (8254:9): [True: 8.43k, False: 18.5k]
  ------------------
 8255|  8.43k|      return NULL;
 8256|  18.5k|    table->power = INIT_POWER;
  ------------------
  |  | 8183|  18.5k|#define INIT_POWER 6
  ------------------
 8257|       |    /* table->size is a power of 2 */
 8258|  18.5k|    table->size = (size_t)1 << INIT_POWER;
  ------------------
  |  | 8183|  18.5k|#define INIT_POWER 6
  ------------------
 8259|  18.5k|    tsize = table->size * sizeof(NAMED *);
 8260|  18.5k|    table->v = MALLOC(table->parser, tsize);
  ------------------
  |  |  835|  18.5k|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 8261|  18.5k|    if (! table->v) {
  ------------------
  |  Branch (8261:9): [True: 0, False: 18.5k]
  ------------------
 8262|      0|      table->size = 0;
 8263|      0|      return NULL;
 8264|      0|    }
 8265|  18.5k|    memset(table->v, 0, tsize);
 8266|  18.5k|    i = hash(parser, name, nameLen) & ((unsigned long)table->size - 1);
 8267|   833k|  } else {
 8268|   833k|    unsigned long h = hash(parser, name, nameLen);
 8269|   833k|    unsigned long mask = (unsigned long)table->size - 1;
 8270|   833k|    unsigned char step = 0;
 8271|   833k|    i = h & mask;
 8272|   854k|    while (table->v[i]) {
  ------------------
  |  Branch (8272:12): [True: 827k, False: 27.0k]
  ------------------
 8273|   827k|      if (keyeq(name, nameLen, table->v[i]->name))
  ------------------
  |  Branch (8273:11): [True: 806k, False: 21.8k]
  ------------------
 8274|   806k|        return table->v[i];
 8275|  21.8k|      if (! step)
  ------------------
  |  Branch (8275:11): [True: 19.8k, False: 2.08k]
  ------------------
 8276|  19.8k|        step = PROBE_STEP(h, mask, table->power);
  ------------------
  |  |  251|  19.8k|  ((unsigned char)((SECOND_HASH(hash, mask, power)) | 1))
  |  |  ------------------
  |  |  |  |  249|  19.8k|  ((((hash) & ~(mask)) >> ((power) - 1)) & ((mask) >> 2))
  |  |  ------------------
  ------------------
 8277|  21.8k|      i < step ? (i += table->size - step) : (i -= step);
  ------------------
  |  Branch (8277:7): [True: 1.66k, False: 20.2k]
  ------------------
 8278|  21.8k|    }
 8279|  27.0k|    if (! createSize)
  ------------------
  |  Branch (8279:9): [True: 11.7k, False: 15.2k]
  ------------------
 8280|  11.7k|      return NULL;
 8281|       |
 8282|       |    /* check for overflow (table is half full) */
 8283|  15.2k|    if (table->used >> (table->power - 1)) {
  ------------------
  |  Branch (8283:9): [True: 125, False: 15.1k]
  ------------------
 8284|    125|      unsigned char newPower = table->power + 1;
 8285|       |
 8286|       |      /* Detect and prevent invalid shift */
 8287|    125|      if (newPower >= sizeof(unsigned long) * 8 /* bits per byte */) {
  ------------------
  |  Branch (8287:11): [True: 0, False: 125]
  ------------------
 8288|      0|        return NULL;
 8289|      0|      }
 8290|       |
 8291|    125|      size_t newSize = (size_t)1 << newPower;
 8292|    125|      unsigned long newMask = (unsigned long)newSize - 1;
 8293|       |
 8294|       |      /* Detect and prevent integer overflow */
 8295|    125|      if (newSize > SIZE_MAX / sizeof(NAMED *)) {
  ------------------
  |  Branch (8295:11): [True: 0, False: 125]
  ------------------
 8296|      0|        return NULL;
 8297|      0|      }
 8298|       |
 8299|    125|      size_t tsize = newSize * sizeof(NAMED *);
 8300|    125|      NAMED **newV = MALLOC(table->parser, tsize);
  ------------------
  |  |  835|    125|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 8301|    125|      if (! newV)
  ------------------
  |  Branch (8301:11): [True: 0, False: 125]
  ------------------
 8302|      0|        return NULL;
 8303|    125|      memset(newV, 0, tsize);
 8304|  10.4k|      for (i = 0; i < table->size; i++)
  ------------------
  |  Branch (8304:19): [True: 10.3k, False: 125]
  ------------------
 8305|  10.3k|        if (table->v[i]) {
  ------------------
  |  Branch (8305:13): [True: 5.15k, False: 5.15k]
  ------------------
 8306|  5.15k|          KEY const key = table->v[i]->name;
 8307|  5.15k|          unsigned long newHash = hash(parser, key, keylen(key));
 8308|  5.15k|          size_t j = newHash & newMask;
 8309|  5.15k|          step = 0;
 8310|  5.86k|          while (newV[j]) {
  ------------------
  |  Branch (8310:18): [True: 713, False: 5.15k]
  ------------------
 8311|    713|            if (! step)
  ------------------
  |  Branch (8311:17): [True: 585, False: 128]
  ------------------
 8312|    585|              step = PROBE_STEP(newHash, newMask, newPower);
  ------------------
  |  |  251|    585|  ((unsigned char)((SECOND_HASH(hash, mask, power)) | 1))
  |  |  ------------------
  |  |  |  |  249|    585|  ((((hash) & ~(mask)) >> ((power) - 1)) & ((mask) >> 2))
  |  |  ------------------
  ------------------
 8313|    713|            j < step ? (j += newSize - step) : (j -= step);
  ------------------
  |  Branch (8313:13): [True: 86, False: 627]
  ------------------
 8314|    713|          }
 8315|  5.15k|          newV[j] = table->v[i];
 8316|  5.15k|        }
 8317|    125|      FREE(table->parser, table->v);
  ------------------
  |  |  837|    125|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 8318|    125|      table->v = newV;
 8319|    125|      table->power = newPower;
 8320|    125|      table->size = newSize;
 8321|    125|      i = h & newMask;
 8322|    125|      step = 0;
 8323|    163|      while (table->v[i]) {
  ------------------
  |  Branch (8323:14): [True: 38, False: 125]
  ------------------
 8324|     38|        if (! step)
  ------------------
  |  Branch (8324:13): [True: 30, False: 8]
  ------------------
 8325|     30|          step = PROBE_STEP(h, newMask, newPower);
  ------------------
  |  |  251|     30|  ((unsigned char)((SECOND_HASH(hash, mask, power)) | 1))
  |  |  ------------------
  |  |  |  |  249|     30|  ((((hash) & ~(mask)) >> ((power) - 1)) & ((mask) >> 2))
  |  |  ------------------
  ------------------
 8326|     38|        i < step ? (i += newSize - step) : (i -= step);
  ------------------
  |  Branch (8326:9): [True: 5, False: 33]
  ------------------
 8327|     38|      }
 8328|    125|    }
 8329|  15.2k|  }
 8330|   860k|  assert(createSize >= sizeof(NAMED));
  ------------------
  |  Branch (8330:3): [True: 0, False: 33.8k]
  |  Branch (8330:3): [True: 33.8k, False: 0]
  ------------------
 8331|  33.8k|  table->v[i] = MALLOC(table->parser, createSize);
  ------------------
  |  |  835|  33.8k|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 8332|  33.8k|  if (! table->v[i])
  ------------------
  |  Branch (8332:7): [True: 0, False: 33.8k]
  ------------------
 8333|      0|    return NULL;
 8334|  33.8k|  memset(table->v[i], 0, createSize);
 8335|  33.8k|  table->v[i]->name = name; // NOTE: This requires and assumes zero termination!
 8336|  33.8k|  (table->used)++;
 8337|  33.8k|  return table->v[i];
 8338|  33.8k|}
xmlparse.c:hash:
 8219|   856k|hash(XML_Parser parser, KEY s, size_t keyLen) {
 8220|   856k|  struct siphash state;
 8221|   856k|  struct sipkey key;
 8222|   856k|  (void)sip24_valid;
 8223|   856k|  copy_salt_to_sipkey(parser, &key);
 8224|   856k|  sip24_init(&state, &key);
 8225|   856k|  sip24_update(&state, s, keyLen * sizeof(XML_Char));
 8226|   856k|  return (unsigned long)sip24_final(&state);
 8227|   856k|}
xmlparse.c:copy_salt_to_sipkey:
 8211|   877k|copy_salt_to_sipkey(XML_Parser parser, struct sipkey *key) {
 8212|   877k|  const XML_Parser rootParser = getRootParserOf(parser, NULL);
 8213|   877k|  assert(! rootParser->m_parentParser);
  ------------------
  |  Branch (8213:3): [True: 0, False: 877k]
  |  Branch (8213:3): [True: 877k, False: 0]
  ------------------
 8214|       |
 8215|   877k|  *key = rootParser->m_hash_secret_salt_128;
 8216|   877k|}
xmlparse.c:keyeq:
 8189|   827k|keyeq(KEY s1, size_t s1len, KEY s2) {
 8190|       |#ifdef XML_UNICODE
 8191|       |#  ifdef XML_UNICODE_WCHAR_T
 8192|       |  return (wcsncmp(s1, s2, s1len) == 0 && s2[s1len] == L'\0') ? XML_TRUE
 8193|       |                                                             : XML_FALSE;
 8194|       |#  else
 8195|       |  for (; s1len > 0 && *s1 == *s2; s1len--, s1++, s2++)
 8196|       |    ; /* no loop body! */
 8197|       |  return ((s1len == 0) && (*s2 == 0)) ? XML_TRUE : XML_FALSE;
 8198|       |#  endif
 8199|       |#else
 8200|   827k|  return (strncmp(s1, s2, s1len) == 0 && s2[s1len] == '\0') ? XML_TRUE
  ------------------
  |  |   63|   806k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
  |  Branch (8200:11): [True: 806k, False: 21.8k]
  |  Branch (8200:42): [True: 806k, False: 81]
  ------------------
 8201|   827k|                                                            : XML_FALSE;
  ------------------
  |  |   64|   849k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 8202|   827k|#endif
 8203|   827k|}
xmlparse.c:keylen:
 8206|   886k|keylen(KEY s) {
 8207|   886k|  return xcslen(s);
 8208|   886k|}
xmlparse.c:normalizePublicId:
 7843|    345|normalizePublicId(XML_Char *publicId) {
 7844|    345|  XML_Char *p = publicId;
 7845|    345|  XML_Char *s;
 7846|  6.45k|  for (s = publicId; *s; s++) {
  ------------------
  |  Branch (7846:22): [True: 6.10k, False: 345]
  ------------------
 7847|  6.10k|    switch (*s) {
 7848|    654|    case 0x20:
  ------------------
  |  Branch (7848:5): [True: 654, False: 5.45k]
  ------------------
 7849|    991|    case 0xD:
  ------------------
  |  Branch (7849:5): [True: 337, False: 5.77k]
  ------------------
 7850|  1.18k|    case 0xA:
  ------------------
  |  Branch (7850:5): [True: 195, False: 5.91k]
  ------------------
 7851|  1.18k|      if (p != publicId && p[-1] != 0x20)
  ------------------
  |  Branch (7851:11): [True: 589, False: 597]
  |  Branch (7851:28): [True: 235, False: 354]
  ------------------
 7852|    235|        *p++ = 0x20;
 7853|  1.18k|      break;
 7854|  4.92k|    default:
  ------------------
  |  Branch (7854:5): [True: 4.92k, False: 1.18k]
  ------------------
 7855|  4.92k|      *p++ = *s;
 7856|  6.10k|    }
 7857|  6.10k|  }
 7858|    345|  if (p != publicId && p[-1] == 0x20)
  ------------------
  |  Branch (7858:7): [True: 203, False: 142]
  |  Branch (7858:24): [True: 26, False: 177]
  ------------------
 7859|     26|    --p;
 7860|    345|  *p = XML_T('\0');
  ------------------
  |  |  220|    345|#  define XML_T(x) x
  ------------------
 7861|    345|}
xmlparse.c:contentProcessor:
 3445|  16.7k|                 const char **endPtr) {
 3446|  16.7k|  enum XML_Error result = doContent(
 3447|  16.7k|      parser, parser->m_parentParser ? 1 : 0, parser->m_encoding, start, end,
  ------------------
  |  Branch (3447:15): [True: 0, False: 16.7k]
  ------------------
 3448|  16.7k|      endPtr, (XML_Bool)! parser->m_parsingStatus.finalBuffer,
 3449|  16.7k|      XML_ACCOUNT_DIRECT);
 3450|  16.7k|  if (result == XML_ERROR_NONE) {
  ------------------
  |  Branch (3450:7): [True: 9.46k, False: 7.33k]
  ------------------
 3451|  9.46k|    if (! storeRawNames(parser))
  ------------------
  |  Branch (3451:9): [True: 0, False: 9.46k]
  ------------------
 3452|      0|      return XML_ERROR_NO_MEMORY;
 3453|  9.46k|  }
 3454|  16.7k|  return result;
 3455|  16.7k|}
xmlparse.c:doContent:
 3581|   215k|          XML_Bool haveMore, enum XML_Account account) {
 3582|       |  /* save one level of indirection */
 3583|   215k|  DTD *const dtd = parser->m_dtd;
 3584|       |
 3585|   215k|  const char **eventPP;
 3586|   215k|  const char **eventEndPP;
 3587|   215k|  if (enc == parser->m_encoding) {
  ------------------
  |  Branch (3587:7): [True: 16.7k, False: 198k]
  ------------------
 3588|  16.7k|    eventPP = &parser->m_eventPtr;
 3589|  16.7k|    eventEndPP = &parser->m_eventEndPtr;
 3590|   198k|  } else {
 3591|   198k|    eventPP = &(parser->m_openInternalEntities->internalEventPtr);
 3592|   198k|    eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr);
 3593|   198k|  }
 3594|   215k|  *eventPP = s;
 3595|       |
 3596|   477k|  for (;;) {
 3597|   477k|    const char *next = s; /* XmlContentTok doesn't always set the last arg */
 3598|   477k|    int tok = XmlContentTok(enc, s, end, &next);
  ------------------
  |  |  229|   477k|    XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |  223|   477k|    (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
  |  |  ------------------
  ------------------
 3599|   477k|#if XML_GE == 1
 3600|   477k|    const char *accountAfter
 3601|   477k|        = ((tok == XML_TOK_TRAILING_RSQB) || (tok == XML_TOK_TRAILING_CR))
  ------------------
  |  |   46|   477k|    -5 /* ] or ]] at the end of the scan; might be                             \
  ------------------
                      = ((tok == XML_TOK_TRAILING_RSQB) || (tok == XML_TOK_TRAILING_CR))
  ------------------
  |  |   53|   476k|    -3                            /* A CR at the end of the scan;              \
  ------------------
  |  Branch (3601:12): [True: 688, False: 476k]
  |  Branch (3601:46): [True: 5, False: 476k]
  ------------------
 3602|   477k|              ? (haveMore ? s /* i.e. 0 bytes */ : end)
  ------------------
  |  Branch (3602:18): [True: 0, False: 693]
  ------------------
 3603|   477k|              : next;
 3604|   477k|    if (! accountingDiffTolerated(parser, tok, s, accountAfter, __LINE__,
  ------------------
  |  Branch (3604:9): [True: 0, False: 477k]
  ------------------
 3605|   477k|                                  account)) {
 3606|      0|      accountingOnAbort(parser);
 3607|      0|      return XML_ERROR_AMPLIFICATION_LIMIT_BREACH;
 3608|      0|    }
 3609|   477k|#endif
 3610|   477k|    *eventEndPP = next;
 3611|   477k|    switch (tok) {
 3612|      5|    case XML_TOK_TRAILING_CR:
  ------------------
  |  |   53|      5|    -3                            /* A CR at the end of the scan;              \
  ------------------
  |  Branch (3612:5): [True: 5, False: 477k]
  ------------------
 3613|      5|      if (haveMore) {
  ------------------
  |  Branch (3613:11): [True: 0, False: 5]
  ------------------
 3614|      0|        *nextPtr = s;
 3615|      0|        return XML_ERROR_NONE;
 3616|      0|      }
 3617|      5|      *eventEndPP = end;
 3618|      5|      if (parser->m_characterDataHandler) {
  ------------------
  |  Branch (3618:11): [True: 0, False: 5]
  ------------------
 3619|      0|        XML_Char c = 0xA;
 3620|      0|        beforeHandler(parser);
 3621|      0|        parser->m_characterDataHandler(parser->m_handlerArg, &c, 1);
 3622|      0|        afterHandler(parser);
 3623|      5|      } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (3623:18): [True: 0, False: 5]
  ------------------
 3624|      0|        reportDefault(parser, enc, s, end);
 3625|       |      /* We are at the end of the final buffer, should we check for
 3626|       |         XML_SUSPENDED, XML_FINISHED?
 3627|       |      */
 3628|      5|      if (startTagLevel == 0)
  ------------------
  |  Branch (3628:11): [True: 5, False: 0]
  ------------------
 3629|      5|        return XML_ERROR_NO_ELEMENTS;
 3630|      0|      if (parser->m_tagLevel != startTagLevel)
  ------------------
  |  Branch (3630:11): [True: 0, False: 0]
  ------------------
 3631|      0|        return XML_ERROR_ASYNC_ENTITY;
 3632|      0|      *nextPtr = end;
 3633|      0|      return XML_ERROR_NONE;
 3634|   102k|    case XML_TOK_NONE:
  ------------------
  |  |   51|   102k|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
  |  Branch (3634:5): [True: 102k, False: 374k]
  ------------------
 3635|   102k|      if (haveMore) {
  ------------------
  |  Branch (3635:11): [True: 0, False: 102k]
  ------------------
 3636|      0|        *nextPtr = s;
 3637|      0|        return XML_ERROR_NONE;
 3638|      0|      }
 3639|   102k|      if (startTagLevel > 0) {
  ------------------
  |  Branch (3639:11): [True: 101k, False: 1.67k]
  ------------------
 3640|   101k|        if (parser->m_tagLevel != startTagLevel)
  ------------------
  |  Branch (3640:13): [True: 19, False: 101k]
  ------------------
 3641|     19|          return XML_ERROR_ASYNC_ENTITY;
 3642|   101k|        *nextPtr = s;
 3643|   101k|        return XML_ERROR_NONE;
 3644|   101k|      }
 3645|  1.67k|      return XML_ERROR_NO_ELEMENTS;
 3646|  2.93k|    case XML_TOK_INVALID:
  ------------------
  |  |   57|  2.93k|#  define XML_TOK_INVALID 0
  ------------------
  |  Branch (3646:5): [True: 2.93k, False: 474k]
  ------------------
 3647|  2.93k|      *eventPP = next;
 3648|  2.93k|      return XML_ERROR_INVALID_TOKEN;
 3649|    781|    case XML_TOK_PARTIAL:
  ------------------
  |  |   56|    781|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  |  Branch (3649:5): [True: 781, False: 476k]
  ------------------
 3650|    781|      if (haveMore) {
  ------------------
  |  Branch (3650:11): [True: 0, False: 781]
  ------------------
 3651|      0|        *nextPtr = s;
 3652|      0|        return XML_ERROR_NONE;
 3653|      0|      }
 3654|    781|      return XML_ERROR_UNCLOSED_TOKEN;
 3655|     33|    case XML_TOK_PARTIAL_CHAR:
  ------------------
  |  |   55|     33|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  ------------------
  |  Branch (3655:5): [True: 33, False: 477k]
  ------------------
 3656|     33|      if (haveMore) {
  ------------------
  |  Branch (3656:11): [True: 0, False: 33]
  ------------------
 3657|      0|        *nextPtr = s;
 3658|      0|        return XML_ERROR_NONE;
 3659|      0|      }
 3660|     33|      return XML_ERROR_PARTIAL_CHAR;
 3661|   145k|    case XML_TOK_ENTITY_REF: {
  ------------------
  |  |   70|   145k|#  define XML_TOK_ENTITY_REF 9
  ------------------
  |  Branch (3661:5): [True: 145k, False: 331k]
  ------------------
 3662|   145k|      const XML_Char *name;
 3663|   145k|      ENTITY *entity;
 3664|   145k|      XML_Char ch = (XML_Char)XmlPredefinedEntityName(
  ------------------
  |  |  266|   145k|    (((enc)->predefinedEntityName)(enc, ptr, end))
  ------------------
 3665|   145k|          enc, s + enc->minBytesPerChar, next - enc->minBytesPerChar);
 3666|   145k|      if (ch) {
  ------------------
  |  Branch (3666:11): [True: 36.2k, False: 109k]
  ------------------
 3667|  36.2k|#if XML_GE == 1
 3668|       |        /* NOTE: We are replacing 4-6 characters original input for 1 character
 3669|       |         *       so there is no amplification and hence recording without
 3670|       |         *       protection. */
 3671|  36.2k|        accountingDiffTolerated(parser, tok, (char *)&ch,
 3672|  36.2k|                                ((char *)&ch) + sizeof(XML_Char), __LINE__,
 3673|  36.2k|                                XML_ACCOUNT_ENTITY_EXPANSION);
 3674|  36.2k|#endif /* XML_GE == 1 */
 3675|  36.2k|        if (parser->m_characterDataHandler) {
  ------------------
  |  Branch (3675:13): [True: 0, False: 36.2k]
  ------------------
 3676|      0|          beforeHandler(parser);
 3677|      0|          parser->m_characterDataHandler(parser->m_handlerArg, &ch, 1);
 3678|      0|          afterHandler(parser);
 3679|  36.2k|        } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (3679:20): [True: 0, False: 36.2k]
  ------------------
 3680|      0|          reportDefault(parser, enc, s, next);
 3681|  36.2k|        break;
 3682|  36.2k|      }
 3683|   109k|      name = poolStoreString(&dtd->pool, enc, s + enc->minBytesPerChar,
 3684|   109k|                             next - enc->minBytesPerChar);
 3685|   109k|      if (! name)
  ------------------
  |  Branch (3685:11): [True: 0, False: 109k]
  ------------------
 3686|      0|        return XML_ERROR_NO_MEMORY;
 3687|   109k|      entity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, 0);
 3688|   109k|      poolDiscard(&dtd->pool);
  ------------------
  |  |  675|   109k|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 3689|       |      /* First, determine if a check for an existing declaration is needed;
 3690|       |         if yes, check that the entity exists, and that it is internal,
 3691|       |         otherwise call the skipped entity or default handler.
 3692|       |      */
 3693|   109k|      if (! dtd->hasParamEntityRefs || dtd->standalone) {
  ------------------
  |  Branch (3693:11): [True: 103k, False: 5.40k]
  |  Branch (3693:40): [True: 0, False: 5.40k]
  ------------------
 3694|   103k|        if (! entity)
  ------------------
  |  Branch (3694:13): [True: 207, False: 103k]
  ------------------
 3695|    207|          return XML_ERROR_UNDEFINED_ENTITY;
 3696|   103k|        else if (! entity->is_internal)
  ------------------
  |  Branch (3696:18): [True: 0, False: 103k]
  ------------------
 3697|      0|          return XML_ERROR_ENTITY_DECLARED_IN_PE;
 3698|   103k|      } else if (! entity) {
  ------------------
  |  Branch (3698:18): [True: 2.95k, False: 2.45k]
  ------------------
 3699|  2.95k|        if (parser->m_skippedEntityHandler) {
  ------------------
  |  Branch (3699:13): [True: 0, False: 2.95k]
  ------------------
 3700|      0|          beforeHandler(parser);
 3701|      0|          parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0);
 3702|      0|          afterHandler(parser);
 3703|  2.95k|        } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (3703:20): [True: 0, False: 2.95k]
  ------------------
 3704|      0|          reportDefault(parser, enc, s, next);
 3705|  2.95k|        break;
 3706|  2.95k|      }
 3707|   106k|      if (entity->open)
  ------------------
  |  Branch (3707:11): [True: 2, False: 106k]
  ------------------
 3708|      2|        return XML_ERROR_RECURSIVE_ENTITY_REF;
 3709|   106k|      if (entity->notation)
  ------------------
  |  Branch (3709:11): [True: 1, False: 106k]
  ------------------
 3710|      1|        return XML_ERROR_BINARY_ENTITY_REF;
 3711|   106k|      if (entity->textPtr) {
  ------------------
  |  Branch (3711:11): [True: 105k, False: 198]
  ------------------
 3712|   105k|        enum XML_Error result;
 3713|   105k|        if (! parser->m_defaultExpandInternalEntities) {
  ------------------
  |  Branch (3713:13): [True: 0, False: 105k]
  ------------------
 3714|      0|          if (parser->m_skippedEntityHandler) {
  ------------------
  |  Branch (3714:15): [True: 0, False: 0]
  ------------------
 3715|      0|            beforeHandler(parser);
 3716|      0|            parser->m_skippedEntityHandler(parser->m_handlerArg, entity->name,
 3717|      0|                                           0);
 3718|      0|            afterHandler(parser);
 3719|      0|          } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (3719:22): [True: 0, False: 0]
  ------------------
 3720|      0|            reportDefault(parser, enc, s, next);
 3721|      0|          break;
 3722|      0|        }
 3723|   105k|        result = processEntity(parser, entity, XML_FALSE, ENTITY_INTERNAL);
  ------------------
  |  |   64|   105k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 3724|   105k|        if (result != XML_ERROR_NONE)
  ------------------
  |  Branch (3724:13): [True: 0, False: 105k]
  ------------------
 3725|      0|          return result;
 3726|   105k|      } else if (parser->m_externalEntityRefHandler) {
  ------------------
  |  Branch (3726:18): [True: 0, False: 198]
  ------------------
 3727|      0|        const XML_Char *context;
 3728|      0|        entity->open = true;
 3729|      0|        context = getContext(parser);
 3730|      0|        entity->open = false;
 3731|      0|        if (! context)
  ------------------
  |  Branch (3731:13): [True: 0, False: 0]
  ------------------
 3732|      0|          return XML_ERROR_NO_MEMORY;
 3733|      0|        beforeHandler(parser);
 3734|      0|        const int status = parser->m_externalEntityRefHandler(
 3735|      0|            parser->m_externalEntityRefHandlerArg, context, entity->base,
 3736|      0|            entity->systemId, entity->publicId);
 3737|      0|        afterHandler(parser);
 3738|      0|        if (! status)
  ------------------
  |  Branch (3738:13): [True: 0, False: 0]
  ------------------
 3739|      0|          return XML_ERROR_EXTERNAL_ENTITY_HANDLING;
 3740|      0|        poolDiscard(&parser->m_tempPool);
  ------------------
  |  |  675|      0|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 3741|    198|      } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (3741:18): [True: 0, False: 198]
  ------------------
 3742|      0|        reportDefault(parser, enc, s, next);
 3743|   106k|      break;
 3744|   106k|    }
 3745|   106k|    case XML_TOK_START_TAG_NO_ATTS:
  ------------------
  |  |   63|  27.1k|#  define XML_TOK_START_TAG_NO_ATTS 2
  ------------------
  |  Branch (3745:5): [True: 27.1k, False: 450k]
  ------------------
 3746|  32.9k|    case XML_TOK_START_TAG_WITH_ATTS: {
  ------------------
  |  |   62|  32.9k|#  define XML_TOK_START_TAG_WITH_ATTS 1
  ------------------
  |  Branch (3746:5): [True: 5.74k, False: 471k]
  ------------------
 3747|  32.9k|      TAG *tag;
 3748|  32.9k|      enum XML_Error result;
 3749|  32.9k|      XML_Char *toPtr;
 3750|  32.9k|      if (parser->m_freeTagList) {
  ------------------
  |  Branch (3750:11): [True: 4.94k, False: 27.9k]
  ------------------
 3751|  4.94k|        tag = parser->m_freeTagList;
 3752|  4.94k|        parser->m_freeTagList = parser->m_freeTagList->parent;
 3753|  27.9k|      } else {
 3754|  27.9k|        tag = MALLOC(parser, sizeof(TAG));
  ------------------
  |  |  835|  27.9k|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 3755|  27.9k|        if (! tag)
  ------------------
  |  Branch (3755:13): [True: 0, False: 27.9k]
  ------------------
 3756|      0|          return XML_ERROR_NO_MEMORY;
 3757|  27.9k|        tag->buf.raw = MALLOC(parser, INIT_TAG_BUF_SIZE);
  ------------------
  |  |  835|  27.9k|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 3758|  27.9k|        if (! tag->buf.raw) {
  ------------------
  |  Branch (3758:13): [True: 0, False: 27.9k]
  ------------------
 3759|      0|          FREE(parser, tag);
  ------------------
  |  |  837|      0|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 3760|      0|          return XML_ERROR_NO_MEMORY;
 3761|      0|        }
 3762|  27.9k|        tag->bufEnd = tag->buf.raw + INIT_TAG_BUF_SIZE;
  ------------------
  |  |  253|  27.9k|#define INIT_TAG_BUF_SIZE 32 /* must be a multiple of sizeof(XML_Char) */
  ------------------
 3763|  27.9k|      }
 3764|  32.9k|      tag->bindings = NULL;
 3765|  32.9k|      tag->parent = parser->m_tagStack;
 3766|  32.9k|      parser->m_tagStack = tag;
 3767|  32.9k|      tag->name.localPart = NULL;
 3768|  32.9k|      tag->name.prefix = NULL;
 3769|  32.9k|      tag->rawName = s + enc->minBytesPerChar;
 3770|  32.9k|      tag->rawNameLength = XmlNameLength(enc, tag->rawName);
  ------------------
  |  |  256|  32.9k|#  define XmlNameLength(enc, ptr) (((enc)->nameLength)(enc, ptr))
  ------------------
 3771|  32.9k|      ++parser->m_tagLevel;
 3772|  32.9k|      {
 3773|  32.9k|        const char *rawNameEnd = tag->rawName + tag->rawNameLength;
 3774|  32.9k|        const char *fromPtr = tag->rawName;
 3775|  32.9k|        toPtr = tag->buf.str;
 3776|  33.4k|        for (;;) {
 3777|  33.4k|          const enum XML_Convert_Result convert_res
 3778|  33.4k|              = XmlConvert(enc, &fromPtr, rawNameEnd, (ICHAR **)&toPtr,
  ------------------
  |  |  190|  33.4k|#  define XmlConvert XmlUtf8Convert
  |  |  ------------------
  |  |  |  |  275|  33.4k|    (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim))
  |  |  ------------------
  ------------------
 3779|  33.4k|                           (ICHAR *)tag->bufEnd - 1);
 3780|  33.4k|          const size_t convLen = (size_t)(toPtr - tag->buf.str);
 3781|  33.4k|          if ((fromPtr >= rawNameEnd)
  ------------------
  |  Branch (3781:15): [True: 32.9k, False: 469]
  ------------------
 3782|  32.9k|              || (convert_res == XML_CONVERT_INPUT_INCOMPLETE)) {
  ------------------
  |  Branch (3782:18): [True: 0, False: 469]
  ------------------
 3783|  32.9k|            tag->name.strLen = convLen;
 3784|  32.9k|            break;
 3785|  32.9k|          }
 3786|    469|          if (SIZE_MAX / 2 < (size_t)(tag->bufEnd - tag->buf.raw))
  ------------------
  |  Branch (3786:15): [True: 0, False: 469]
  ------------------
 3787|      0|            return XML_ERROR_NO_MEMORY;
 3788|    469|          const size_t bufSize = (size_t)(tag->bufEnd - tag->buf.raw) * 2;
 3789|    469|          {
 3790|    469|            char *temp = REALLOC(parser, tag->buf.raw, bufSize);
  ------------------
  |  |  836|    469|#  define REALLOC(parser, p, s) (expat_realloc((parser), (p), (s), __LINE__))
  ------------------
 3791|    469|            if (temp == NULL)
  ------------------
  |  Branch (3791:17): [True: 0, False: 469]
  ------------------
 3792|      0|              return XML_ERROR_NO_MEMORY;
 3793|    469|            tag->buf.raw = temp;
 3794|    469|            tag->bufEnd = temp + bufSize;
 3795|    469|            toPtr = (XML_Char *)temp + convLen;
 3796|    469|          }
 3797|    469|        }
 3798|  32.9k|      }
 3799|  32.9k|      tag->name.str = tag->buf.str;
 3800|  32.9k|      *toPtr = XML_T('\0');
  ------------------
  |  |  220|  32.9k|#  define XML_T(x) x
  ------------------
 3801|  32.9k|      result
 3802|  32.9k|          = storeAtts(parser, enc, s, &(tag->name), &(tag->bindings), account);
 3803|  32.9k|      if (result)
  ------------------
  |  Branch (3803:11): [True: 275, False: 32.6k]
  ------------------
 3804|    275|        return result;
 3805|  32.6k|      if (parser->m_startElementHandler) {
  ------------------
  |  Branch (3805:11): [True: 0, False: 32.6k]
  ------------------
 3806|      0|        beforeHandler(parser);
 3807|      0|        parser->m_startElementHandler(parser->m_handlerArg, tag->name.str,
 3808|      0|                                      (const XML_Char **)parser->m_atts);
 3809|      0|        afterHandler(parser);
 3810|  32.6k|      } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (3810:18): [True: 0, False: 32.6k]
  ------------------
 3811|      0|        reportDefault(parser, enc, s, next);
 3812|  32.6k|      poolClear(&parser->m_tempPool);
 3813|  32.6k|      break;
 3814|  32.9k|    }
 3815|  4.36k|    case XML_TOK_EMPTY_ELEMENT_NO_ATTS:
  ------------------
  |  |   65|  4.36k|#  define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4
  ------------------
  |  Branch (3815:5): [True: 4.36k, False: 473k]
  ------------------
 3816|  26.6k|    case XML_TOK_EMPTY_ELEMENT_WITH_ATTS: {
  ------------------
  |  |   64|  26.6k|#  define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag <e/> */
  ------------------
  |  Branch (3816:5): [True: 22.2k, False: 455k]
  ------------------
 3817|  26.6k|      const char *rawName = s + enc->minBytesPerChar;
 3818|  26.6k|      enum XML_Error result;
 3819|  26.6k|      BINDING *bindings = NULL;
 3820|  26.6k|      XML_Bool noElmHandlers = XML_TRUE;
  ------------------
  |  |   63|  26.6k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 3821|  26.6k|      TAG_NAME name;
 3822|  26.6k|      name.str = poolStoreString(&parser->m_tempPool, enc, rawName,
 3823|  26.6k|                                 rawName + XmlNameLength(enc, rawName));
  ------------------
  |  |  256|  26.6k|#  define XmlNameLength(enc, ptr) (((enc)->nameLength)(enc, ptr))
  ------------------
 3824|  26.6k|      if (! name.str)
  ------------------
  |  Branch (3824:11): [True: 0, False: 26.6k]
  ------------------
 3825|      0|        return XML_ERROR_NO_MEMORY;
 3826|  26.6k|      poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|  26.6k|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 3827|  26.6k|      result = storeAtts(parser, enc, s, &name, &bindings,
 3828|  26.6k|                         XML_ACCOUNT_NONE /* token spans whole start tag */);
 3829|  26.6k|      if (result != XML_ERROR_NONE) {
  ------------------
  |  Branch (3829:11): [True: 140, False: 26.5k]
  ------------------
 3830|    140|        freeBindings(parser, bindings);
 3831|    140|        return result;
 3832|    140|      }
 3833|  26.5k|      poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|  26.5k|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 3834|  26.5k|      if (parser->m_startElementHandler) {
  ------------------
  |  Branch (3834:11): [True: 0, False: 26.5k]
  ------------------
 3835|      0|        beforeHandler(parser);
 3836|      0|        parser->m_startElementHandler(parser->m_handlerArg, name.str,
 3837|      0|                                      (const XML_Char **)parser->m_atts);
 3838|      0|        afterHandler(parser);
 3839|      0|        noElmHandlers = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 3840|      0|      }
 3841|  26.5k|      if (parser->m_endElementHandler) {
  ------------------
  |  Branch (3841:11): [True: 0, False: 26.5k]
  ------------------
 3842|      0|        if (parser->m_startElementHandler)
  ------------------
  |  Branch (3842:13): [True: 0, False: 0]
  ------------------
 3843|      0|          *eventPP = *eventEndPP;
 3844|      0|        beforeHandler(parser);
 3845|      0|        parser->m_endElementHandler(parser->m_handlerArg, name.str);
 3846|      0|        afterHandler(parser);
 3847|      0|        noElmHandlers = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 3848|      0|      }
 3849|  26.5k|      if (noElmHandlers && parser->m_defaultHandler)
  ------------------
  |  Branch (3849:11): [True: 26.5k, False: 0]
  |  Branch (3849:28): [True: 0, False: 26.5k]
  ------------------
 3850|      0|        reportDefault(parser, enc, s, next);
 3851|  26.5k|      poolClear(&parser->m_tempPool);
 3852|  26.5k|      freeBindings(parser, bindings);
 3853|  26.5k|    }
 3854|  26.5k|      if ((parser->m_tagLevel == 0)
  ------------------
  |  Branch (3854:11): [True: 753, False: 25.7k]
  ------------------
 3855|    753|          && (parser->m_parsingStatus.parsing != XML_FINISHED)) {
  ------------------
  |  Branch (3855:14): [True: 753, False: 0]
  ------------------
 3856|    753|        if (parser->m_parsingStatus.parsing == XML_SUSPENDED
  ------------------
  |  Branch (3856:13): [True: 0, False: 753]
  ------------------
 3857|    753|            || (parser->m_parsingStatus.parsing == XML_PARSING
  ------------------
  |  Branch (3857:17): [True: 753, False: 0]
  ------------------
 3858|    753|                && parser->m_reenter))
  ------------------
  |  Branch (3858:20): [True: 0, False: 753]
  ------------------
 3859|      0|          parser->m_processor = epilogProcessor;
 3860|    753|        else
 3861|    753|          return epilogProcessor(parser, next, end, nextPtr);
 3862|    753|      }
 3863|  25.7k|      break;
 3864|  25.7k|    case XML_TOK_END_TAG:
  ------------------
  |  |   66|  5.52k|#  define XML_TOK_END_TAG 5
  ------------------
  |  Branch (3864:5): [True: 5.52k, False: 471k]
  ------------------
 3865|  5.52k|      if (parser->m_tagLevel == startTagLevel)
  ------------------
  |  Branch (3865:11): [True: 1, False: 5.52k]
  ------------------
 3866|      1|        return XML_ERROR_ASYNC_ENTITY;
 3867|  5.52k|      else {
 3868|  5.52k|        int len;
 3869|  5.52k|        const char *rawName;
 3870|  5.52k|        TAG *tag = parser->m_tagStack;
 3871|  5.52k|        rawName = s + enc->minBytesPerChar * 2;
 3872|  5.52k|        len = XmlNameLength(enc, rawName);
  ------------------
  |  |  256|  5.52k|#  define XmlNameLength(enc, ptr) (((enc)->nameLength)(enc, ptr))
  ------------------
 3873|  5.52k|        if (len != tag->rawNameLength
  ------------------
  |  Branch (3873:13): [True: 90, False: 5.43k]
  ------------------
 3874|  5.43k|            || memcmp(tag->rawName, rawName, len) != 0) {
  ------------------
  |  Branch (3874:16): [True: 173, False: 5.26k]
  ------------------
 3875|    263|          *eventPP = rawName;
 3876|    263|          return XML_ERROR_TAG_MISMATCH;
 3877|    263|        }
 3878|  5.26k|        parser->m_tagStack = tag->parent;
 3879|  5.26k|        tag->parent = parser->m_freeTagList;
 3880|  5.26k|        parser->m_freeTagList = tag;
 3881|  5.26k|        --parser->m_tagLevel;
 3882|  5.26k|        if (parser->m_endElementHandler) {
  ------------------
  |  Branch (3882:13): [True: 0, False: 5.26k]
  ------------------
 3883|      0|          const XML_Char *localPart;
 3884|      0|          const XML_Char *prefix;
 3885|      0|          XML_Char *uri;
 3886|      0|          localPart = tag->name.localPart;
 3887|      0|          if (parser->m_ns && localPart) {
  ------------------
  |  Branch (3887:15): [True: 0, False: 0]
  |  Branch (3887:31): [True: 0, False: 0]
  ------------------
 3888|       |            /* localPart and prefix may have been overwritten in
 3889|       |               tag->name.str, since this points to the binding->uri
 3890|       |               buffer which gets reused; so we have to add them again
 3891|       |            */
 3892|      0|            uri = (XML_Char *)tag->name.str + tag->name.uriLen;
 3893|       |            /* don't need to check for space - already done in storeAtts() */
 3894|      0|            while (*localPart)
  ------------------
  |  Branch (3894:20): [True: 0, False: 0]
  ------------------
 3895|      0|              *uri++ = *localPart++;
 3896|      0|            prefix = tag->name.prefix;
 3897|      0|            if (parser->m_ns_triplets && prefix) {
  ------------------
  |  Branch (3897:17): [True: 0, False: 0]
  |  Branch (3897:42): [True: 0, False: 0]
  ------------------
 3898|      0|              *uri++ = parser->m_namespaceSeparator;
 3899|      0|              while (*prefix)
  ------------------
  |  Branch (3899:22): [True: 0, False: 0]
  ------------------
 3900|      0|                *uri++ = *prefix++;
 3901|      0|            }
 3902|      0|            *uri = XML_T('\0');
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
 3903|      0|          }
 3904|      0|          beforeHandler(parser);
 3905|      0|          parser->m_endElementHandler(parser->m_handlerArg, tag->name.str);
 3906|      0|          afterHandler(parser);
 3907|  5.26k|        } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (3907:20): [True: 0, False: 5.26k]
  ------------------
 3908|      0|          reportDefault(parser, enc, s, next);
 3909|  6.03k|        while (tag->bindings) {
  ------------------
  |  Branch (3909:16): [True: 769, False: 5.26k]
  ------------------
 3910|    769|          BINDING *b = tag->bindings;
 3911|    769|          if (parser->m_endNamespaceDeclHandler) {
  ------------------
  |  Branch (3911:15): [True: 0, False: 769]
  ------------------
 3912|      0|            beforeHandler(parser);
 3913|      0|            parser->m_endNamespaceDeclHandler(parser->m_handlerArg,
 3914|      0|                                              b->prefix->name);
 3915|      0|            afterHandler(parser);
 3916|      0|          }
 3917|    769|          tag->bindings = tag->bindings->nextTagBinding;
 3918|    769|          b->nextTagBinding = parser->m_freeBindingList;
 3919|    769|          parser->m_freeBindingList = b;
 3920|    769|          b->prefix->binding = b->prevPrefixBinding;
 3921|    769|        }
 3922|  5.26k|        if ((parser->m_tagLevel == 0)
  ------------------
  |  Branch (3922:13): [True: 68, False: 5.19k]
  ------------------
 3923|     68|            && (parser->m_parsingStatus.parsing != XML_FINISHED)) {
  ------------------
  |  Branch (3923:16): [True: 68, False: 0]
  ------------------
 3924|     68|          if (parser->m_parsingStatus.parsing == XML_SUSPENDED
  ------------------
  |  Branch (3924:15): [True: 0, False: 68]
  ------------------
 3925|     68|              || (parser->m_parsingStatus.parsing == XML_PARSING
  ------------------
  |  Branch (3925:19): [True: 68, False: 0]
  ------------------
 3926|     68|                  && parser->m_reenter))
  ------------------
  |  Branch (3926:22): [True: 0, False: 68]
  ------------------
 3927|      0|            parser->m_processor = epilogProcessor;
 3928|     68|          else
 3929|     68|            return epilogProcessor(parser, next, end, nextPtr);
 3930|     68|        }
 3931|  5.26k|      }
 3932|  5.19k|      break;
 3933|  5.19k|    case XML_TOK_CHAR_REF: {
  ------------------
  |  |   71|  2.34k|#  define XML_TOK_CHAR_REF 10 /* numeric character reference */
  ------------------
  |  Branch (3933:5): [True: 2.34k, False: 475k]
  ------------------
 3934|  2.34k|      int n = XmlCharRefNumber(enc, s);
  ------------------
  |  |  263|  2.34k|#  define XmlCharRefNumber(enc, ptr) (((enc)->charRefNumber)(enc, ptr))
  ------------------
 3935|  2.34k|      if (n < 0)
  ------------------
  |  Branch (3935:11): [True: 107, False: 2.23k]
  ------------------
 3936|    107|        return XML_ERROR_BAD_CHAR_REF;
 3937|  2.23k|      if (parser->m_characterDataHandler) {
  ------------------
  |  Branch (3937:11): [True: 0, False: 2.23k]
  ------------------
 3938|      0|        XML_Char buf[XML_ENCODE_MAX];
 3939|      0|        beforeHandler(parser);
 3940|      0|        parser->m_characterDataHandler(parser->m_handlerArg, buf,
 3941|      0|                                       XmlEncode(n, (ICHAR *)buf));
  ------------------
  |  |  193|      0|#  define XmlEncode XmlUtf8Encode
  ------------------
 3942|      0|        afterHandler(parser);
 3943|  2.23k|      } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (3943:18): [True: 0, False: 2.23k]
  ------------------
 3944|      0|        reportDefault(parser, enc, s, next);
 3945|  2.23k|    } break;
 3946|      1|    case XML_TOK_XML_DECL:
  ------------------
  |  |   77|      1|#  define XML_TOK_XML_DECL 12 /* XML decl or text decl */
  ------------------
  |  Branch (3946:5): [True: 1, False: 477k]
  ------------------
 3947|      1|      return XML_ERROR_MISPLACED_XML_PI;
 3948|  2.80k|    case XML_TOK_DATA_NEWLINE:
  ------------------
  |  |   68|  2.80k|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
  |  Branch (3948:5): [True: 2.80k, False: 474k]
  ------------------
 3949|  2.80k|      if (parser->m_characterDataHandler) {
  ------------------
  |  Branch (3949:11): [True: 0, False: 2.80k]
  ------------------
 3950|      0|        XML_Char c = 0xA;
 3951|      0|        beforeHandler(parser);
 3952|      0|        parser->m_characterDataHandler(parser->m_handlerArg, &c, 1);
 3953|      0|        afterHandler(parser);
 3954|  2.80k|      } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (3954:18): [True: 0, False: 2.80k]
  ------------------
 3955|      0|        reportDefault(parser, enc, s, next);
 3956|  2.80k|      break;
 3957|  1.38k|    case XML_TOK_CDATA_SECT_OPEN: {
  ------------------
  |  |   69|  1.38k|#  define XML_TOK_CDATA_SECT_OPEN 8
  ------------------
  |  Branch (3957:5): [True: 1.38k, False: 476k]
  ------------------
 3958|  1.38k|      enum XML_Error result;
 3959|  1.38k|      if (parser->m_startCdataSectionHandler) {
  ------------------
  |  Branch (3959:11): [True: 0, False: 1.38k]
  ------------------
 3960|      0|        beforeHandler(parser);
 3961|      0|        parser->m_startCdataSectionHandler(parser->m_handlerArg);
 3962|      0|        afterHandler(parser);
 3963|       |        /* BEGIN disabled code */
 3964|       |        /* Suppose you doing a transformation on a document that involves
 3965|       |           changing only the character data.  You set up a defaultHandler
 3966|       |           and a characterDataHandler.  The defaultHandler simply copies
 3967|       |           characters through.  The characterDataHandler does the
 3968|       |           transformation and writes the characters out escaping them as
 3969|       |           necessary.  This case will fail to work if we leave out the
 3970|       |           following two lines (because & and < inside CDATA sections will
 3971|       |           be incorrectly escaped).
 3972|       |
 3973|       |           However, now we have a start/endCdataSectionHandler, so it seems
 3974|       |           easier to let the user deal with this.
 3975|       |        */
 3976|  1.38k|      } else if ((0) && parser->m_characterDataHandler) {
  ------------------
  |  Branch (3976:18): [Folded, False: 1.38k]
  |  Branch (3976:25): [True: 0, False: 0]
  ------------------
 3977|      0|        beforeHandler(parser);
 3978|      0|        parser->m_characterDataHandler(parser->m_handlerArg, parser->m_dataBuf,
 3979|      0|                                       0);
 3980|      0|        afterHandler(parser);
 3981|       |        /* END disabled code */
 3982|  1.38k|      } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (3982:18): [True: 0, False: 1.38k]
  ------------------
 3983|      0|        reportDefault(parser, enc, s, next);
 3984|  1.38k|      result
 3985|  1.38k|          = doCdataSection(parser, enc, &next, end, nextPtr, haveMore, account);
 3986|  1.38k|      if (result != XML_ERROR_NONE)
  ------------------
  |  Branch (3986:11): [True: 398, False: 991]
  ------------------
 3987|    398|        return result;
 3988|    991|      else if (! next) {
  ------------------
  |  Branch (3988:16): [True: 0, False: 991]
  ------------------
 3989|      0|        parser->m_processor = cdataSectionProcessor;
 3990|      0|        return result;
 3991|      0|      }
 3992|  1.38k|    } break;
 3993|    991|    case XML_TOK_TRAILING_RSQB:
  ------------------
  |  |   46|    688|    -5 /* ] or ]] at the end of the scan; might be                             \
  ------------------
  |  Branch (3993:5): [True: 688, False: 476k]
  ------------------
 3994|    688|      if (haveMore) {
  ------------------
  |  Branch (3994:11): [True: 0, False: 688]
  ------------------
 3995|      0|        *nextPtr = s;
 3996|      0|        return XML_ERROR_NONE;
 3997|      0|      }
 3998|    688|      if (parser->m_characterDataHandler) {
  ------------------
  |  Branch (3998:11): [True: 0, False: 688]
  ------------------
 3999|      0|        if (MUST_CONVERT(enc, s)) {
  ------------------
  |  |  194|      0|#  define MUST_CONVERT(enc, s) (! (enc)->isUtf8)
  |  |  ------------------
  |  |  |  Branch (194:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4000|      0|          ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf;
 4001|      0|          XmlConvert(enc, &s, end, &dataPtr, (ICHAR *)parser->m_dataBufEnd);
  ------------------
  |  |  190|      0|#  define XmlConvert XmlUtf8Convert
  |  |  ------------------
  |  |  |  |  275|      0|    (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim))
  |  |  ------------------
  ------------------
 4002|      0|          beforeHandler(parser);
 4003|      0|          parser->m_characterDataHandler(
 4004|      0|              parser->m_handlerArg, parser->m_dataBuf,
 4005|      0|              (int)(dataPtr - (ICHAR *)parser->m_dataBuf));
 4006|      0|          afterHandler(parser);
 4007|      0|        } else {
 4008|      0|          beforeHandler(parser);
 4009|      0|          parser->m_characterDataHandler(
 4010|      0|              parser->m_handlerArg, (const XML_Char *)s,
 4011|      0|              (int)((const XML_Char *)end - (const XML_Char *)s));
 4012|      0|          afterHandler(parser);
 4013|      0|        }
 4014|    688|      } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (4014:18): [True: 0, False: 688]
  ------------------
 4015|      0|        reportDefault(parser, enc, s, end);
 4016|       |      /* We are at the end of the final buffer, should we check for
 4017|       |         XML_SUSPENDED, XML_FINISHED?
 4018|       |      */
 4019|    688|      if (startTagLevel == 0) {
  ------------------
  |  Branch (4019:11): [True: 8, False: 680]
  ------------------
 4020|      8|        *eventPP = end;
 4021|      8|        return XML_ERROR_NO_ELEMENTS;
 4022|      8|      }
 4023|    680|      if (parser->m_tagLevel != startTagLevel) {
  ------------------
  |  Branch (4023:11): [True: 9, False: 671]
  ------------------
 4024|      9|        *eventPP = end;
 4025|      9|        return XML_ERROR_ASYNC_ENTITY;
 4026|      9|      }
 4027|    671|      *nextPtr = end;
 4028|    671|      return XML_ERROR_NONE;
 4029|   148k|    case XML_TOK_DATA_CHARS: {
  ------------------
  |  |   67|   148k|#  define XML_TOK_DATA_CHARS 6
  ------------------
  |  Branch (4029:5): [True: 148k, False: 328k]
  ------------------
 4030|   148k|      XML_CharacterDataHandler charDataHandler = parser->m_characterDataHandler;
 4031|   148k|      if (charDataHandler) {
  ------------------
  |  Branch (4031:11): [True: 0, False: 148k]
  ------------------
 4032|      0|        if (MUST_CONVERT(enc, s)) {
  ------------------
  |  |  194|      0|#  define MUST_CONVERT(enc, s) (! (enc)->isUtf8)
  |  |  ------------------
  |  |  |  Branch (194:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4033|      0|          for (;;) {
 4034|      0|            ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf;
 4035|      0|            const enum XML_Convert_Result convert_res = XmlConvert(
  ------------------
  |  |  190|      0|#  define XmlConvert XmlUtf8Convert
  |  |  ------------------
  |  |  |  |  275|      0|    (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim))
  |  |  ------------------
  ------------------
 4036|      0|                enc, &s, next, &dataPtr, (ICHAR *)parser->m_dataBufEnd);
 4037|      0|            *eventEndPP = s;
 4038|      0|            beforeHandler(parser);
 4039|      0|            charDataHandler(parser->m_handlerArg, parser->m_dataBuf,
 4040|      0|                            (int)(dataPtr - (ICHAR *)parser->m_dataBuf));
 4041|      0|            afterHandler(parser);
 4042|      0|            if ((convert_res == XML_CONVERT_COMPLETED)
  ------------------
  |  Branch (4042:17): [True: 0, False: 0]
  ------------------
 4043|      0|                || (convert_res == XML_CONVERT_INPUT_INCOMPLETE))
  ------------------
  |  Branch (4043:20): [True: 0, False: 0]
  ------------------
 4044|      0|              break;
 4045|      0|            *eventPP = s;
 4046|      0|          }
 4047|      0|        } else {
 4048|      0|          beforeHandler(parser);
 4049|      0|          charDataHandler(parser->m_handlerArg, (const XML_Char *)s,
 4050|      0|                          (int)((const XML_Char *)next - (const XML_Char *)s));
 4051|      0|          afterHandler(parser);
 4052|      0|        }
 4053|   148k|      } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (4053:18): [True: 0, False: 148k]
  ------------------
 4054|      0|        reportDefault(parser, enc, s, next);
 4055|   148k|    } break;
 4056|  3.82k|    case XML_TOK_PI:
  ------------------
  |  |   76|  3.82k|#  define XML_TOK_PI 11       /* processing instruction */
  ------------------
  |  Branch (4056:5): [True: 3.82k, False: 473k]
  ------------------
 4057|  3.82k|      if (! reportProcessingInstruction(parser, enc, s, next))
  ------------------
  |  Branch (4057:11): [True: 0, False: 3.82k]
  ------------------
 4058|      0|        return XML_ERROR_NO_MEMORY;
 4059|  3.82k|      break;
 4060|  3.82k|    case XML_TOK_COMMENT:
  ------------------
  |  |   78|    504|#  define XML_TOK_COMMENT 13
  ------------------
  |  Branch (4060:5): [True: 504, False: 476k]
  ------------------
 4061|    504|      if (! reportComment(parser, enc, s, next))
  ------------------
  |  Branch (4061:11): [True: 0, False: 504]
  ------------------
 4062|      0|        return XML_ERROR_NO_MEMORY;
 4063|    504|      break;
 4064|    504|    default:
  ------------------
  |  Branch (4064:5): [True: 0, False: 477k]
  ------------------
 4065|       |      /* All of the tokens produced by XmlContentTok() have their own
 4066|       |       * explicit cases, so this default is not strictly necessary.
 4067|       |       * However it is a useful safety net, so we retain the code and
 4068|       |       * simply exclude it from the coverage tests.
 4069|       |       *
 4070|       |       * LCOV_EXCL_START
 4071|       |       */
 4072|      0|      if (parser->m_defaultHandler)
  ------------------
  |  Branch (4072:11): [True: 0, False: 0]
  ------------------
 4073|      0|        reportDefault(parser, enc, s, next);
 4074|      0|      break;
 4075|       |      /* LCOV_EXCL_STOP */
 4076|   477k|    }
 4077|   367k|    switch (parser->m_parsingStatus.parsing) {
 4078|      0|    case XML_SUSPENDED:
  ------------------
  |  Branch (4078:5): [True: 0, False: 367k]
  ------------------
 4079|      0|      *eventPP = next;
 4080|      0|      *nextPtr = next;
 4081|      0|      return XML_ERROR_NONE;
 4082|      0|    case XML_FINISHED:
  ------------------
  |  Branch (4082:5): [True: 0, False: 367k]
  ------------------
 4083|      0|      *eventPP = next;
 4084|      0|      return XML_ERROR_ABORTED;
 4085|   367k|    case XML_PARSING:
  ------------------
  |  Branch (4085:5): [True: 367k, False: 0]
  ------------------
 4086|   367k|      if (parser->m_reenter) {
  ------------------
  |  Branch (4086:11): [True: 105k, False: 262k]
  ------------------
 4087|   105k|        *nextPtr = next;
 4088|   105k|        return XML_ERROR_NONE;
 4089|   105k|      }
 4090|   262k|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|   262k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 4091|   262k|    default:;
  ------------------
  |  Branch (4091:5): [True: 0, False: 367k]
  ------------------
 4092|   262k|      *eventPP = s = next;
 4093|   367k|    }
 4094|   367k|  }
 4095|       |  /* not reached */
 4096|   215k|}
xmlparse.c:poolAppendChars:
  688|  60.4k|poolAppendChars(STRING_POOL *pool, const XML_Char *s, size_t len) {
  689|       |  // Detect and prevent integer overflow
  690|  60.4k|  if (len > SIZE_MAX / sizeof(XML_Char))
  ------------------
  |  Branch (690:7): [True: 0, False: 60.4k]
  ------------------
  691|      0|    return false;
  692|       |
  693|  60.4k|  if (! poolGrowUntil(pool, len))
  ------------------
  |  Branch (693:7): [True: 0, False: 60.4k]
  ------------------
  694|      0|    return false;
  695|       |
  696|  60.4k|  memcpy(pool->ptr, s, len * sizeof(XML_Char));
  697|  60.4k|  pool->ptr += len;
  698|       |
  699|       |  return true;
  700|  60.4k|}
xmlparse.c:poolGrowUntil:
 8665|  60.4k|poolGrowUntil(STRING_POOL *pool, size_t needed) {
 8666|  65.6k|  for (;;) {
 8667|  65.6k|    const size_t available = pool->end - pool->ptr;
 8668|  65.6k|    if (available >= needed) {
  ------------------
  |  Branch (8668:9): [True: 60.4k, False: 5.24k]
  ------------------
 8669|  60.4k|      return true;
 8670|  60.4k|    }
 8671|  5.24k|    if (! poolGrow(pool)) {
  ------------------
  |  Branch (8671:9): [True: 0, False: 5.24k]
  ------------------
 8672|       |      return false;
 8673|      0|    }
 8674|  5.24k|  }
 8675|  60.4k|}
xmlparse.c:poolGrow:
 8560|  54.6k|poolGrow(STRING_POOL *pool) {
 8561|  54.6k|  if (pool->freeBlocks) {
  ------------------
  |  Branch (8561:7): [True: 31.7k, False: 22.9k]
  ------------------
 8562|  31.7k|    if (pool->start == NULL) {
  ------------------
  |  Branch (8562:9): [True: 30.8k, False: 839]
  ------------------
 8563|  30.8k|      pool->blocks = pool->freeBlocks;
 8564|  30.8k|      pool->freeBlocks = pool->freeBlocks->next;
 8565|  30.8k|      pool->blocks->next = NULL;
 8566|  30.8k|      pool->start = pool->blocks->s;
 8567|  30.8k|      pool->end = pool->start + pool->blocks->size;
 8568|  30.8k|      pool->ptr = pool->start;
 8569|  30.8k|      return XML_TRUE;
  ------------------
  |  |   63|  30.8k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 8570|  30.8k|    }
 8571|    839|    if (pool->end - pool->start < pool->freeBlocks->size) {
  ------------------
  |  Branch (8571:9): [True: 592, False: 247]
  ------------------
 8572|    592|      BLOCK *tem = pool->freeBlocks->next;
 8573|    592|      pool->freeBlocks->next = pool->blocks;
 8574|    592|      pool->blocks = pool->freeBlocks;
 8575|    592|      pool->freeBlocks = tem;
 8576|    592|      memcpy(pool->blocks->s, pool->start,
 8577|    592|             (pool->end - pool->start) * sizeof(XML_Char));
 8578|    592|      pool->ptr = pool->blocks->s + EXPAT_SAFE_PTR_DIFF(pool->ptr, pool->start);
  ------------------
  |  |  229|    592|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 592, False: 0]
  |  |  |  Branch (229:44): [True: 592, False: 0]
  |  |  ------------------
  ------------------
 8579|    592|      pool->start = pool->blocks->s;
 8580|    592|      pool->end = pool->start + pool->blocks->size;
 8581|    592|      return XML_TRUE;
  ------------------
  |  |   63|    592|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 8582|    592|    }
 8583|    839|  }
 8584|  23.1k|  if (pool->blocks && pool->start == pool->blocks->s) {
  ------------------
  |  Branch (8584:7): [True: 4.22k, False: 18.9k]
  |  Branch (8584:23): [True: 2.87k, False: 1.35k]
  ------------------
 8585|  2.87k|    BLOCK *temp;
 8586|  2.87k|    int blockSize = (int)((unsigned)(pool->end - pool->start) * 2U);
 8587|  2.87k|    size_t bytesToAllocate;
 8588|       |
 8589|       |    /* NOTE: Needs to be calculated prior to calling `realloc`
 8590|       |             to avoid dangling pointers: */
 8591|  2.87k|    const ptrdiff_t offsetInsideBlock
 8592|  2.87k|        = EXPAT_SAFE_PTR_DIFF(pool->ptr, pool->start);
  ------------------
  |  |  229|  2.87k|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 2.87k, False: 0]
  |  |  |  Branch (229:44): [True: 2.87k, False: 0]
  |  |  ------------------
  ------------------
 8593|       |
 8594|  2.87k|    if (blockSize < 0) {
  ------------------
  |  Branch (8594:9): [True: 0, False: 2.87k]
  ------------------
 8595|       |      /* This condition traps a situation where either more than
 8596|       |       * INT_MAX/2 bytes have already been allocated.  This isn't
 8597|       |       * readily testable, since it is unlikely that an average
 8598|       |       * machine will have that much memory, so we exclude it from the
 8599|       |       * coverage statistics.
 8600|       |       */
 8601|      0|      return XML_FALSE; /* LCOV_EXCL_LINE */
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 8602|      0|    }
 8603|       |
 8604|  2.87k|    bytesToAllocate = poolBytesToAllocateFor(blockSize);
 8605|  2.87k|    if (bytesToAllocate == 0)
  ------------------
  |  Branch (8605:9): [True: 0, False: 2.87k]
  ------------------
 8606|      0|      return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 8607|       |
 8608|  2.87k|    temp = REALLOC(pool->parser, pool->blocks, bytesToAllocate);
  ------------------
  |  |  836|  2.87k|#  define REALLOC(parser, p, s) (expat_realloc((parser), (p), (s), __LINE__))
  ------------------
 8609|  2.87k|    if (temp == NULL)
  ------------------
  |  Branch (8609:9): [True: 0, False: 2.87k]
  ------------------
 8610|      0|      return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 8611|  2.87k|    pool->blocks = temp;
 8612|  2.87k|    pool->blocks->size = blockSize;
 8613|  2.87k|    pool->ptr = pool->blocks->s + offsetInsideBlock;
 8614|  2.87k|    pool->start = pool->blocks->s;
 8615|  2.87k|    pool->end = pool->start + blockSize;
 8616|  20.2k|  } else {
 8617|  20.2k|    BLOCK *tem;
 8618|  20.2k|    int blockSize = (int)(pool->end - pool->start);
 8619|  20.2k|    size_t bytesToAllocate;
 8620|       |
 8621|  20.2k|    if (blockSize < 0) {
  ------------------
  |  Branch (8621:9): [True: 0, False: 20.2k]
  ------------------
 8622|       |      /* This condition traps a situation where either more than
 8623|       |       * INT_MAX bytes have already been allocated (which is prevented
 8624|       |       * by various pieces of program logic, not least this one, never
 8625|       |       * mind the unlikelihood of actually having that much memory) or
 8626|       |       * the pool control fields have been corrupted (which could
 8627|       |       * conceivably happen in an extremely buggy user handler
 8628|       |       * function).  Either way it isn't readily testable, so we
 8629|       |       * exclude it from the coverage statistics.
 8630|       |       */
 8631|      0|      return XML_FALSE; /* LCOV_EXCL_LINE */
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 8632|      0|    }
 8633|       |
 8634|  20.2k|    if (blockSize < INIT_BLOCK_SIZE)
  ------------------
  |  |  257|  20.2k|#define INIT_BLOCK_SIZE 1024
  ------------------
  |  Branch (8634:9): [True: 19.7k, False: 552]
  ------------------
 8635|  19.7k|      blockSize = INIT_BLOCK_SIZE;
  ------------------
  |  |  257|  19.7k|#define INIT_BLOCK_SIZE 1024
  ------------------
 8636|    552|    else {
 8637|       |      /* Detect overflow, avoiding _signed_ overflow undefined behavior */
 8638|    552|      if ((int)((unsigned)blockSize * 2U) < 0) {
  ------------------
  |  Branch (8638:11): [True: 0, False: 552]
  ------------------
 8639|      0|        return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 8640|      0|      }
 8641|    552|      blockSize *= 2;
 8642|    552|    }
 8643|       |
 8644|  20.2k|    bytesToAllocate = poolBytesToAllocateFor(blockSize);
 8645|  20.2k|    if (bytesToAllocate == 0)
  ------------------
  |  Branch (8645:9): [True: 0, False: 20.2k]
  ------------------
 8646|      0|      return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 8647|       |
 8648|  20.2k|    tem = MALLOC(pool->parser, bytesToAllocate);
  ------------------
  |  |  835|  20.2k|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 8649|  20.2k|    if (! tem)
  ------------------
  |  Branch (8649:9): [True: 0, False: 20.2k]
  ------------------
 8650|      0|      return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 8651|  20.2k|    tem->size = blockSize;
 8652|  20.2k|    tem->next = pool->blocks;
 8653|  20.2k|    pool->blocks = tem;
 8654|  20.2k|    if (pool->ptr != pool->start)
  ------------------
  |  Branch (8654:9): [True: 842, False: 19.4k]
  ------------------
 8655|    842|      memcpy(tem->s, pool->start,
 8656|    842|             EXPAT_SAFE_PTR_DIFF(pool->ptr, pool->start) * sizeof(XML_Char));
  ------------------
  |  |  229|    842|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 842, False: 0]
  |  |  |  Branch (229:44): [True: 842, False: 0]
  |  |  ------------------
  ------------------
 8657|  20.2k|    pool->ptr = tem->s + EXPAT_SAFE_PTR_DIFF(pool->ptr, pool->start);
  ------------------
  |  |  229|  20.2k|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 1.35k, False: 18.9k]
  |  |  |  Branch (229:44): [True: 1.35k, False: 0]
  |  |  ------------------
  ------------------
 8658|  20.2k|    pool->start = tem->s;
 8659|  20.2k|    pool->end = tem->s + blockSize;
 8660|  20.2k|  }
 8661|  23.1k|  return XML_TRUE;
  ------------------
  |  |   63|  23.1k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 8662|  23.1k|}
xmlparse.c:poolBytesToAllocateFor:
 8532|  23.1k|poolBytesToAllocateFor(int blockSize) {
 8533|       |  /* Unprotected math would be:
 8534|       |  ** return offsetof(BLOCK, s) + blockSize * sizeof(XML_Char);
 8535|       |  **
 8536|       |  ** Detect overflow, avoiding _signed_ overflow undefined behavior
 8537|       |  ** For a + b * c we check b * c in isolation first, so that addition of a
 8538|       |  ** on top has no chance of making us accept a small non-negative number
 8539|       |  */
 8540|  23.1k|  const size_t stretch = sizeof(XML_Char); /* can be 4 bytes */
 8541|       |
 8542|  23.1k|  if (blockSize <= 0)
  ------------------
  |  Branch (8542:7): [True: 0, False: 23.1k]
  ------------------
 8543|      0|    return 0;
 8544|       |
 8545|  23.1k|  if (blockSize > (int)(INT_MAX / stretch))
  ------------------
  |  Branch (8545:7): [True: 0, False: 23.1k]
  ------------------
 8546|      0|    return 0;
 8547|       |
 8548|  23.1k|  {
 8549|  23.1k|    const int stretchedBlockSize = blockSize * (int)stretch;
 8550|  23.1k|    const int bytesToAllocate
 8551|  23.1k|        = (int)(offsetof(BLOCK, s) + (unsigned)stretchedBlockSize);
 8552|  23.1k|    if (bytesToAllocate < 0)
  ------------------
  |  Branch (8552:9): [True: 0, False: 23.1k]
  ------------------
 8553|      0|      return 0;
 8554|       |
 8555|  23.1k|    return (size_t)bytesToAllocate;
 8556|  23.1k|  }
 8557|  23.1k|}
xmlparse.c:hashTableIterInit:
 8388|  12.0k|hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table) {
 8389|  12.0k|  iter->p = table->v;
 8390|  12.0k|  iter->end = iter->p ? iter->p + table->size : NULL;
  ------------------
  |  Branch (8390:15): [True: 7.46k, False: 4.61k]
  ------------------
 8391|  12.0k|}
xmlparse.c:hashTableIterNext:
 8394|  27.4k|hashTableIterNext(HASH_TABLE_ITER *iter) {
 8395|   499k|  while (iter->p != iter->end) {
  ------------------
  |  Branch (8395:10): [True: 487k, False: 12.0k]
  ------------------
 8396|   487k|    NAMED *tem = *(iter->p)++;
 8397|   487k|    if (tem)
  ------------------
  |  Branch (8397:9): [True: 15.3k, False: 471k]
  ------------------
 8398|  15.3k|      return tem;
 8399|   487k|  }
 8400|  12.0k|  return NULL;
 8401|  27.4k|}
xmlparse.c:storeAtts:
 4136|  59.5k|          enum XML_Account account) {
 4137|  59.5k|  DTD *const dtd = parser->m_dtd; /* save one level of indirection */
 4138|  59.5k|  int attIndex = 0;
 4139|  59.5k|  XML_Char *uri;
 4140|  59.5k|  int nPrefixes = 0;
 4141|  59.5k|  BINDING *binding;
 4142|  59.5k|  const XML_Char *localPart;
 4143|       |
 4144|       |  /* lookup the element type name */
 4145|  59.5k|  ELEMENT_TYPE *elementType
 4146|  59.5k|      = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, tagNamePtr->str, 0);
 4147|  59.5k|  if (! elementType) {
  ------------------
  |  Branch (4147:7): [True: 14.1k, False: 45.4k]
  ------------------
 4148|  14.1k|    const XML_Char *name = poolCopyString(&dtd->pool, tagNamePtr->str);
 4149|  14.1k|    if (! name)
  ------------------
  |  Branch (4149:9): [True: 0, False: 14.1k]
  ------------------
 4150|      0|      return XML_ERROR_NO_MEMORY;
 4151|  14.1k|    elementType = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, name,
 4152|  14.1k|                                         sizeof(ELEMENT_TYPE));
 4153|  14.1k|    if (! elementType)
  ------------------
  |  Branch (4153:9): [True: 0, False: 14.1k]
  ------------------
 4154|      0|      return XML_ERROR_NO_MEMORY;
 4155|  14.1k|    if (! elementType->defaultAttForName.parser)
  ------------------
  |  Branch (4155:9): [True: 14.1k, False: 0]
  ------------------
 4156|  14.1k|      hashTableInit(&(elementType->defaultAttForName), parser);
 4157|  14.1k|    if (parser->m_ns && ! setElementTypePrefix(parser, elementType))
  ------------------
  |  Branch (4157:9): [True: 5.82k, False: 8.34k]
  |  Branch (4157:25): [True: 0, False: 5.82k]
  ------------------
 4158|      0|      return XML_ERROR_NO_MEMORY;
 4159|  14.1k|  }
 4160|  59.5k|  const size_t nDefaultAtts = elementType->nDefaultAtts;
 4161|       |
 4162|       |  /* Detect and prevent integer overflow. */
 4163|  59.5k|  if (parser->m_attsSize > (size_t)INT_MAX)
  ------------------
  |  Branch (4163:7): [True: 0, False: 59.5k]
  ------------------
 4164|      0|    return XML_ERROR_NO_MEMORY;
 4165|       |
 4166|       |  /* get the attributes from the tokenizer */
 4167|  59.5k|  size_t n = (size_t)XmlGetAttributes(enc, attStr, (int)parser->m_attsSize,
  ------------------
  |  |  261|  59.5k|    (((enc)->getAtts)(enc, ptr, attsMax, atts))
  ------------------
 4168|  59.5k|                                      parser->m_atts);
 4169|       |
 4170|       |  /* Detect and prevent integer overflow */
 4171|  59.5k|  if (n > SIZE_MAX - nDefaultAtts) {
  ------------------
  |  Branch (4171:7): [True: 0, False: 59.5k]
  ------------------
 4172|      0|    return XML_ERROR_NO_MEMORY;
 4173|      0|  }
 4174|       |
 4175|  59.5k|  if (n + nDefaultAtts > parser->m_attsSize) {
  ------------------
  |  Branch (4175:7): [True: 181, False: 59.4k]
  ------------------
 4176|    181|    size_t oldAttsSize = parser->m_attsSize;
 4177|       |
 4178|       |    /* Detect and prevent integer overflow */
 4179|    181|    if ((nDefaultAtts > SIZE_MAX - INIT_ATTS_SIZE)
  ------------------
  |  |  255|    181|#define INIT_ATTS_SIZE 16
  ------------------
  |  Branch (4179:9): [True: 0, False: 181]
  ------------------
 4180|    181|        || (n > SIZE_MAX - (nDefaultAtts + INIT_ATTS_SIZE))) {
  ------------------
  |  |  255|    181|#define INIT_ATTS_SIZE 16
  ------------------
  |  Branch (4180:12): [True: 0, False: 181]
  ------------------
 4181|      0|      return XML_ERROR_NO_MEMORY;
 4182|      0|    }
 4183|       |
 4184|    181|    parser->m_attsSize = n + nDefaultAtts + INIT_ATTS_SIZE;
  ------------------
  |  |  255|    181|#define INIT_ATTS_SIZE 16
  ------------------
 4185|       |
 4186|       |    /* Detect and prevent integer overflow. */
 4187|    181|    if (parser->m_attsSize > SIZE_MAX / sizeof(ATTRIBUTE)) {
  ------------------
  |  Branch (4187:9): [True: 0, False: 181]
  ------------------
 4188|      0|      parser->m_attsSize = oldAttsSize;
 4189|      0|      return XML_ERROR_NO_MEMORY;
 4190|      0|    }
 4191|       |
 4192|    181|    ATTRIBUTE *const temp = REALLOC(parser, parser->m_atts,
  ------------------
  |  |  836|    181|#  define REALLOC(parser, p, s) (expat_realloc((parser), (p), (s), __LINE__))
  ------------------
 4193|    181|                                    parser->m_attsSize * sizeof(ATTRIBUTE));
 4194|    181|    if (temp == NULL) {
  ------------------
  |  Branch (4194:9): [True: 0, False: 181]
  ------------------
 4195|      0|      parser->m_attsSize = oldAttsSize;
 4196|      0|      return XML_ERROR_NO_MEMORY;
 4197|      0|    }
 4198|    181|    parser->m_atts = temp;
 4199|    181|    if (n > oldAttsSize) {
  ------------------
  |  Branch (4199:9): [True: 168, False: 13]
  ------------------
 4200|       |      /* Detect and prevent integer overflow. */
 4201|    168|      if (n > (size_t)INT_MAX)
  ------------------
  |  Branch (4201:11): [True: 0, False: 168]
  ------------------
 4202|      0|        return XML_ERROR_NO_MEMORY;
 4203|    168|      XmlGetAttributes(enc, attStr, (int)n, parser->m_atts);
  ------------------
  |  |  261|    168|    (((enc)->getAtts)(enc, ptr, attsMax, atts))
  ------------------
 4204|    168|    }
 4205|    181|  }
 4206|       |
 4207|       |  /* the attribute list for the application */
 4208|  59.5k|  const XML_Char **const appAtts = (const XML_Char **)parser->m_atts;
 4209|  93.1k|  for (size_t i = 0; i < n; i++) {
  ------------------
  |  Branch (4209:22): [True: 33.8k, False: 59.2k]
  ------------------
 4210|  33.8k|    ATTRIBUTE *currAtt = &parser->m_atts[i];
 4211|       |    /* add the name and value to the attribute list */
 4212|  33.8k|    ATTRIBUTE_ID *attId
 4213|  33.8k|        = getAttributeId(parser, enc, currAtt->name,
 4214|  33.8k|                         currAtt->name + XmlNameLength(enc, currAtt->name));
  ------------------
  |  |  256|  33.8k|#  define XmlNameLength(enc, ptr) (((enc)->nameLength)(enc, ptr))
  ------------------
 4215|  33.8k|    if (! attId)
  ------------------
  |  Branch (4215:9): [True: 0, False: 33.8k]
  ------------------
 4216|      0|      return XML_ERROR_NO_MEMORY;
 4217|       |    /* Detect duplicate attributes by their QNames. This does not work when
 4218|       |       namespace processing is turned on and different prefixes for the same
 4219|       |       namespace are used. For this case we have a check further down.
 4220|       |    */
 4221|  33.8k|    if ((attId->name)[-1]) {
  ------------------
  |  Branch (4221:9): [True: 168, False: 33.6k]
  ------------------
 4222|    168|      if (enc == parser->m_encoding)
  ------------------
  |  Branch (4222:11): [True: 167, False: 1]
  ------------------
 4223|    167|        parser->m_eventPtr = parser->m_atts[i].name;
 4224|    168|      return XML_ERROR_DUPLICATE_ATTRIBUTE;
 4225|    168|    }
 4226|  33.6k|    (attId->name)[-1] = 1;
 4227|  33.6k|    appAtts[attIndex++] = attId->name;
 4228|  33.6k|    if (! parser->m_atts[i].normalized) {
  ------------------
  |  Branch (4228:9): [True: 5.75k, False: 27.9k]
  ------------------
 4229|  5.75k|      bool isCdata = true;
 4230|       |
 4231|       |      /* figure out whether declared as other than CDATA */
 4232|  5.75k|      if (attId->maybeTokenized) {
  ------------------
  |  Branch (4232:11): [True: 638, False: 5.11k]
  ------------------
 4233|    638|        NAME_AND_DEFAULT_ATTRIBUTE *const nameAndDefaultAttribute
 4234|    638|            = (NAME_AND_DEFAULT_ATTRIBUTE *)lookup(
 4235|    638|                parser, &(elementType->defaultAttForName), attId->name, 0);
 4236|    638|        if (nameAndDefaultAttribute != NULL) {
  ------------------
  |  Branch (4236:13): [True: 444, False: 194]
  ------------------
 4237|    444|          assert(nameAndDefaultAttribute->attIndex < elementType->nDefaultAtts);
  ------------------
  |  Branch (4237:11): [True: 0, False: 444]
  |  Branch (4237:11): [True: 444, False: 0]
  ------------------
 4238|    444|          const DEFAULT_ATTRIBUTE *const att
 4239|    444|              = elementType->defaultAtts + nameAndDefaultAttribute->attIndex;
 4240|    444|          isCdata = att->isCdata;
 4241|    444|        }
 4242|    638|      }
 4243|       |
 4244|       |      /* normalize the attribute value */
 4245|  5.75k|      const enum XML_Error result = storeAttributeValue(
 4246|  5.75k|          parser, enc, isCdata, parser->m_atts[i].valuePtr,
 4247|  5.75k|          parser->m_atts[i].valueEnd, &parser->m_tempPool, account);
 4248|  5.75k|      if (result)
  ------------------
  |  Branch (4248:11): [True: 113, False: 5.64k]
  ------------------
 4249|    113|        return result;
 4250|  5.64k|      appAtts[attIndex] = poolStart(&parser->m_tempPool);
  ------------------
  |  |  671|  5.64k|#define poolStart(pool) ((pool)->start)
  ------------------
 4251|  5.64k|      poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|  5.64k|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 4252|  27.9k|    } else {
 4253|       |      /* the value did not need normalizing */
 4254|  27.9k|      appAtts[attIndex] = poolStoreString(&parser->m_tempPool, enc,
 4255|  27.9k|                                          parser->m_atts[i].valuePtr,
 4256|  27.9k|                                          parser->m_atts[i].valueEnd);
 4257|  27.9k|      if (appAtts[attIndex] == 0)
  ------------------
  |  Branch (4257:11): [True: 0, False: 27.9k]
  ------------------
 4258|      0|        return XML_ERROR_NO_MEMORY;
 4259|  27.9k|      poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|  27.9k|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 4260|  27.9k|    }
 4261|       |    /* handle prefixed attribute names */
 4262|  33.5k|    if (attId->prefix) {
  ------------------
  |  Branch (4262:9): [True: 19.9k, False: 13.6k]
  ------------------
 4263|  19.9k|      if (attId->xmlns) {
  ------------------
  |  Branch (4263:11): [True: 1.86k, False: 18.0k]
  ------------------
 4264|       |        /* deal with namespace declarations here */
 4265|  1.86k|        enum XML_Error result = addBinding(parser, attId->prefix, attId,
 4266|  1.86k|                                           appAtts[attIndex], bindingsPtr);
 4267|  1.86k|        if (result)
  ------------------
  |  Branch (4267:13): [True: 22, False: 1.84k]
  ------------------
 4268|     22|          return result;
 4269|  1.84k|        --attIndex;
 4270|  18.0k|      } else {
 4271|       |        /* deal with other prefixed names later */
 4272|  18.0k|        attIndex++;
 4273|  18.0k|        nPrefixes++;
 4274|  18.0k|        (attId->name)[-1] = 2;
 4275|  18.0k|      }
 4276|  19.9k|    } else
 4277|  13.6k|      attIndex++;
 4278|  33.5k|  }
 4279|       |
 4280|       |  /* set-up for XML_GetSpecifiedAttributeCount and XML_GetIdAttributeIndex */
 4281|  59.2k|  parser->m_nSpecifiedAtts = attIndex;
 4282|  59.2k|  if (elementType->idAtt && (elementType->idAtt->name)[-1]) {
  ------------------
  |  Branch (4282:7): [True: 421, False: 58.8k]
  |  Branch (4282:29): [True: 213, False: 208]
  ------------------
 4283|    279|    for (int i = 0; i < attIndex; i += 2)
  ------------------
  |  Branch (4283:21): [True: 279, False: 0]
  ------------------
 4284|    279|      if (appAtts[i] == elementType->idAtt->name) {
  ------------------
  |  Branch (4284:11): [True: 213, False: 66]
  ------------------
 4285|    213|        parser->m_idAttIndex = i;
 4286|    213|        break;
 4287|    213|      }
 4288|    213|  } else
 4289|  59.0k|    parser->m_idAttIndex = -1;
 4290|       |
 4291|       |  /* do attribute defaulting */
 4292|  76.4k|  for (size_t i = 0; i < nDefaultAtts; i++) {
  ------------------
  |  Branch (4292:22): [True: 17.1k, False: 59.2k]
  ------------------
 4293|  17.1k|    const DEFAULT_ATTRIBUTE *da = elementType->defaultAtts + i;
 4294|  17.1k|    if (! (da->id->name)[-1] && da->value) {
  ------------------
  |  Branch (4294:9): [True: 16.3k, False: 779]
  |  Branch (4294:33): [True: 15.9k, False: 480]
  ------------------
 4295|  15.9k|      if (da->id->prefix) {
  ------------------
  |  Branch (4295:11): [True: 14.9k, False: 960]
  ------------------
 4296|  14.9k|        if (da->id->xmlns) {
  ------------------
  |  Branch (4296:13): [True: 11.8k, False: 3.15k]
  ------------------
 4297|  11.8k|          enum XML_Error result = addBinding(parser, da->id->prefix, da->id,
 4298|  11.8k|                                             da->value, bindingsPtr);
 4299|  11.8k|          if (result)
  ------------------
  |  Branch (4299:15): [True: 3, False: 11.7k]
  ------------------
 4300|      3|            return result;
 4301|  11.8k|        } else {
 4302|  3.15k|          (da->id->name)[-1] = 2;
 4303|  3.15k|          nPrefixes++;
 4304|  3.15k|          appAtts[attIndex++] = da->id->name;
 4305|  3.15k|          appAtts[attIndex++] = da->value;
 4306|  3.15k|        }
 4307|  14.9k|      } else {
 4308|    960|        (da->id->name)[-1] = 1;
 4309|    960|        appAtts[attIndex++] = da->id->name;
 4310|    960|        appAtts[attIndex++] = da->value;
 4311|    960|      }
 4312|  15.9k|    }
 4313|  17.1k|  }
 4314|  59.2k|  appAtts[attIndex] = 0;
 4315|       |
 4316|       |  /* expand prefixed attribute names, check for duplicates,
 4317|       |     and clear flags that say whether attributes were specified */
 4318|  59.2k|  int i = 0;
 4319|  59.2k|  if (nPrefixes) {
  ------------------
  |  Branch (4319:7): [True: 18.2k, False: 41.0k]
  ------------------
 4320|  18.2k|    unsigned int j; /* hash table index */
 4321|  18.2k|    unsigned long version = parser->m_nsAttsVersion;
 4322|       |
 4323|       |    /* Detect and prevent invalid shift */
 4324|  18.2k|    if (parser->m_nsAttsPower >= sizeof(unsigned int) * 8 /* bits per byte */) {
  ------------------
  |  Branch (4324:9): [True: 0, False: 18.2k]
  ------------------
 4325|      0|      return XML_ERROR_NO_MEMORY;
 4326|      0|    }
 4327|       |
 4328|  18.2k|    unsigned int nsAttsSize = 1u << parser->m_nsAttsPower;
 4329|  18.2k|    unsigned char oldNsAttsPower = parser->m_nsAttsPower;
 4330|       |    /* size of hash table must be at least 2 * (# of prefixed attributes) */
 4331|  18.2k|    if (parser->m_nsAttsPower == 0
  ------------------
  |  Branch (4331:9): [True: 243, False: 17.9k]
  ------------------
 4332|  17.9k|        || (nPrefixes >> (parser->m_nsAttsPower - 1))) {
  ------------------
  |  Branch (4332:12): [True: 16, False: 17.9k]
  ------------------
 4333|       |      /* hash table size must also be a power of 2 and >= 8 */
 4334|    748|      while (nPrefixes >> parser->m_nsAttsPower++)
  ------------------
  |  Branch (4334:14): [True: 489, False: 259]
  ------------------
 4335|    489|        ;
 4336|    259|      if (parser->m_nsAttsPower < 3)
  ------------------
  |  Branch (4336:11): [True: 122, False: 137]
  ------------------
 4337|    122|        parser->m_nsAttsPower = 3;
 4338|       |
 4339|       |      /* Detect and prevent invalid shift */
 4340|    259|      if (parser->m_nsAttsPower >= sizeof(nsAttsSize) * 8 /* bits per byte */) {
  ------------------
  |  Branch (4340:11): [True: 0, False: 259]
  ------------------
 4341|       |        /* Restore actual size of memory in m_nsAtts */
 4342|      0|        parser->m_nsAttsPower = oldNsAttsPower;
 4343|      0|        return XML_ERROR_NO_MEMORY;
 4344|      0|      }
 4345|       |
 4346|    259|      nsAttsSize = 1u << parser->m_nsAttsPower;
 4347|       |
 4348|       |      /* Detect and prevent integer overflow.
 4349|       |       * The preprocessor guard addresses the "always false" warning
 4350|       |       * from -Wtype-limits on platforms where
 4351|       |       * sizeof(unsigned int) < sizeof(size_t), e.g. on x86_64. */
 4352|       |#if UINT_MAX >= SIZE_MAX
 4353|       |      if (nsAttsSize > SIZE_MAX / sizeof(NS_ATT)) {
 4354|       |        /* Restore actual size of memory in m_nsAtts */
 4355|       |        parser->m_nsAttsPower = oldNsAttsPower;
 4356|       |        return XML_ERROR_NO_MEMORY;
 4357|       |      }
 4358|       |#endif
 4359|       |
 4360|    259|      NS_ATT *const temp
 4361|    259|          = REALLOC(parser, parser->m_nsAtts, nsAttsSize * sizeof(NS_ATT));
  ------------------
  |  |  836|    259|#  define REALLOC(parser, p, s) (expat_realloc((parser), (p), (s), __LINE__))
  ------------------
 4362|    259|      if (! temp) {
  ------------------
  |  Branch (4362:11): [True: 0, False: 259]
  ------------------
 4363|       |        /* Restore actual size of memory in m_nsAtts */
 4364|      0|        parser->m_nsAttsPower = oldNsAttsPower;
 4365|      0|        return XML_ERROR_NO_MEMORY;
 4366|      0|      }
 4367|    259|      parser->m_nsAtts = temp;
 4368|    259|      version = 0; /* force re-initialization of m_nsAtts hash table */
 4369|    259|    }
 4370|       |    /* using a version flag saves us from initializing m_nsAtts every time */
 4371|  18.2k|    if (! version) { /* initialize version flags when version wraps around */
  ------------------
  |  Branch (4371:9): [True: 259, False: 17.9k]
  ------------------
 4372|    259|      version = INIT_ATTS_VERSION;
  ------------------
  |  |  256|    259|#define INIT_ATTS_VERSION 0xFFFFFFFF
  ------------------
 4373|  4.26k|      for (j = nsAttsSize; j != 0;)
  ------------------
  |  Branch (4373:28): [True: 4.00k, False: 259]
  ------------------
 4374|  4.00k|        parser->m_nsAtts[--j].version = version;
 4375|    259|    }
 4376|  18.2k|    parser->m_nsAttsVersion = --version;
 4377|       |
 4378|       |    /* expand prefixed names and check for duplicates */
 4379|  21.3k|    for (; i < attIndex; i += 2) {
  ------------------
  |  Branch (4379:12): [True: 21.3k, False: 0]
  ------------------
 4380|  21.3k|      const XML_Char *s = appAtts[i];
 4381|  21.3k|      if (s[-1] == 2) { /* prefixed */
  ------------------
  |  Branch (4381:11): [True: 21.0k, False: 238]
  ------------------
 4382|  21.0k|        struct siphash sip_state;
 4383|  21.0k|        struct sipkey sip_key;
 4384|       |
 4385|  21.0k|        copy_salt_to_sipkey(parser, &sip_key);
 4386|  21.0k|        sip24_init(&sip_state, &sip_key);
 4387|       |
 4388|  21.0k|        ((XML_Char *)s)[-1] = 0; /* clear flag */
 4389|  21.0k|        ATTRIBUTE_ID *const id
 4390|  21.0k|            = (ATTRIBUTE_ID *)lookup(parser, &dtd->attributeIds, s, 0);
 4391|  21.0k|        if (! id || ! id->prefix) {
  ------------------
  |  Branch (4391:13): [True: 0, False: 21.0k]
  |  Branch (4391:21): [True: 0, False: 21.0k]
  ------------------
 4392|       |          /* This code is walking through the appAtts array, dealing
 4393|       |           * with (in this case) a prefixed attribute name.  To be in
 4394|       |           * the array, the attribute must have already been bound, so
 4395|       |           * has to have passed through the hash table lookup once
 4396|       |           * already.  That implies that an entry for it already
 4397|       |           * exists, so the lookup above will return a pointer to
 4398|       |           * already allocated memory.  There is no opportunity for
 4399|       |           * the allocator to fail, so the condition above cannot be
 4400|       |           * fulfilled.
 4401|       |           *
 4402|       |           * Since it is difficult to be certain that the above
 4403|       |           * analysis is complete, we retain the test and merely
 4404|       |           * remove the code from coverage tests.
 4405|       |           */
 4406|      0|          return XML_ERROR_NO_MEMORY; /* LCOV_EXCL_LINE */
 4407|      0|        }
 4408|  21.0k|        const BINDING *const b = id->prefix->binding;
 4409|  21.0k|        if (! b)
  ------------------
  |  Branch (4409:13): [True: 54, False: 21.0k]
  ------------------
 4410|     54|          return XML_ERROR_UNBOUND_PREFIX;
 4411|       |
 4412|  21.0k|        if (! poolAppendChars(&parser->m_tempPool, b->uri, b->uriLen))
  ------------------
  |  Branch (4412:13): [True: 0, False: 21.0k]
  ------------------
 4413|      0|          return XML_ERROR_NO_MEMORY;
 4414|       |
 4415|  21.0k|        sip24_update(&sip_state, b->uri, b->uriLen * sizeof(XML_Char));
 4416|       |
 4417|  82.4k|        while (*s++ != XML_T(ASCII_COLON))
  ------------------
  |  |  220|  82.4k|#  define XML_T(x) x
  ------------------
  |  Branch (4417:16): [True: 61.4k, False: 21.0k]
  ------------------
 4418|  61.4k|          ;
 4419|       |
 4420|  21.0k|        sip24_update(&sip_state, s, keylen(s) * sizeof(XML_Char));
 4421|       |
 4422|  21.0k|        {
 4423|  21.0k|          const size_t len = xcslen(s) + /*null terminator*/ 1;
 4424|  21.0k|          if (! poolAppendChars(&parser->m_tempPool, s, len))
  ------------------
  |  Branch (4424:15): [True: 0, False: 21.0k]
  ------------------
 4425|      0|            return XML_ERROR_NO_MEMORY;
 4426|  21.0k|        }
 4427|       |
 4428|  21.0k|        const unsigned long uriHash = (unsigned long)sip24_final(&sip_state);
 4429|       |
 4430|  21.0k|        { /* Check hash table for duplicate of expanded name (uriName).
 4431|       |             Derived from code in lookup(parser, HASH_TABLE *table, ...).
 4432|       |          */
 4433|  21.0k|          unsigned char step = 0;
 4434|  21.0k|          unsigned long mask = nsAttsSize - 1;
 4435|  21.0k|          j = uriHash & mask; /* index into hash table */
 4436|  21.2k|          while (parser->m_nsAtts[j].version == version) {
  ------------------
  |  Branch (4436:18): [True: 297, False: 20.9k]
  ------------------
 4437|       |            /* for speed we compare stored hash values first */
 4438|    297|            if (uriHash == parser->m_nsAtts[j].hash) {
  ------------------
  |  Branch (4438:17): [True: 11, False: 286]
  ------------------
 4439|     11|              const XML_Char *s1 = poolStart(&parser->m_tempPool);
  ------------------
  |  |  671|     11|#define poolStart(pool) ((pool)->start)
  ------------------
 4440|     11|              const XML_Char *s2 = parser->m_nsAtts[j].uriName;
 4441|       |              /* s1 is null terminated, but not s2 */
 4442|  1.01k|              for (; *s1 == *s2 && *s1 != 0; s1++, s2++)
  ------------------
  |  Branch (4442:22): [True: 1.01k, False: 0]
  |  Branch (4442:36): [True: 1.00k, False: 11]
  ------------------
 4443|  1.00k|                ;
 4444|     11|              if (*s1 == 0)
  ------------------
  |  Branch (4444:19): [True: 11, False: 0]
  ------------------
 4445|     11|                return XML_ERROR_DUPLICATE_ATTRIBUTE;
 4446|     11|            }
 4447|    286|            if (! step)
  ------------------
  |  Branch (4447:17): [True: 251, False: 35]
  ------------------
 4448|    251|              step = PROBE_STEP(uriHash, mask, parser->m_nsAttsPower);
  ------------------
  |  |  251|    251|  ((unsigned char)((SECOND_HASH(hash, mask, power)) | 1))
  |  |  ------------------
  |  |  |  |  249|    251|  ((((hash) & ~(mask)) >> ((power) - 1)) & ((mask) >> 2))
  |  |  ------------------
  ------------------
 4449|    286|            j < step ? (j += nsAttsSize - step) : (j -= step);
  ------------------
  |  Branch (4449:13): [True: 20, False: 266]
  ------------------
 4450|    286|          }
 4451|  21.0k|        }
 4452|       |
 4453|  20.9k|        if (parser->m_ns_triplets) { /* append namespace separator and prefix */
  ------------------
  |  Branch (4453:13): [True: 0, False: 20.9k]
  ------------------
 4454|      0|          parser->m_tempPool.ptr[-1] = parser->m_namespaceSeparator;
 4455|      0|          s = b->prefix->name;
 4456|      0|          const size_t len = xcslen(s) + /*null terminator*/ 1;
 4457|      0|          if (! poolAppendChars(&parser->m_tempPool, s, len))
  ------------------
  |  Branch (4457:15): [True: 0, False: 0]
  ------------------
 4458|      0|            return XML_ERROR_NO_MEMORY;
 4459|      0|        }
 4460|       |
 4461|       |        /* store expanded name in attribute list */
 4462|  20.9k|        s = poolStart(&parser->m_tempPool);
  ------------------
  |  |  671|  20.9k|#define poolStart(pool) ((pool)->start)
  ------------------
 4463|  20.9k|        poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|  20.9k|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 4464|  20.9k|        appAtts[i] = s;
 4465|       |
 4466|       |        /* fill empty slot with new version, uriName and hash value */
 4467|  20.9k|        parser->m_nsAtts[j].version = version;
 4468|  20.9k|        parser->m_nsAtts[j].hash = uriHash;
 4469|  20.9k|        parser->m_nsAtts[j].uriName = s;
 4470|       |
 4471|  20.9k|        if (! --nPrefixes) {
  ------------------
  |  Branch (4471:13): [True: 18.1k, False: 2.83k]
  ------------------
 4472|  18.1k|          i += 2;
 4473|  18.1k|          break;
 4474|  18.1k|        }
 4475|  20.9k|      } else                     /* not prefixed */
 4476|    238|        ((XML_Char *)s)[-1] = 0; /* clear flag */
 4477|  21.3k|    }
 4478|  18.2k|  }
 4479|       |  /* clear flags for the remaining attributes */
 4480|  72.5k|  for (; i < attIndex; i += 2)
  ------------------
  |  Branch (4480:10): [True: 13.3k, False: 59.2k]
  ------------------
 4481|  13.3k|    ((XML_Char *)(appAtts[i]))[-1] = 0;
 4482|  72.7k|  for (binding = *bindingsPtr; binding; binding = binding->nextTagBinding)
  ------------------
  |  Branch (4482:32): [True: 13.5k, False: 59.2k]
  ------------------
 4483|  13.5k|    binding->attId->name[-1] = 0;
 4484|       |
 4485|  59.2k|  if (! parser->m_ns)
  ------------------
  |  Branch (4485:7): [True: 22.5k, False: 36.6k]
  ------------------
 4486|  22.5k|    return XML_ERROR_NONE;
 4487|       |
 4488|       |  /* expand the element type name */
 4489|  36.6k|  if (elementType->prefix) {
  ------------------
  |  Branch (4489:7): [True: 1.58k, False: 35.1k]
  ------------------
 4490|  1.58k|    binding = elementType->prefix->binding;
 4491|  1.58k|    if (! binding)
  ------------------
  |  Branch (4491:9): [True: 44, False: 1.54k]
  ------------------
 4492|     44|      return XML_ERROR_UNBOUND_PREFIX;
 4493|  1.54k|    localPart = tagNamePtr->str;
 4494|  6.14k|    while (*localPart++ != XML_T(ASCII_COLON))
  ------------------
  |  |  220|  6.14k|#  define XML_T(x) x
  ------------------
  |  Branch (4494:12): [True: 4.59k, False: 1.54k]
  ------------------
 4495|  4.59k|      ;
 4496|  35.1k|  } else if (dtd->defaultPrefix.binding) {
  ------------------
  |  Branch (4496:14): [True: 2.94k, False: 32.1k]
  ------------------
 4497|  2.94k|    binding = dtd->defaultPrefix.binding;
 4498|  2.94k|    localPart = tagNamePtr->str;
 4499|  2.94k|  } else
 4500|  32.1k|    return XML_ERROR_NONE;
 4501|  4.49k|  size_t prefixLen = 0;
 4502|  4.49k|  if (parser->m_ns_triplets && binding->prefix->name)
  ------------------
  |  Branch (4502:7): [True: 0, False: 4.49k]
  |  Branch (4502:32): [True: 0, False: 0]
  ------------------
 4503|      0|    prefixLen = xcslen(binding->prefix->name) + /*null terminator*/ 1;
 4504|  4.49k|  tagNamePtr->localPart = localPart;
 4505|  4.49k|  tagNamePtr->uriLen = binding->uriLen;
 4506|  4.49k|  tagNamePtr->prefix = binding->prefix->name;
 4507|  4.49k|  tagNamePtr->prefixLen = prefixLen;
 4508|       |
 4509|  4.49k|  const size_t localPartLen = xcslen(localPart) + /*null terminator*/ 1;
 4510|       |
 4511|       |  /* Detect and prevent integer overflow */
 4512|  4.49k|  if (binding->uriLen > SIZE_MAX - prefixLen
  ------------------
  |  Branch (4512:7): [True: 0, False: 4.49k]
  ------------------
 4513|  4.49k|      || localPartLen > SIZE_MAX - (binding->uriLen + prefixLen)) {
  ------------------
  |  Branch (4513:10): [True: 0, False: 4.49k]
  ------------------
 4514|      0|    return XML_ERROR_NO_MEMORY;
 4515|      0|  }
 4516|       |
 4517|  4.49k|  const size_t totalLen = localPartLen + binding->uriLen + prefixLen;
 4518|  4.49k|  if (totalLen > binding->uriAlloc) {
  ------------------
  |  Branch (4518:7): [True: 169, False: 4.32k]
  ------------------
 4519|       |    /* Detect and prevent integer overflow */
 4520|    169|    if (totalLen > SIZE_MAX - EXPAND_SPARE
  ------------------
  |  |  260|    338|#define EXPAND_SPARE 24
  ------------------
  |  Branch (4520:9): [True: 0, False: 169]
  ------------------
 4521|    169|        || totalLen + EXPAND_SPARE > SIZE_MAX / sizeof(XML_Char)) {
  ------------------
  |  |  260|    169|#define EXPAND_SPARE 24
  ------------------
  |  Branch (4521:12): [True: 0, False: 169]
  ------------------
 4522|      0|      return XML_ERROR_NO_MEMORY;
 4523|      0|    }
 4524|       |
 4525|    169|    uri = MALLOC(parser, (totalLen + EXPAND_SPARE) * sizeof(XML_Char));
  ------------------
  |  |  835|    169|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 4526|    169|    if (! uri)
  ------------------
  |  Branch (4526:9): [True: 0, False: 169]
  ------------------
 4527|      0|      return XML_ERROR_NO_MEMORY;
 4528|    169|    binding->uriAlloc = totalLen + EXPAND_SPARE;
  ------------------
  |  |  260|    169|#define EXPAND_SPARE 24
  ------------------
 4529|    169|    memcpy(uri, binding->uri, binding->uriLen * sizeof(XML_Char));
 4530|  2.25k|    for (TAG *p = parser->m_tagStack; p; p = p->parent)
  ------------------
  |  Branch (4530:39): [True: 2.08k, False: 169]
  ------------------
 4531|  2.08k|      if (p->name.str == binding->uri)
  ------------------
  |  Branch (4531:11): [True: 338, False: 1.74k]
  ------------------
 4532|    338|        p->name.str = uri;
 4533|    169|    FREE(parser, binding->uri);
  ------------------
  |  |  837|    169|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 4534|    169|    binding->uri = uri;
 4535|    169|  }
 4536|       |  /* if m_namespaceSeparator != '\0' then uri includes it already */
 4537|  4.49k|  uri = binding->uri + binding->uriLen;
 4538|       |  /* Detect and prevent integer overflow */
 4539|  4.49k|  if (localPartLen > SIZE_MAX / sizeof(XML_Char)) {
  ------------------
  |  Branch (4539:7): [True: 0, False: 4.49k]
  ------------------
 4540|      0|    return XML_ERROR_NO_MEMORY;
 4541|      0|  }
 4542|  4.49k|  memcpy(uri, localPart, localPartLen * sizeof(XML_Char));
 4543|       |  /* we always have a namespace separator between localPart and prefix */
 4544|  4.49k|  if (prefixLen) {
  ------------------
  |  Branch (4544:7): [True: 0, False: 4.49k]
  ------------------
 4545|      0|    uri += localPartLen - 1;
 4546|      0|    *uri = parser->m_namespaceSeparator; /* replace null terminator */
 4547|      0|    memcpy(uri + 1, binding->prefix->name, prefixLen * sizeof(XML_Char));
 4548|      0|  }
 4549|  4.49k|  tagNamePtr->str = binding->uri;
 4550|  4.49k|  return XML_ERROR_NONE;
 4551|  4.49k|}
xmlparse.c:setElementTypePrefix:
 7592|  7.02k|setElementTypePrefix(XML_Parser parser, ELEMENT_TYPE *elementType) {
 7593|  7.02k|  DTD *const dtd = parser->m_dtd; /* save one level of indirection */
 7594|  7.02k|  const XML_Char *name;
 7595|  23.0k|  for (name = elementType->name; *name; name++) {
  ------------------
  |  Branch (7595:34): [True: 16.5k, False: 6.50k]
  ------------------
 7596|  16.5k|    if (*name == XML_T(ASCII_COLON)) {
  ------------------
  |  |  220|  16.5k|#  define XML_T(x) x
  ------------------
  |  Branch (7596:9): [True: 523, False: 16.0k]
  ------------------
 7597|    523|      PREFIX *prefix;
 7598|    523|      const XML_Char *s;
 7599|  1.72k|      for (s = elementType->name; s != name; s++) {
  ------------------
  |  Branch (7599:35): [True: 1.19k, False: 523]
  ------------------
 7600|  1.19k|        if (! poolAppendChar(&dtd->pool, *s))
  ------------------
  |  Branch (7600:13): [True: 0, False: 1.19k]
  ------------------
 7601|      0|          return 0;
 7602|  1.19k|      }
 7603|    523|      if (! poolAppendChar(&dtd->pool, XML_T('\0')))
  ------------------
  |  |  220|    523|#  define XML_T(x) x
  ------------------
  |  Branch (7603:11): [True: 0, False: 523]
  ------------------
 7604|      0|        return 0;
 7605|    523|      prefix = (PREFIX *)lookup(parser, &dtd->prefixes, poolStart(&dtd->pool),
  ------------------
  |  |  671|    523|#define poolStart(pool) ((pool)->start)
  ------------------
 7606|    523|                                sizeof(PREFIX));
 7607|    523|      if (! prefix)
  ------------------
  |  Branch (7607:11): [True: 0, False: 523]
  ------------------
 7608|      0|        return 0;
 7609|    523|      if (prefix->name == poolStart(&dtd->pool))
  ------------------
  |  |  671|    523|#define poolStart(pool) ((pool)->start)
  ------------------
  |  Branch (7609:11): [True: 245, False: 278]
  ------------------
 7610|    245|        poolFinish(&dtd->pool);
  ------------------
  |  |  676|    245|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 7611|    278|      else
 7612|    278|        poolDiscard(&dtd->pool);
  ------------------
  |  |  675|    278|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 7613|    523|      elementType->prefix = prefix;
 7614|    523|      break;
 7615|    523|    }
 7616|  16.5k|  }
 7617|  7.02k|  return 1;
 7618|  7.02k|}
xmlparse.c:addBinding:
 4669|  18.4k|           const XML_Char *uri, BINDING **bindingsPtr) {
 4670|       |  // "http://www.w3.org/XML/1998/namespace"
 4671|  18.4k|  static const XML_Char xmlNamespace[]
 4672|  18.4k|      = {ASCII_h,      ASCII_t,     ASCII_t,     ASCII_p,      ASCII_COLON,
  ------------------
  |  |   72|  18.4k|#define ASCII_h 0x68
  ------------------
                    = {ASCII_h,      ASCII_t,     ASCII_t,     ASCII_p,      ASCII_COLON,
  ------------------
  |  |   84|  18.4k|#define ASCII_t 0x74
  ------------------
                    = {ASCII_h,      ASCII_t,     ASCII_t,     ASCII_p,      ASCII_COLON,
  ------------------
  |  |   84|  18.4k|#define ASCII_t 0x74
  ------------------
                    = {ASCII_h,      ASCII_t,     ASCII_t,     ASCII_p,      ASCII_COLON,
  ------------------
  |  |   80|  18.4k|#define ASCII_p 0x70
  ------------------
                    = {ASCII_h,      ASCII_t,     ASCII_t,     ASCII_p,      ASCII_COLON,
  ------------------
  |  |  111|  18.4k|#define ASCII_COLON 0x3A
  ------------------
 4673|  18.4k|         ASCII_SLASH,  ASCII_SLASH, ASCII_w,     ASCII_w,      ASCII_w,
  ------------------
  |  |  122|  18.4k|#define ASCII_SLASH 0x2F
  ------------------
                       ASCII_SLASH,  ASCII_SLASH, ASCII_w,     ASCII_w,      ASCII_w,
  ------------------
  |  |  122|  18.4k|#define ASCII_SLASH 0x2F
  ------------------
                       ASCII_SLASH,  ASCII_SLASH, ASCII_w,     ASCII_w,      ASCII_w,
  ------------------
  |  |   87|  18.4k|#define ASCII_w 0x77
  ------------------
                       ASCII_SLASH,  ASCII_SLASH, ASCII_w,     ASCII_w,      ASCII_w,
  ------------------
  |  |   87|  18.4k|#define ASCII_w 0x77
  ------------------
                       ASCII_SLASH,  ASCII_SLASH, ASCII_w,     ASCII_w,      ASCII_w,
  ------------------
  |  |   87|  18.4k|#define ASCII_w 0x77
  ------------------
 4674|  18.4k|         ASCII_PERIOD, ASCII_w,     ASCII_3,     ASCII_PERIOD, ASCII_o,
  ------------------
  |  |  110|  18.4k|#define ASCII_PERIOD 0x2E
  ------------------
                       ASCII_PERIOD, ASCII_w,     ASCII_3,     ASCII_PERIOD, ASCII_o,
  ------------------
  |  |   87|  18.4k|#define ASCII_w 0x77
  ------------------
                       ASCII_PERIOD, ASCII_w,     ASCII_3,     ASCII_PERIOD, ASCII_o,
  ------------------
  |  |   95|  18.4k|#define ASCII_3 0x33
  ------------------
                       ASCII_PERIOD, ASCII_w,     ASCII_3,     ASCII_PERIOD, ASCII_o,
  ------------------
  |  |  110|  18.4k|#define ASCII_PERIOD 0x2E
  ------------------
                       ASCII_PERIOD, ASCII_w,     ASCII_3,     ASCII_PERIOD, ASCII_o,
  ------------------
  |  |   79|  18.4k|#define ASCII_o 0x6F
  ------------------
 4675|  18.4k|         ASCII_r,      ASCII_g,     ASCII_SLASH, ASCII_X,      ASCII_M,
  ------------------
  |  |   82|  18.4k|#define ASCII_r 0x72
  ------------------
                       ASCII_r,      ASCII_g,     ASCII_SLASH, ASCII_X,      ASCII_M,
  ------------------
  |  |   71|  18.4k|#define ASCII_g 0x67
  ------------------
                       ASCII_r,      ASCII_g,     ASCII_SLASH, ASCII_X,      ASCII_M,
  ------------------
  |  |  122|  18.4k|#define ASCII_SLASH 0x2F
  ------------------
                       ASCII_r,      ASCII_g,     ASCII_SLASH, ASCII_X,      ASCII_M,
  ------------------
  |  |   61|  18.4k|#define ASCII_X 0x58
  ------------------
                       ASCII_r,      ASCII_g,     ASCII_SLASH, ASCII_X,      ASCII_M,
  ------------------
  |  |   50|  18.4k|#define ASCII_M 0x4D
  ------------------
 4676|  18.4k|         ASCII_L,      ASCII_SLASH, ASCII_1,     ASCII_9,      ASCII_9,
  ------------------
  |  |   49|  18.4k|#define ASCII_L 0x4C
  ------------------
                       ASCII_L,      ASCII_SLASH, ASCII_1,     ASCII_9,      ASCII_9,
  ------------------
  |  |  122|  18.4k|#define ASCII_SLASH 0x2F
  ------------------
                       ASCII_L,      ASCII_SLASH, ASCII_1,     ASCII_9,      ASCII_9,
  ------------------
  |  |   93|  18.4k|#define ASCII_1 0x31
  ------------------
                       ASCII_L,      ASCII_SLASH, ASCII_1,     ASCII_9,      ASCII_9,
  ------------------
  |  |  101|  18.4k|#define ASCII_9 0x39
  ------------------
                       ASCII_L,      ASCII_SLASH, ASCII_1,     ASCII_9,      ASCII_9,
  ------------------
  |  |  101|  18.4k|#define ASCII_9 0x39
  ------------------
 4677|  18.4k|         ASCII_8,      ASCII_SLASH, ASCII_n,     ASCII_a,      ASCII_m,
  ------------------
  |  |  100|  18.4k|#define ASCII_8 0x38
  ------------------
                       ASCII_8,      ASCII_SLASH, ASCII_n,     ASCII_a,      ASCII_m,
  ------------------
  |  |  122|  18.4k|#define ASCII_SLASH 0x2F
  ------------------
                       ASCII_8,      ASCII_SLASH, ASCII_n,     ASCII_a,      ASCII_m,
  ------------------
  |  |   78|  18.4k|#define ASCII_n 0x6E
  ------------------
                       ASCII_8,      ASCII_SLASH, ASCII_n,     ASCII_a,      ASCII_m,
  ------------------
  |  |   65|  18.4k|#define ASCII_a 0x61
  ------------------
                       ASCII_8,      ASCII_SLASH, ASCII_n,     ASCII_a,      ASCII_m,
  ------------------
  |  |   77|  18.4k|#define ASCII_m 0x6D
  ------------------
 4678|  18.4k|         ASCII_e,      ASCII_s,     ASCII_p,     ASCII_a,      ASCII_c,
  ------------------
  |  |   69|  18.4k|#define ASCII_e 0x65
  ------------------
                       ASCII_e,      ASCII_s,     ASCII_p,     ASCII_a,      ASCII_c,
  ------------------
  |  |   83|  18.4k|#define ASCII_s 0x73
  ------------------
                       ASCII_e,      ASCII_s,     ASCII_p,     ASCII_a,      ASCII_c,
  ------------------
  |  |   80|  18.4k|#define ASCII_p 0x70
  ------------------
                       ASCII_e,      ASCII_s,     ASCII_p,     ASCII_a,      ASCII_c,
  ------------------
  |  |   65|  18.4k|#define ASCII_a 0x61
  ------------------
                       ASCII_e,      ASCII_s,     ASCII_p,     ASCII_a,      ASCII_c,
  ------------------
  |  |   67|  18.4k|#define ASCII_c 0x63
  ------------------
 4679|  18.4k|         ASCII_e,      '\0'};
  ------------------
  |  |   69|  18.4k|#define ASCII_e 0x65
  ------------------
 4680|  18.4k|  static const size_t xmlLen = sizeof(xmlNamespace) / sizeof(XML_Char) - 1;
 4681|       |  // "http://www.w3.org/2000/xmlns/"
 4682|  18.4k|  static const XML_Char xmlnsNamespace[]
 4683|  18.4k|      = {ASCII_h,     ASCII_t,      ASCII_t, ASCII_p, ASCII_COLON,  ASCII_SLASH,
  ------------------
  |  |   72|  18.4k|#define ASCII_h 0x68
  ------------------
                    = {ASCII_h,     ASCII_t,      ASCII_t, ASCII_p, ASCII_COLON,  ASCII_SLASH,
  ------------------
  |  |   84|  18.4k|#define ASCII_t 0x74
  ------------------
                    = {ASCII_h,     ASCII_t,      ASCII_t, ASCII_p, ASCII_COLON,  ASCII_SLASH,
  ------------------
  |  |   84|  18.4k|#define ASCII_t 0x74
  ------------------
                    = {ASCII_h,     ASCII_t,      ASCII_t, ASCII_p, ASCII_COLON,  ASCII_SLASH,
  ------------------
  |  |   80|  18.4k|#define ASCII_p 0x70
  ------------------
                    = {ASCII_h,     ASCII_t,      ASCII_t, ASCII_p, ASCII_COLON,  ASCII_SLASH,
  ------------------
  |  |  111|  18.4k|#define ASCII_COLON 0x3A
  ------------------
                    = {ASCII_h,     ASCII_t,      ASCII_t, ASCII_p, ASCII_COLON,  ASCII_SLASH,
  ------------------
  |  |  122|  18.4k|#define ASCII_SLASH 0x2F
  ------------------
 4684|  18.4k|         ASCII_SLASH, ASCII_w,      ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w,
  ------------------
  |  |  122|  18.4k|#define ASCII_SLASH 0x2F
  ------------------
                       ASCII_SLASH, ASCII_w,      ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w,
  ------------------
  |  |   87|  18.4k|#define ASCII_w 0x77
  ------------------
                       ASCII_SLASH, ASCII_w,      ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w,
  ------------------
  |  |   87|  18.4k|#define ASCII_w 0x77
  ------------------
                       ASCII_SLASH, ASCII_w,      ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w,
  ------------------
  |  |   87|  18.4k|#define ASCII_w 0x77
  ------------------
                       ASCII_SLASH, ASCII_w,      ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w,
  ------------------
  |  |  110|  18.4k|#define ASCII_PERIOD 0x2E
  ------------------
                       ASCII_SLASH, ASCII_w,      ASCII_w, ASCII_w, ASCII_PERIOD, ASCII_w,
  ------------------
  |  |   87|  18.4k|#define ASCII_w 0x77
  ------------------
 4685|  18.4k|         ASCII_3,     ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g,      ASCII_SLASH,
  ------------------
  |  |   95|  18.4k|#define ASCII_3 0x33
  ------------------
                       ASCII_3,     ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g,      ASCII_SLASH,
  ------------------
  |  |  110|  18.4k|#define ASCII_PERIOD 0x2E
  ------------------
                       ASCII_3,     ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g,      ASCII_SLASH,
  ------------------
  |  |   79|  18.4k|#define ASCII_o 0x6F
  ------------------
                       ASCII_3,     ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g,      ASCII_SLASH,
  ------------------
  |  |   82|  18.4k|#define ASCII_r 0x72
  ------------------
                       ASCII_3,     ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g,      ASCII_SLASH,
  ------------------
  |  |   71|  18.4k|#define ASCII_g 0x67
  ------------------
                       ASCII_3,     ASCII_PERIOD, ASCII_o, ASCII_r, ASCII_g,      ASCII_SLASH,
  ------------------
  |  |  122|  18.4k|#define ASCII_SLASH 0x2F
  ------------------
 4686|  18.4k|         ASCII_2,     ASCII_0,      ASCII_0, ASCII_0, ASCII_SLASH,  ASCII_x,
  ------------------
  |  |   94|  18.4k|#define ASCII_2 0x32
  ------------------
                       ASCII_2,     ASCII_0,      ASCII_0, ASCII_0, ASCII_SLASH,  ASCII_x,
  ------------------
  |  |   92|  18.4k|#define ASCII_0 0x30
  ------------------
                       ASCII_2,     ASCII_0,      ASCII_0, ASCII_0, ASCII_SLASH,  ASCII_x,
  ------------------
  |  |   92|  18.4k|#define ASCII_0 0x30
  ------------------
                       ASCII_2,     ASCII_0,      ASCII_0, ASCII_0, ASCII_SLASH,  ASCII_x,
  ------------------
  |  |   92|  18.4k|#define ASCII_0 0x30
  ------------------
                       ASCII_2,     ASCII_0,      ASCII_0, ASCII_0, ASCII_SLASH,  ASCII_x,
  ------------------
  |  |  122|  18.4k|#define ASCII_SLASH 0x2F
  ------------------
                       ASCII_2,     ASCII_0,      ASCII_0, ASCII_0, ASCII_SLASH,  ASCII_x,
  ------------------
  |  |   88|  18.4k|#define ASCII_x 0x78
  ------------------
 4687|  18.4k|         ASCII_m,     ASCII_l,      ASCII_n, ASCII_s, ASCII_SLASH,  '\0'};
  ------------------
  |  |   77|  18.4k|#define ASCII_m 0x6D
  ------------------
                       ASCII_m,     ASCII_l,      ASCII_n, ASCII_s, ASCII_SLASH,  '\0'};
  ------------------
  |  |   76|  18.4k|#define ASCII_l 0x6C
  ------------------
                       ASCII_m,     ASCII_l,      ASCII_n, ASCII_s, ASCII_SLASH,  '\0'};
  ------------------
  |  |   78|  18.4k|#define ASCII_n 0x6E
  ------------------
                       ASCII_m,     ASCII_l,      ASCII_n, ASCII_s, ASCII_SLASH,  '\0'};
  ------------------
  |  |   83|  18.4k|#define ASCII_s 0x73
  ------------------
                       ASCII_m,     ASCII_l,      ASCII_n, ASCII_s, ASCII_SLASH,  '\0'};
  ------------------
  |  |  122|  18.4k|#define ASCII_SLASH 0x2F
  ------------------
 4688|  18.4k|  static const size_t xmlnsLen = sizeof(xmlnsNamespace) / sizeof(XML_Char) - 1;
 4689|       |
 4690|  18.4k|  XML_Bool mustBeXML = XML_FALSE;
  ------------------
  |  |   64|  18.4k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 4691|  18.4k|  XML_Bool isXML = XML_TRUE;
  ------------------
  |  |   63|  18.4k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 4692|  18.4k|  XML_Bool isXMLNS = XML_TRUE;
  ------------------
  |  |   63|  18.4k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 4693|       |
 4694|  18.4k|  BINDING *b;
 4695|  18.4k|  size_t len;
 4696|       |
 4697|       |  /* empty URI is only valid for default namespace per XML NS 1.0 (not 1.1) */
 4698|  18.4k|  if (*uri == XML_T('\0') && prefix->name)
  ------------------
  |  |  220|  36.8k|#  define XML_T(x) x
  ------------------
  |  Branch (4698:7): [True: 2.10k, False: 16.3k]
  |  Branch (4698:30): [True: 4, False: 2.09k]
  ------------------
 4699|      4|    return XML_ERROR_UNDECLARING_PREFIX;
 4700|       |
 4701|  18.4k|  if (prefix->name && prefix->name[0] == XML_T(ASCII_x)
  ------------------
  |  |  220|  32.3k|#  define XML_T(x) x
  ------------------
  |  Branch (4701:7): [True: 13.9k, False: 4.52k]
  |  Branch (4701:23): [True: 6.60k, False: 7.29k]
  ------------------
 4702|  6.60k|      && prefix->name[1] == XML_T(ASCII_m)
  ------------------
  |  |  220|  25.0k|#  define XML_T(x) x
  ------------------
  |  Branch (4702:10): [True: 5.59k, False: 1.01k]
  ------------------
 4703|  5.59k|      && prefix->name[2] == XML_T(ASCII_l)) {
  ------------------
  |  |  220|  5.59k|#  define XML_T(x) x
  ------------------
  |  Branch (4703:10): [True: 5.38k, False: 209]
  ------------------
 4704|       |    /* Not allowed to bind xmlns */
 4705|  5.38k|    if (prefix->name[3] == XML_T(ASCII_n) && prefix->name[4] == XML_T(ASCII_s)
  ------------------
  |  |  220|  10.7k|#  define XML_T(x) x
  ------------------
                  if (prefix->name[3] == XML_T(ASCII_n) && prefix->name[4] == XML_T(ASCII_s)
  ------------------
  |  |  220|  5.79k|#  define XML_T(x) x
  ------------------
  |  Branch (4705:9): [True: 406, False: 4.98k]
  |  Branch (4705:46): [True: 200, False: 206]
  ------------------
 4706|    200|        && prefix->name[5] == XML_T('\0'))
  ------------------
  |  |  220|    200|#  define XML_T(x) x
  ------------------
  |  Branch (4706:12): [True: 2, False: 198]
  ------------------
 4707|      2|      return XML_ERROR_RESERVED_PREFIX_XMLNS;
 4708|       |
 4709|  5.38k|    if (prefix->name[3] == XML_T('\0'))
  ------------------
  |  |  220|  5.38k|#  define XML_T(x) x
  ------------------
  |  Branch (4709:9): [True: 4.77k, False: 609]
  ------------------
 4710|  4.77k|      mustBeXML = XML_TRUE;
  ------------------
  |  |   63|  4.77k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 4711|  5.38k|  }
 4712|       |
 4713|  1.19M|  for (len = 0; uri[len]; len++) {
  ------------------
  |  Branch (4713:17): [True: 1.17M, False: 18.4k]
  ------------------
 4714|       |    /* Detect and prevent integer overflow */
 4715|  1.17M|    if (len == SIZE_MAX) {
  ------------------
  |  Branch (4715:9): [True: 0, False: 1.17M]
  ------------------
 4716|      0|      return XML_ERROR_NO_MEMORY;
 4717|      0|    }
 4718|  1.17M|    if (isXML && (len > xmlLen || uri[len] != xmlNamespace[len]))
  ------------------
  |  Branch (4718:9): [True: 185k, False: 993k]
  |  Branch (4718:19): [True: 0, False: 185k]
  |  Branch (4718:35): [True: 10.5k, False: 174k]
  ------------------
 4719|  10.5k|      isXML = XML_FALSE;
  ------------------
  |  |   64|  10.5k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 4720|       |
 4721|  1.17M|    if (! mustBeXML && isXMLNS
  ------------------
  |  Branch (4721:9): [True: 973k, False: 205k]
  |  Branch (4721:24): [True: 14.1k, False: 959k]
  ------------------
 4722|  14.1k|        && (len > xmlnsLen || uri[len] != xmlnsNamespace[len]))
  ------------------
  |  Branch (4722:13): [True: 0, False: 14.1k]
  |  Branch (4722:31): [True: 10.5k, False: 3.61k]
  ------------------
 4723|  10.5k|      isXMLNS = XML_FALSE;
  ------------------
  |  |   64|  10.5k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 4724|       |
 4725|       |    // NOTE: While Expat does not validate namespace URIs against RFC 3986
 4726|       |    //       today (and is not REQUIRED to do so with regard to the XML 1.0
 4727|       |    //       namespaces specification) we have to at least make sure, that
 4728|       |    //       the application on top of Expat (that is likely splitting expanded
 4729|       |    //       element names ("qualified names") of form
 4730|       |    //       "[uri sep] local [sep prefix] '\0'" back into 1, 2 or 3 pieces
 4731|       |    //       in its element handler code) cannot be confused by an attacker
 4732|       |    //       putting additional namespace separator characters into namespace
 4733|       |    //       declarations.  That would be ambiguous and not to be expected.
 4734|       |    //
 4735|       |    //       While the HTML API docs of function XML_ParserCreateNS have been
 4736|       |    //       advising against use of a namespace separator character that can
 4737|       |    //       appear in a URI for >20 years now, some widespread applications
 4738|       |    //       are using URI characters (':' (colon) in particular) for a
 4739|       |    //       namespace separator, in practice.  To keep these applications
 4740|       |    //       functional, we only reject namespaces URIs containing the
 4741|       |    //       application-chosen namespace separator if the chosen separator
 4742|       |    //       is a non-URI character with regard to RFC 3986.
 4743|  1.17M|    if (parser->m_ns && (uri[len] == parser->m_namespaceSeparator)
  ------------------
  |  Branch (4743:9): [True: 1.17M, False: 0]
  |  Branch (4743:25): [True: 1, False: 1.17M]
  ------------------
 4744|      1|        && ! is_rfc3986_uri_char(uri[len])) {
  ------------------
  |  Branch (4744:12): [True: 1, False: 0]
  ------------------
 4745|      1|      return XML_ERROR_SYNTAX;
 4746|      1|    }
 4747|  1.17M|  }
 4748|  18.4k|  isXML = isXML && len == xmlLen;
  ------------------
  |  Branch (4748:11): [True: 7.83k, False: 10.5k]
  |  Branch (4748:20): [True: 4.76k, False: 3.07k]
  ------------------
 4749|  18.4k|  isXMLNS = isXMLNS && len == xmlnsLen;
  ------------------
  |  Branch (4749:13): [True: 7.85k, False: 10.5k]
  |  Branch (4749:24): [True: 1, False: 7.85k]
  ------------------
 4750|       |
 4751|  18.4k|  if (mustBeXML != isXML)
  ------------------
  |  Branch (4751:7): [True: 17, False: 18.4k]
  ------------------
 4752|     17|    return mustBeXML ? XML_ERROR_RESERVED_PREFIX_XML
  ------------------
  |  Branch (4752:12): [True: 17, False: 0]
  ------------------
 4753|     17|                     : XML_ERROR_RESERVED_NAMESPACE_URI;
 4754|       |
 4755|  18.4k|  if (isXMLNS)
  ------------------
  |  Branch (4755:7): [True: 1, False: 18.4k]
  ------------------
 4756|      1|    return XML_ERROR_RESERVED_NAMESPACE_URI;
 4757|       |
 4758|  18.4k|  if (parser->m_namespaceSeparator) {
  ------------------
  |  Branch (4758:7): [True: 18.4k, False: 0]
  ------------------
 4759|       |    /* Detect and prevent integer overflow */
 4760|  18.4k|    if (len == SIZE_MAX) {
  ------------------
  |  Branch (4760:9): [True: 0, False: 18.4k]
  ------------------
 4761|      0|      return XML_ERROR_NO_MEMORY;
 4762|      0|    }
 4763|  18.4k|    len++;
 4764|  18.4k|  }
 4765|  18.4k|  if (parser->m_freeBindingList) {
  ------------------
  |  Branch (4765:7): [True: 1.87k, False: 16.5k]
  ------------------
 4766|  1.87k|    b = parser->m_freeBindingList;
 4767|  1.87k|    if (len > b->uriAlloc) {
  ------------------
  |  Branch (4767:9): [True: 95, False: 1.78k]
  ------------------
 4768|       |      /* Detect and prevent integer overflow */
 4769|     95|      if (len > SIZE_MAX - EXPAND_SPARE
  ------------------
  |  |  260|    190|#define EXPAND_SPARE 24
  ------------------
  |  Branch (4769:11): [True: 0, False: 95]
  ------------------
 4770|     95|          || len + EXPAND_SPARE > SIZE_MAX / sizeof(XML_Char)) {
  ------------------
  |  |  260|     95|#define EXPAND_SPARE 24
  ------------------
  |  Branch (4770:14): [True: 0, False: 95]
  ------------------
 4771|      0|        return XML_ERROR_NO_MEMORY;
 4772|      0|      }
 4773|       |
 4774|     95|      XML_Char *temp
 4775|     95|          = REALLOC(parser, b->uri, sizeof(XML_Char) * (len + EXPAND_SPARE));
  ------------------
  |  |  836|     95|#  define REALLOC(parser, p, s) (expat_realloc((parser), (p), (s), __LINE__))
  ------------------
 4776|     95|      if (temp == NULL)
  ------------------
  |  Branch (4776:11): [True: 0, False: 95]
  ------------------
 4777|      0|        return XML_ERROR_NO_MEMORY;
 4778|     95|      b->uri = temp;
 4779|     95|      b->uriAlloc = len + EXPAND_SPARE;
  ------------------
  |  |  260|     95|#define EXPAND_SPARE 24
  ------------------
 4780|     95|    }
 4781|  1.87k|    parser->m_freeBindingList = b->nextTagBinding;
 4782|  16.5k|  } else {
 4783|  16.5k|    b = MALLOC(parser, sizeof(BINDING));
  ------------------
  |  |  835|  16.5k|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 4784|  16.5k|    if (! b)
  ------------------
  |  Branch (4784:9): [True: 0, False: 16.5k]
  ------------------
 4785|      0|      return XML_ERROR_NO_MEMORY;
 4786|       |
 4787|       |    /* Detect and prevent integer overflow */
 4788|  16.5k|    if (len > SIZE_MAX - EXPAND_SPARE
  ------------------
  |  |  260|  33.0k|#define EXPAND_SPARE 24
  ------------------
  |  Branch (4788:9): [True: 0, False: 16.5k]
  ------------------
 4789|  16.5k|        || len + EXPAND_SPARE > SIZE_MAX / sizeof(XML_Char)) {
  ------------------
  |  |  260|  16.5k|#define EXPAND_SPARE 24
  ------------------
  |  Branch (4789:12): [True: 0, False: 16.5k]
  ------------------
 4790|      0|      FREE(parser, b);
  ------------------
  |  |  837|      0|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 4791|      0|      return XML_ERROR_NO_MEMORY;
 4792|      0|    }
 4793|       |
 4794|  16.5k|    b->uri = MALLOC(parser, sizeof(XML_Char) * (len + EXPAND_SPARE));
  ------------------
  |  |  835|  16.5k|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 4795|  16.5k|    if (! b->uri) {
  ------------------
  |  Branch (4795:9): [True: 0, False: 16.5k]
  ------------------
 4796|      0|      FREE(parser, b);
  ------------------
  |  |  837|      0|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 4797|      0|      return XML_ERROR_NO_MEMORY;
 4798|      0|    }
 4799|  16.5k|    b->uriAlloc = len + EXPAND_SPARE;
  ------------------
  |  |  260|  16.5k|#define EXPAND_SPARE 24
  ------------------
 4800|  16.5k|  }
 4801|  18.4k|  b->uriLen = len;
 4802|  18.4k|  memcpy(b->uri, uri, len * sizeof(XML_Char));
 4803|  18.4k|  if (parser->m_namespaceSeparator)
  ------------------
  |  Branch (4803:7): [True: 18.4k, False: 0]
  ------------------
 4804|  18.4k|    b->uri[len - 1] = parser->m_namespaceSeparator;
 4805|  18.4k|  b->prefix = prefix;
 4806|  18.4k|  b->attId = attId;
 4807|  18.4k|  b->prevPrefixBinding = prefix->binding;
 4808|       |  /* NULL binding when default namespace undeclared */
 4809|  18.4k|  if (*uri == XML_T('\0') && prefix == &parser->m_dtd->defaultPrefix)
  ------------------
  |  |  220|  36.8k|#  define XML_T(x) x
  ------------------
  |  Branch (4809:7): [True: 2.09k, False: 16.3k]
  |  Branch (4809:30): [True: 2.09k, False: 0]
  ------------------
 4810|  2.09k|    prefix->binding = NULL;
 4811|  16.3k|  else
 4812|  16.3k|    prefix->binding = b;
 4813|  18.4k|  b->nextTagBinding = *bindingsPtr;
 4814|  18.4k|  *bindingsPtr = b;
 4815|       |  /* if attId == NULL then we are not starting a namespace scope */
 4816|  18.4k|  if (attId && parser->m_startNamespaceDeclHandler) {
  ------------------
  |  Branch (4816:7): [True: 13.6k, False: 4.76k]
  |  Branch (4816:16): [True: 0, False: 13.6k]
  ------------------
 4817|      0|    beforeHandler(parser);
 4818|      0|    parser->m_startNamespaceDeclHandler(parser->m_handlerArg, prefix->name,
 4819|      0|                                        prefix->binding ? uri : 0);
  ------------------
  |  Branch (4819:41): [True: 0, False: 0]
  ------------------
 4820|      0|    afterHandler(parser);
 4821|      0|  }
 4822|  18.4k|  return XML_ERROR_NONE;
 4823|  18.4k|}
xmlparse.c:is_rfc3986_uri_char:
 4554|      1|is_rfc3986_uri_char(XML_Char candidate) {
 4555|       |  // For the RFC 3986 ANBF grammar see
 4556|       |  // https://datatracker.ietf.org/doc/html/rfc3986#appendix-A
 4557|       |
 4558|      1|  switch (candidate) {
 4559|       |  // From rule "ALPHA" (uppercase half)
 4560|      0|  case 'A':
  ------------------
  |  Branch (4560:3): [True: 0, False: 1]
  ------------------
 4561|      0|  case 'B':
  ------------------
  |  Branch (4561:3): [True: 0, False: 1]
  ------------------
 4562|      0|  case 'C':
  ------------------
  |  Branch (4562:3): [True: 0, False: 1]
  ------------------
 4563|      0|  case 'D':
  ------------------
  |  Branch (4563:3): [True: 0, False: 1]
  ------------------
 4564|      0|  case 'E':
  ------------------
  |  Branch (4564:3): [True: 0, False: 1]
  ------------------
 4565|      0|  case 'F':
  ------------------
  |  Branch (4565:3): [True: 0, False: 1]
  ------------------
 4566|      0|  case 'G':
  ------------------
  |  Branch (4566:3): [True: 0, False: 1]
  ------------------
 4567|      0|  case 'H':
  ------------------
  |  Branch (4567:3): [True: 0, False: 1]
  ------------------
 4568|      0|  case 'I':
  ------------------
  |  Branch (4568:3): [True: 0, False: 1]
  ------------------
 4569|      0|  case 'J':
  ------------------
  |  Branch (4569:3): [True: 0, False: 1]
  ------------------
 4570|      0|  case 'K':
  ------------------
  |  Branch (4570:3): [True: 0, False: 1]
  ------------------
 4571|      0|  case 'L':
  ------------------
  |  Branch (4571:3): [True: 0, False: 1]
  ------------------
 4572|      0|  case 'M':
  ------------------
  |  Branch (4572:3): [True: 0, False: 1]
  ------------------
 4573|      0|  case 'N':
  ------------------
  |  Branch (4573:3): [True: 0, False: 1]
  ------------------
 4574|      0|  case 'O':
  ------------------
  |  Branch (4574:3): [True: 0, False: 1]
  ------------------
 4575|      0|  case 'P':
  ------------------
  |  Branch (4575:3): [True: 0, False: 1]
  ------------------
 4576|      0|  case 'Q':
  ------------------
  |  Branch (4576:3): [True: 0, False: 1]
  ------------------
 4577|      0|  case 'R':
  ------------------
  |  Branch (4577:3): [True: 0, False: 1]
  ------------------
 4578|      0|  case 'S':
  ------------------
  |  Branch (4578:3): [True: 0, False: 1]
  ------------------
 4579|      0|  case 'T':
  ------------------
  |  Branch (4579:3): [True: 0, False: 1]
  ------------------
 4580|      0|  case 'U':
  ------------------
  |  Branch (4580:3): [True: 0, False: 1]
  ------------------
 4581|      0|  case 'V':
  ------------------
  |  Branch (4581:3): [True: 0, False: 1]
  ------------------
 4582|      0|  case 'W':
  ------------------
  |  Branch (4582:3): [True: 0, False: 1]
  ------------------
 4583|      0|  case 'X':
  ------------------
  |  Branch (4583:3): [True: 0, False: 1]
  ------------------
 4584|      0|  case 'Y':
  ------------------
  |  Branch (4584:3): [True: 0, False: 1]
  ------------------
 4585|      0|  case 'Z':
  ------------------
  |  Branch (4585:3): [True: 0, False: 1]
  ------------------
 4586|       |
 4587|       |  // From rule "ALPHA" (lowercase half)
 4588|      0|  case 'a':
  ------------------
  |  Branch (4588:3): [True: 0, False: 1]
  ------------------
 4589|      0|  case 'b':
  ------------------
  |  Branch (4589:3): [True: 0, False: 1]
  ------------------
 4590|      0|  case 'c':
  ------------------
  |  Branch (4590:3): [True: 0, False: 1]
  ------------------
 4591|      0|  case 'd':
  ------------------
  |  Branch (4591:3): [True: 0, False: 1]
  ------------------
 4592|      0|  case 'e':
  ------------------
  |  Branch (4592:3): [True: 0, False: 1]
  ------------------
 4593|      0|  case 'f':
  ------------------
  |  Branch (4593:3): [True: 0, False: 1]
  ------------------
 4594|      0|  case 'g':
  ------------------
  |  Branch (4594:3): [True: 0, False: 1]
  ------------------
 4595|      0|  case 'h':
  ------------------
  |  Branch (4595:3): [True: 0, False: 1]
  ------------------
 4596|      0|  case 'i':
  ------------------
  |  Branch (4596:3): [True: 0, False: 1]
  ------------------
 4597|      0|  case 'j':
  ------------------
  |  Branch (4597:3): [True: 0, False: 1]
  ------------------
 4598|      0|  case 'k':
  ------------------
  |  Branch (4598:3): [True: 0, False: 1]
  ------------------
 4599|      0|  case 'l':
  ------------------
  |  Branch (4599:3): [True: 0, False: 1]
  ------------------
 4600|      0|  case 'm':
  ------------------
  |  Branch (4600:3): [True: 0, False: 1]
  ------------------
 4601|      0|  case 'n':
  ------------------
  |  Branch (4601:3): [True: 0, False: 1]
  ------------------
 4602|      0|  case 'o':
  ------------------
  |  Branch (4602:3): [True: 0, False: 1]
  ------------------
 4603|      0|  case 'p':
  ------------------
  |  Branch (4603:3): [True: 0, False: 1]
  ------------------
 4604|      0|  case 'q':
  ------------------
  |  Branch (4604:3): [True: 0, False: 1]
  ------------------
 4605|      0|  case 'r':
  ------------------
  |  Branch (4605:3): [True: 0, False: 1]
  ------------------
 4606|      0|  case 's':
  ------------------
  |  Branch (4606:3): [True: 0, False: 1]
  ------------------
 4607|      0|  case 't':
  ------------------
  |  Branch (4607:3): [True: 0, False: 1]
  ------------------
 4608|      0|  case 'u':
  ------------------
  |  Branch (4608:3): [True: 0, False: 1]
  ------------------
 4609|      0|  case 'v':
  ------------------
  |  Branch (4609:3): [True: 0, False: 1]
  ------------------
 4610|      0|  case 'w':
  ------------------
  |  Branch (4610:3): [True: 0, False: 1]
  ------------------
 4611|      0|  case 'x':
  ------------------
  |  Branch (4611:3): [True: 0, False: 1]
  ------------------
 4612|      0|  case 'y':
  ------------------
  |  Branch (4612:3): [True: 0, False: 1]
  ------------------
 4613|      0|  case 'z':
  ------------------
  |  Branch (4613:3): [True: 0, False: 1]
  ------------------
 4614|       |
 4615|       |  // From rule "DIGIT"
 4616|      0|  case '0':
  ------------------
  |  Branch (4616:3): [True: 0, False: 1]
  ------------------
 4617|      0|  case '1':
  ------------------
  |  Branch (4617:3): [True: 0, False: 1]
  ------------------
 4618|      0|  case '2':
  ------------------
  |  Branch (4618:3): [True: 0, False: 1]
  ------------------
 4619|      0|  case '3':
  ------------------
  |  Branch (4619:3): [True: 0, False: 1]
  ------------------
 4620|      0|  case '4':
  ------------------
  |  Branch (4620:3): [True: 0, False: 1]
  ------------------
 4621|      0|  case '5':
  ------------------
  |  Branch (4621:3): [True: 0, False: 1]
  ------------------
 4622|      0|  case '6':
  ------------------
  |  Branch (4622:3): [True: 0, False: 1]
  ------------------
 4623|      0|  case '7':
  ------------------
  |  Branch (4623:3): [True: 0, False: 1]
  ------------------
 4624|      0|  case '8':
  ------------------
  |  Branch (4624:3): [True: 0, False: 1]
  ------------------
 4625|      0|  case '9':
  ------------------
  |  Branch (4625:3): [True: 0, False: 1]
  ------------------
 4626|       |
 4627|       |  // From rule "pct-encoded"
 4628|      0|  case '%':
  ------------------
  |  Branch (4628:3): [True: 0, False: 1]
  ------------------
 4629|       |
 4630|       |  // From rule "unreserved"
 4631|      0|  case '-':
  ------------------
  |  Branch (4631:3): [True: 0, False: 1]
  ------------------
 4632|      0|  case '.':
  ------------------
  |  Branch (4632:3): [True: 0, False: 1]
  ------------------
 4633|      0|  case '_':
  ------------------
  |  Branch (4633:3): [True: 0, False: 1]
  ------------------
 4634|      0|  case '~':
  ------------------
  |  Branch (4634:3): [True: 0, False: 1]
  ------------------
 4635|       |
 4636|       |  // From rule "gen-delims"
 4637|      0|  case ':':
  ------------------
  |  Branch (4637:3): [True: 0, False: 1]
  ------------------
 4638|      0|  case '/':
  ------------------
  |  Branch (4638:3): [True: 0, False: 1]
  ------------------
 4639|      0|  case '?':
  ------------------
  |  Branch (4639:3): [True: 0, False: 1]
  ------------------
 4640|      0|  case '#':
  ------------------
  |  Branch (4640:3): [True: 0, False: 1]
  ------------------
 4641|      0|  case '[':
  ------------------
  |  Branch (4641:3): [True: 0, False: 1]
  ------------------
 4642|      0|  case ']':
  ------------------
  |  Branch (4642:3): [True: 0, False: 1]
  ------------------
 4643|      0|  case '@':
  ------------------
  |  Branch (4643:3): [True: 0, False: 1]
  ------------------
 4644|       |
 4645|       |  // From rule "sub-delims"
 4646|      0|  case '!':
  ------------------
  |  Branch (4646:3): [True: 0, False: 1]
  ------------------
 4647|      0|  case '$':
  ------------------
  |  Branch (4647:3): [True: 0, False: 1]
  ------------------
 4648|      0|  case '&':
  ------------------
  |  Branch (4648:3): [True: 0, False: 1]
  ------------------
 4649|      0|  case '\'':
  ------------------
  |  Branch (4649:3): [True: 0, False: 1]
  ------------------
 4650|      0|  case '(':
  ------------------
  |  Branch (4650:3): [True: 0, False: 1]
  ------------------
 4651|      0|  case ')':
  ------------------
  |  Branch (4651:3): [True: 0, False: 1]
  ------------------
 4652|      0|  case '*':
  ------------------
  |  Branch (4652:3): [True: 0, False: 1]
  ------------------
 4653|      0|  case '+':
  ------------------
  |  Branch (4653:3): [True: 0, False: 1]
  ------------------
 4654|      0|  case ',':
  ------------------
  |  Branch (4654:3): [True: 0, False: 1]
  ------------------
 4655|      0|  case ';':
  ------------------
  |  Branch (4655:3): [True: 0, False: 1]
  ------------------
 4656|      0|  case '=':
  ------------------
  |  Branch (4656:3): [True: 0, False: 1]
  ------------------
 4657|      0|    return XML_TRUE;
  ------------------
  |  |   63|      0|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 4658|       |
 4659|      1|  default:
  ------------------
  |  Branch (4659:3): [True: 1, False: 0]
  ------------------
 4660|      1|    return XML_FALSE;
  ------------------
  |  |   64|      1|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 4661|      1|  }
 4662|      1|}
xmlparse.c:freeBindings:
 4103|  26.6k|freeBindings(XML_Parser parser, BINDING *bindings) {
 4104|  28.1k|  while (bindings) {
  ------------------
  |  Branch (4104:10): [True: 1.48k, False: 26.6k]
  ------------------
 4105|  1.48k|    BINDING *b = bindings;
 4106|       |
 4107|       |    /* m_startNamespaceDeclHandler will have been called for this
 4108|       |     * binding in addBindings(), so call the end handler now.
 4109|       |     */
 4110|  1.48k|    if (parser->m_endNamespaceDeclHandler) {
  ------------------
  |  Branch (4110:9): [True: 0, False: 1.48k]
  ------------------
 4111|      0|      beforeHandler(parser);
 4112|      0|      parser->m_endNamespaceDeclHandler(parser->m_handlerArg, b->prefix->name);
 4113|      0|      afterHandler(parser);
 4114|      0|    }
 4115|       |
 4116|  1.48k|    bindings = bindings->nextTagBinding;
 4117|  1.48k|    b->nextTagBinding = parser->m_freeBindingList;
 4118|  1.48k|    parser->m_freeBindingList = b;
 4119|  1.48k|    b->prefix->binding = b->prevPrefixBinding;
 4120|  1.48k|  }
 4121|  26.6k|}
xmlparse.c:epilogProcessor:
 6613|    821|                const char **nextPtr) {
 6614|    821|  parser->m_processor = epilogProcessor;
 6615|    821|  parser->m_eventPtr = s;
 6616|  1.88k|  for (;;) {
 6617|  1.88k|    const char *next = NULL;
 6618|  1.88k|    int tok = XmlPrologTok(parser->m_encoding, s, end, &next);
  ------------------
  |  |  226|  1.88k|    XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |  223|  1.88k|    (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
  |  |  ------------------
  ------------------
 6619|  1.88k|#if XML_GE == 1
 6620|  1.88k|    if (! accountingDiffTolerated(parser, tok, s, next, __LINE__,
  ------------------
  |  Branch (6620:9): [True: 0, False: 1.88k]
  ------------------
 6621|  1.88k|                                  XML_ACCOUNT_DIRECT)) {
 6622|      0|      accountingOnAbort(parser);
 6623|      0|      return XML_ERROR_AMPLIFICATION_LIMIT_BREACH;
 6624|      0|    }
 6625|  1.88k|#endif
 6626|  1.88k|    parser->m_eventEndPtr = next;
 6627|  1.88k|    switch (tok) {
 6628|       |    /* report partial linebreak - it might be the last token */
 6629|      1|    case -XML_TOK_PROLOG_S:
  ------------------
  |  |   82|      1|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (6629:5): [True: 1, False: 1.88k]
  ------------------
 6630|      1|      if (parser->m_defaultHandler) {
  ------------------
  |  Branch (6630:11): [True: 0, False: 1]
  ------------------
 6631|      0|        reportDefault(parser, parser->m_encoding, s, next);
 6632|      0|        if (parser->m_parsingStatus.parsing == XML_FINISHED)
  ------------------
  |  Branch (6632:13): [True: 0, False: 0]
  ------------------
 6633|      0|          return XML_ERROR_ABORTED;
 6634|      0|      }
 6635|      1|      *nextPtr = next;
 6636|      1|      return XML_ERROR_NONE;
 6637|    250|    case XML_TOK_NONE:
  ------------------
  |  |   51|    250|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
  |  Branch (6637:5): [True: 250, False: 1.63k]
  ------------------
 6638|    250|      *nextPtr = s;
 6639|    250|      return XML_ERROR_NONE;
 6640|    336|    case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    336|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (6640:5): [True: 336, False: 1.54k]
  ------------------
 6641|    336|      if (parser->m_defaultHandler)
  ------------------
  |  Branch (6641:11): [True: 0, False: 336]
  ------------------
 6642|      0|        reportDefault(parser, parser->m_encoding, s, next);
 6643|    336|      break;
 6644|    531|    case XML_TOK_PI:
  ------------------
  |  |   76|    531|#  define XML_TOK_PI 11       /* processing instruction */
  ------------------
  |  Branch (6644:5): [True: 531, False: 1.35k]
  ------------------
 6645|    531|      if (! reportProcessingInstruction(parser, parser->m_encoding, s, next))
  ------------------
  |  Branch (6645:11): [True: 0, False: 531]
  ------------------
 6646|      0|        return XML_ERROR_NO_MEMORY;
 6647|    531|      break;
 6648|    531|    case XML_TOK_COMMENT:
  ------------------
  |  |   78|    195|#  define XML_TOK_COMMENT 13
  ------------------
  |  Branch (6648:5): [True: 195, False: 1.68k]
  ------------------
 6649|    195|      if (! reportComment(parser, parser->m_encoding, s, next))
  ------------------
  |  Branch (6649:11): [True: 0, False: 195]
  ------------------
 6650|      0|        return XML_ERROR_NO_MEMORY;
 6651|    195|      break;
 6652|    404|    case XML_TOK_INVALID:
  ------------------
  |  |   57|    404|#  define XML_TOK_INVALID 0
  ------------------
  |  Branch (6652:5): [True: 404, False: 1.47k]
  ------------------
 6653|    404|      parser->m_eventPtr = next;
 6654|    404|      return XML_ERROR_INVALID_TOKEN;
 6655|     47|    case XML_TOK_PARTIAL:
  ------------------
  |  |   56|     47|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  |  Branch (6655:5): [True: 47, False: 1.83k]
  ------------------
 6656|     47|      if (! parser->m_parsingStatus.finalBuffer) {
  ------------------
  |  Branch (6656:11): [True: 0, False: 47]
  ------------------
 6657|      0|        *nextPtr = s;
 6658|      0|        return XML_ERROR_NONE;
 6659|      0|      }
 6660|     47|      return XML_ERROR_UNCLOSED_TOKEN;
 6661|      5|    case XML_TOK_PARTIAL_CHAR:
  ------------------
  |  |   55|      5|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  ------------------
  |  Branch (6661:5): [True: 5, False: 1.87k]
  ------------------
 6662|      5|      if (! parser->m_parsingStatus.finalBuffer) {
  ------------------
  |  Branch (6662:11): [True: 0, False: 5]
  ------------------
 6663|      0|        *nextPtr = s;
 6664|      0|        return XML_ERROR_NONE;
 6665|      0|      }
 6666|      5|      return XML_ERROR_PARTIAL_CHAR;
 6667|    114|    default:
  ------------------
  |  Branch (6667:5): [True: 114, False: 1.76k]
  ------------------
 6668|    114|      return XML_ERROR_JUNK_AFTER_DOC_ELEMENT;
 6669|  1.88k|    }
 6670|  1.06k|    switch (parser->m_parsingStatus.parsing) {
 6671|      0|    case XML_SUSPENDED:
  ------------------
  |  Branch (6671:5): [True: 0, False: 1.06k]
  ------------------
 6672|      0|      parser->m_eventPtr = next;
 6673|      0|      *nextPtr = next;
 6674|      0|      return XML_ERROR_NONE;
 6675|      0|    case XML_FINISHED:
  ------------------
  |  Branch (6675:5): [True: 0, False: 1.06k]
  ------------------
 6676|      0|      parser->m_eventPtr = next;
 6677|      0|      return XML_ERROR_ABORTED;
 6678|  1.06k|    case XML_PARSING:
  ------------------
  |  Branch (6678:5): [True: 1.06k, False: 0]
  ------------------
 6679|  1.06k|      if (parser->m_reenter) {
  ------------------
  |  Branch (6679:11): [True: 0, False: 1.06k]
  ------------------
 6680|      0|        return XML_ERROR_UNEXPECTED_STATE; // LCOV_EXCL_LINE
 6681|      0|      }
 6682|  1.06k|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|  1.06k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 6683|  1.06k|    default:;
  ------------------
  |  Branch (6683:5): [True: 0, False: 1.06k]
  ------------------
 6684|  1.06k|      parser->m_eventPtr = s = next;
 6685|  1.06k|    }
 6686|  1.06k|  }
 6687|    821|}
xmlparse.c:doCdataSection:
 4854|  1.38k|               enum XML_Account account) {
 4855|  1.38k|  const char *s = *startPtr;
 4856|  1.38k|  const char **eventPP;
 4857|  1.38k|  const char **eventEndPP;
 4858|  1.38k|  if (enc == parser->m_encoding) {
  ------------------
  |  Branch (4858:7): [True: 557, False: 832]
  ------------------
 4859|    557|    eventPP = &parser->m_eventPtr;
 4860|    557|    *eventPP = s;
 4861|    557|    eventEndPP = &parser->m_eventEndPtr;
 4862|    832|  } else {
 4863|    832|    eventPP = &(parser->m_openInternalEntities->internalEventPtr);
 4864|    832|    eventEndPP = &(parser->m_openInternalEntities->internalEventEndPtr);
 4865|    832|  }
 4866|  1.38k|  *eventPP = s;
 4867|  1.38k|  *startPtr = NULL;
 4868|       |
 4869|  9.43k|  for (;;) {
 4870|  9.43k|    const char *next = s; /* in case of XML_TOK_NONE or XML_TOK_PARTIAL */
 4871|  9.43k|    int tok = XmlCdataSectionTok(enc, s, end, &next);
  ------------------
  |  |  232|  9.43k|    XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |  223|  9.43k|    (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
  |  |  ------------------
  ------------------
 4872|  9.43k|#if XML_GE == 1
 4873|  9.43k|    if (! accountingDiffTolerated(parser, tok, s, next, __LINE__, account)) {
  ------------------
  |  Branch (4873:9): [True: 0, False: 9.43k]
  ------------------
 4874|      0|      accountingOnAbort(parser);
 4875|      0|      return XML_ERROR_AMPLIFICATION_LIMIT_BREACH;
 4876|      0|    }
 4877|       |#else
 4878|       |    UNUSED_P(account);
 4879|       |#endif
 4880|  9.43k|    *eventEndPP = next;
 4881|  9.43k|    switch (tok) {
 4882|    991|    case XML_TOK_CDATA_SECT_CLOSE:
  ------------------
  |  |  113|    991|#  define XML_TOK_CDATA_SECT_CLOSE 40
  ------------------
  |  Branch (4882:5): [True: 991, False: 8.43k]
  ------------------
 4883|    991|      if (parser->m_endCdataSectionHandler) {
  ------------------
  |  Branch (4883:11): [True: 0, False: 991]
  ------------------
 4884|      0|        beforeHandler(parser);
 4885|      0|        parser->m_endCdataSectionHandler(parser->m_handlerArg);
 4886|      0|        afterHandler(parser);
 4887|      0|      }
 4888|       |      /* BEGIN disabled code */
 4889|       |      /* see comment under XML_TOK_CDATA_SECT_OPEN */
 4890|    991|      else if ((0) && parser->m_characterDataHandler) {
  ------------------
  |  Branch (4890:16): [Folded, False: 991]
  |  Branch (4890:23): [True: 0, False: 0]
  ------------------
 4891|      0|        beforeHandler(parser);
 4892|      0|        parser->m_characterDataHandler(parser->m_handlerArg, parser->m_dataBuf,
 4893|      0|                                       0);
 4894|      0|        afterHandler(parser);
 4895|       |        /* END disabled code */
 4896|    991|      } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (4896:18): [True: 0, False: 991]
  ------------------
 4897|      0|        reportDefault(parser, enc, s, next);
 4898|    991|      *startPtr = next;
 4899|    991|      *nextPtr = next;
 4900|    991|      if (parser->m_parsingStatus.parsing == XML_FINISHED)
  ------------------
  |  Branch (4900:11): [True: 0, False: 991]
  ------------------
 4901|      0|        return XML_ERROR_ABORTED;
 4902|    991|      else
 4903|    991|        return XML_ERROR_NONE;
 4904|  2.83k|    case XML_TOK_DATA_NEWLINE:
  ------------------
  |  |   68|  2.83k|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
  |  Branch (4904:5): [True: 2.83k, False: 6.59k]
  ------------------
 4905|  2.83k|      if (parser->m_characterDataHandler) {
  ------------------
  |  Branch (4905:11): [True: 0, False: 2.83k]
  ------------------
 4906|      0|        XML_Char c = 0xA;
 4907|      0|        beforeHandler(parser);
 4908|      0|        parser->m_characterDataHandler(parser->m_handlerArg, &c, 1);
 4909|      0|        afterHandler(parser);
 4910|  2.83k|      } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (4910:18): [True: 0, False: 2.83k]
  ------------------
 4911|      0|        reportDefault(parser, enc, s, next);
 4912|  2.83k|      break;
 4913|  5.20k|    case XML_TOK_DATA_CHARS: {
  ------------------
  |  |   67|  5.20k|#  define XML_TOK_DATA_CHARS 6
  ------------------
  |  Branch (4913:5): [True: 5.20k, False: 4.22k]
  ------------------
 4914|  5.20k|      XML_CharacterDataHandler charDataHandler = parser->m_characterDataHandler;
 4915|  5.20k|      if (charDataHandler) {
  ------------------
  |  Branch (4915:11): [True: 0, False: 5.20k]
  ------------------
 4916|      0|        if (MUST_CONVERT(enc, s)) {
  ------------------
  |  |  194|      0|#  define MUST_CONVERT(enc, s) (! (enc)->isUtf8)
  |  |  ------------------
  |  |  |  Branch (194:32): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 4917|      0|          for (;;) {
 4918|      0|            ICHAR *dataPtr = (ICHAR *)parser->m_dataBuf;
 4919|      0|            const enum XML_Convert_Result convert_res = XmlConvert(
  ------------------
  |  |  190|      0|#  define XmlConvert XmlUtf8Convert
  |  |  ------------------
  |  |  |  |  275|      0|    (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim))
  |  |  ------------------
  ------------------
 4920|      0|                enc, &s, next, &dataPtr, (ICHAR *)parser->m_dataBufEnd);
 4921|      0|            *eventEndPP = next;
 4922|      0|            beforeHandler(parser);
 4923|      0|            charDataHandler(parser->m_handlerArg, parser->m_dataBuf,
 4924|      0|                            (int)(dataPtr - (ICHAR *)parser->m_dataBuf));
 4925|      0|            afterHandler(parser);
 4926|      0|            if ((convert_res == XML_CONVERT_COMPLETED)
  ------------------
  |  Branch (4926:17): [True: 0, False: 0]
  ------------------
 4927|      0|                || (convert_res == XML_CONVERT_INPUT_INCOMPLETE))
  ------------------
  |  Branch (4927:20): [True: 0, False: 0]
  ------------------
 4928|      0|              break;
 4929|      0|            *eventPP = s;
 4930|      0|          }
 4931|      0|        } else {
 4932|      0|          beforeHandler(parser);
 4933|      0|          charDataHandler(parser->m_handlerArg, (const XML_Char *)s,
 4934|      0|                          (int)((const XML_Char *)next - (const XML_Char *)s));
 4935|      0|          afterHandler(parser);
 4936|      0|        }
 4937|  5.20k|      } else if (parser->m_defaultHandler)
  ------------------
  |  Branch (4937:18): [True: 0, False: 5.20k]
  ------------------
 4938|      0|        reportDefault(parser, enc, s, next);
 4939|  5.20k|    } break;
 4940|     84|    case XML_TOK_INVALID:
  ------------------
  |  |   57|     84|#  define XML_TOK_INVALID 0
  ------------------
  |  Branch (4940:5): [True: 84, False: 9.34k]
  ------------------
 4941|     84|      *eventPP = next;
 4942|     84|      return XML_ERROR_INVALID_TOKEN;
 4943|      5|    case XML_TOK_PARTIAL_CHAR:
  ------------------
  |  |   55|      5|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  ------------------
  |  Branch (4943:5): [True: 5, False: 9.42k]
  ------------------
 4944|      5|      if (haveMore) {
  ------------------
  |  Branch (4944:11): [True: 0, False: 5]
  ------------------
 4945|      0|        *nextPtr = s;
 4946|      0|        return XML_ERROR_NONE;
 4947|      0|      }
 4948|      5|      return XML_ERROR_PARTIAL_CHAR;
 4949|     71|    case XML_TOK_PARTIAL:
  ------------------
  |  |   56|     71|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  |  Branch (4949:5): [True: 71, False: 9.35k]
  ------------------
 4950|    309|    case XML_TOK_NONE:
  ------------------
  |  |   51|    309|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
  |  Branch (4950:5): [True: 238, False: 9.19k]
  ------------------
 4951|    309|      if (haveMore) {
  ------------------
  |  Branch (4951:11): [True: 0, False: 309]
  ------------------
 4952|      0|        *nextPtr = s;
 4953|      0|        return XML_ERROR_NONE;
 4954|      0|      }
 4955|    309|      return XML_ERROR_UNCLOSED_CDATA_SECTION;
 4956|      0|    default:
  ------------------
  |  Branch (4956:5): [True: 0, False: 9.43k]
  ------------------
 4957|       |      /* Every token returned by XmlCdataSectionTok() has its own
 4958|       |       * explicit case, so this default case will never be executed.
 4959|       |       * We retain it as a safety net and exclude it from the coverage
 4960|       |       * statistics.
 4961|       |       *
 4962|       |       * LCOV_EXCL_START
 4963|       |       */
 4964|      0|      *eventPP = next;
 4965|      0|      return XML_ERROR_UNEXPECTED_STATE;
 4966|       |      /* LCOV_EXCL_STOP */
 4967|  9.43k|    }
 4968|       |
 4969|  8.04k|    switch (parser->m_parsingStatus.parsing) {
 4970|      0|    case XML_SUSPENDED:
  ------------------
  |  Branch (4970:5): [True: 0, False: 8.04k]
  ------------------
 4971|      0|      *eventPP = next;
 4972|      0|      *nextPtr = next;
 4973|      0|      return XML_ERROR_NONE;
 4974|      0|    case XML_FINISHED:
  ------------------
  |  Branch (4974:5): [True: 0, False: 8.04k]
  ------------------
 4975|      0|      *eventPP = next;
 4976|      0|      return XML_ERROR_ABORTED;
 4977|  8.04k|    case XML_PARSING:
  ------------------
  |  Branch (4977:5): [True: 8.04k, False: 0]
  ------------------
 4978|  8.04k|      if (parser->m_reenter) {
  ------------------
  |  Branch (4978:11): [True: 0, False: 8.04k]
  ------------------
 4979|      0|        return XML_ERROR_UNEXPECTED_STATE; // LCOV_EXCL_LINE
 4980|      0|      }
 4981|  8.04k|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|  8.04k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 4982|  8.04k|    default:;
  ------------------
  |  Branch (4982:5): [True: 0, False: 8.04k]
  ------------------
 4983|  8.04k|      *eventPP = s = next;
 4984|  8.04k|    }
 4985|  8.04k|  }
 4986|       |  /* not reached */
 4987|  1.38k|}
xmlparse.c:storeRawNames:
 3395|  9.46k|storeRawNames(XML_Parser parser) {
 3396|  9.46k|  TAG *tag = parser->m_tagStack;
 3397|  12.5k|  while (tag) {
  ------------------
  |  Branch (3397:10): [True: 11.6k, False: 891]
  ------------------
 3398|  11.6k|    size_t bufSize;
 3399|  11.6k|    size_t nameLen = sizeof(XML_Char) * (tag->name.strLen + 1);
 3400|  11.6k|    size_t rawNameLen;
 3401|  11.6k|    char *rawNameBuf = tag->buf.raw + nameLen;
 3402|       |    /* Stop if already stored.  Since m_tagStack is a stack, we can stop
 3403|       |       at the first entry that has already been copied; everything
 3404|       |       below it in the stack is already been accounted for in a
 3405|       |       previous call to this function.
 3406|       |    */
 3407|  11.6k|    if (tag->rawName == rawNameBuf)
  ------------------
  |  Branch (3407:9): [True: 8.56k, False: 3.09k]
  ------------------
 3408|  8.56k|      break;
 3409|       |    /* For reuse purposes we need to ensure that the
 3410|       |       size of tag->buf is a multiple of sizeof(XML_Char).
 3411|       |    */
 3412|  3.09k|    rawNameLen = ROUND_UP(tag->rawNameLength, sizeof(XML_Char));
  ------------------
  |  |  226|  3.09k|#define ROUND_UP(n, sz) (((n) + ((sz) - 1)) & ~((sz) - 1))
  ------------------
 3413|       |    /* Detect and prevent integer overflow. */
 3414|  3.09k|    if (rawNameLen > SIZE_MAX - nameLen)
  ------------------
  |  Branch (3414:9): [True: 0, False: 3.09k]
  ------------------
 3415|      0|      return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 3416|  3.09k|    bufSize = nameLen + rawNameLen;
 3417|  3.09k|    if (bufSize > (size_t)(tag->bufEnd - tag->buf.raw)) {
  ------------------
  |  Branch (3417:9): [True: 143, False: 2.95k]
  ------------------
 3418|    143|      char *temp = REALLOC(parser, tag->buf.raw, bufSize);
  ------------------
  |  |  836|    143|#  define REALLOC(parser, p, s) (expat_realloc((parser), (p), (s), __LINE__))
  ------------------
 3419|    143|      if (temp == NULL)
  ------------------
  |  Branch (3419:11): [True: 0, False: 143]
  ------------------
 3420|      0|        return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 3421|       |      /* if tag->name.str points to tag->buf.str (only when namespace
 3422|       |         processing is off) then we have to update it
 3423|       |      */
 3424|    143|      if (tag->name.str == tag->buf.str)
  ------------------
  |  Branch (3424:11): [True: 72, False: 71]
  ------------------
 3425|     72|        tag->name.str = (XML_Char *)temp;
 3426|       |      /* if tag->name.localPart is set (when namespace processing is on)
 3427|       |         then update it as well, since it will always point into tag->buf
 3428|       |      */
 3429|    143|      if (tag->name.localPart)
  ------------------
  |  Branch (3429:11): [True: 71, False: 72]
  ------------------
 3430|     71|        tag->name.localPart
 3431|     71|            = (XML_Char *)temp + (tag->name.localPart - tag->buf.str);
 3432|    143|      tag->buf.raw = temp;
 3433|    143|      tag->bufEnd = temp + bufSize;
 3434|    143|      rawNameBuf = temp + nameLen;
 3435|    143|    }
 3436|  3.09k|    memcpy(rawNameBuf, tag->rawName, tag->rawNameLength);
 3437|  3.09k|    tag->rawName = rawNameBuf;
 3438|  3.09k|    tag = tag->parent;
 3439|  3.09k|  }
 3440|  9.46k|  return XML_TRUE;
  ------------------
  |  |   63|  9.46k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 3441|  9.46k|}
xmlparse.c:getElementType:
 8888|  1.52k|               const char *end) {
 8889|  1.52k|  DTD *const dtd = parser->m_dtd; /* save one level of indirection */
 8890|  1.52k|  const XML_Char *name = poolStoreString(&dtd->pool, enc, ptr, end);
 8891|  1.52k|  ELEMENT_TYPE *ret;
 8892|       |
 8893|  1.52k|  if (! name)
  ------------------
  |  Branch (8893:7): [True: 0, False: 1.52k]
  ------------------
 8894|      0|    return NULL;
 8895|  1.52k|  ret = (ELEMENT_TYPE *)lookup(parser, &dtd->elementTypes, name,
 8896|  1.52k|                               sizeof(ELEMENT_TYPE));
 8897|  1.52k|  if (! ret)
  ------------------
  |  Branch (8897:7): [True: 0, False: 1.52k]
  ------------------
 8898|      0|    return NULL;
 8899|  1.52k|  if (! ret->defaultAttForName.parser)
  ------------------
  |  Branch (8899:7): [True: 1.20k, False: 325]
  ------------------
 8900|  1.20k|    hashTableInit(&(ret->defaultAttForName), getRootParserOf(parser, NULL));
 8901|  1.52k|  if (ret->name != name)
  ------------------
  |  Branch (8901:7): [True: 325, False: 1.20k]
  ------------------
 8902|    325|    poolDiscard(&dtd->pool);
  ------------------
  |  |  675|    325|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 8903|  1.20k|  else {
 8904|  1.20k|    poolFinish(&dtd->pool);
  ------------------
  |  |  676|  1.20k|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 8905|  1.20k|    if (! setElementTypePrefix(parser, ret))
  ------------------
  |  Branch (8905:9): [True: 0, False: 1.20k]
  ------------------
 8906|      0|      return NULL;
 8907|  1.20k|  }
 8908|  1.52k|  return ret;
 8909|  1.52k|}
xmlparse.c:getAttributeId:
 7622|  37.6k|               const char *end) {
 7623|  37.6k|  DTD *const dtd = parser->m_dtd; /* save one level of indirection */
 7624|  37.6k|  ATTRIBUTE_ID *id;
 7625|  37.6k|  const XML_Char *name;
 7626|  37.6k|  if (! poolAppendChar(&dtd->pool, XML_T('\0')))
  ------------------
  |  |  220|  37.6k|#  define XML_T(x) x
  ------------------
  |  Branch (7626:7): [True: 0, False: 37.6k]
  ------------------
 7627|      0|    return NULL;
 7628|  37.6k|  name = poolStoreString(&dtd->pool, enc, start, end);
 7629|  37.6k|  if (! name)
  ------------------
  |  Branch (7629:7): [True: 0, False: 37.6k]
  ------------------
 7630|      0|    return NULL;
 7631|       |  /* skip quotation mark - its storage will be reused (like in name[-1]) */
 7632|  37.6k|  ++name;
 7633|  37.6k|  id = (ATTRIBUTE_ID *)lookup(parser, &dtd->attributeIds, name,
 7634|  37.6k|                              sizeof(ATTRIBUTE_ID));
 7635|  37.6k|  if (! id)
  ------------------
  |  Branch (7635:7): [True: 0, False: 37.6k]
  ------------------
 7636|      0|    return NULL;
 7637|  37.6k|  if (id->name != name)
  ------------------
  |  Branch (7637:7): [True: 29.9k, False: 7.65k]
  ------------------
 7638|  29.9k|    poolDiscard(&dtd->pool);
  ------------------
  |  |  675|  29.9k|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 7639|  7.65k|  else {
 7640|  7.65k|    poolFinish(&dtd->pool);
  ------------------
  |  |  676|  7.65k|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 7641|  7.65k|    if (! parser->m_ns)
  ------------------
  |  Branch (7641:9): [True: 3.83k, False: 3.81k]
  ------------------
 7642|  3.83k|      ;
 7643|  3.81k|    else if (name[0] == XML_T(ASCII_x) && name[1] == XML_T(ASCII_m)
  ------------------
  |  |  220|  7.63k|#  define XML_T(x) x
  ------------------
                  else if (name[0] == XML_T(ASCII_x) && name[1] == XML_T(ASCII_m)
  ------------------
  |  |  220|  6.10k|#  define XML_T(x) x
  ------------------
  |  Branch (7643:14): [True: 2.28k, False: 1.53k]
  |  Branch (7643:43): [True: 1.23k, False: 1.05k]
  ------------------
 7644|  1.23k|             && name[2] == XML_T(ASCII_l) && name[3] == XML_T(ASCII_n)
  ------------------
  |  |  220|  5.04k|#  define XML_T(x) x
  ------------------
                           && name[2] == XML_T(ASCII_l) && name[3] == XML_T(ASCII_n)
  ------------------
  |  |  220|  5.00k|#  define XML_T(x) x
  ------------------
  |  Branch (7644:17): [True: 1.18k, False: 47]
  |  Branch (7644:46): [True: 840, False: 347]
  ------------------
 7645|    840|             && name[4] == XML_T(ASCII_s)
  ------------------
  |  |  220|  4.65k|#  define XML_T(x) x
  ------------------
  |  Branch (7645:17): [True: 815, False: 25]
  ------------------
 7646|    815|             && (name[5] == XML_T('\0') || name[5] == XML_T(ASCII_COLON))) {
  ------------------
  |  |  220|  1.63k|#  define XML_T(x) x
  ------------------
                           && (name[5] == XML_T('\0') || name[5] == XML_T(ASCII_COLON))) {
  ------------------
  |  |  220|    497|#  define XML_T(x) x
  ------------------
  |  Branch (7646:18): [True: 318, False: 497]
  |  Branch (7646:44): [True: 471, False: 26]
  ------------------
 7647|    789|      if (name[5] == XML_T('\0'))
  ------------------
  |  |  220|    789|#  define XML_T(x) x
  ------------------
  |  Branch (7647:11): [True: 318, False: 471]
  ------------------
 7648|    318|        id->prefix = &dtd->defaultPrefix;
 7649|    471|      else
 7650|    471|        id->prefix = (PREFIX *)lookup(parser, &dtd->prefixes, name + 6,
 7651|    471|                                      sizeof(PREFIX));
 7652|    789|      id->xmlns = true;
 7653|  3.02k|    } else {
 7654|  3.02k|      int i;
 7655|  11.0k|      for (i = 0; name[i]; i++) {
  ------------------
  |  Branch (7655:19): [True: 9.19k, False: 1.86k]
  ------------------
 7656|       |        /* Detect and prevent signed integer overflow */
 7657|  9.19k|        if (i == INT_MAX) {
  ------------------
  |  Branch (7657:13): [True: 0, False: 9.19k]
  ------------------
 7658|      0|          return NULL;
 7659|      0|        }
 7660|       |        /* attributes without prefix are *not* in the default namespace */
 7661|  9.19k|        if (name[i] == XML_T(ASCII_COLON)) {
  ------------------
  |  |  220|  9.19k|#  define XML_T(x) x
  ------------------
  |  Branch (7661:13): [True: 1.16k, False: 8.03k]
  ------------------
 7662|  1.16k|          if (! poolAppendChars(&dtd->pool, name, i))
  ------------------
  |  Branch (7662:15): [True: 0, False: 1.16k]
  ------------------
 7663|      0|            return NULL;
 7664|  1.16k|          if (! poolAppendChar(&dtd->pool, XML_T('\0')))
  ------------------
  |  |  220|  1.16k|#  define XML_T(x) x
  ------------------
  |  Branch (7664:15): [True: 0, False: 1.16k]
  ------------------
 7665|      0|            return NULL;
 7666|  1.16k|          id->prefix = (PREFIX *)lookup(parser, &dtd->prefixes,
 7667|  1.16k|                                        poolStart(&dtd->pool), sizeof(PREFIX));
  ------------------
  |  |  671|  1.16k|#define poolStart(pool) ((pool)->start)
  ------------------
 7668|  1.16k|          if (! id->prefix)
  ------------------
  |  Branch (7668:15): [True: 0, False: 1.16k]
  ------------------
 7669|      0|            return NULL;
 7670|  1.16k|          if (id->prefix->name == poolStart(&dtd->pool))
  ------------------
  |  |  671|  1.16k|#define poolStart(pool) ((pool)->start)
  ------------------
  |  Branch (7670:15): [True: 149, False: 1.01k]
  ------------------
 7671|    149|            poolFinish(&dtd->pool);
  ------------------
  |  |  676|    149|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 7672|  1.01k|          else
 7673|  1.01k|            poolDiscard(&dtd->pool);
  ------------------
  |  |  675|  1.01k|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 7674|  1.16k|          break;
 7675|  1.16k|        }
 7676|  9.19k|      }
 7677|  3.02k|    }
 7678|  7.65k|  }
 7679|  37.6k|  return id;
 7680|  37.6k|}
xmlparse.c:poolAppend:
 8450|  4.20M|           const char *end) {
 8451|  4.20M|  if (! pool->ptr && ! poolGrow(pool))
  ------------------
  |  Branch (8451:7): [True: 32.2k, False: 4.17M]
  |  Branch (8451:22): [True: 0, False: 32.2k]
  ------------------
 8452|      0|    return NULL;
 8453|  4.20M|  for (;;) {
 8454|  4.20M|    const enum XML_Convert_Result convert_res = XmlConvert(
  ------------------
  |  |  190|  4.20M|#  define XmlConvert XmlUtf8Convert
  |  |  ------------------
  |  |  |  |  275|  4.20M|    (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim))
  |  |  ------------------
  ------------------
 8455|  4.20M|        enc, &ptr, end, (ICHAR **)&(pool->ptr), (const ICHAR *)pool->end);
 8456|  4.20M|    if ((convert_res == XML_CONVERT_COMPLETED)
  ------------------
  |  Branch (8456:9): [True: 4.20M, False: 3.60k]
  ------------------
 8457|  3.60k|        || (convert_res == XML_CONVERT_INPUT_INCOMPLETE))
  ------------------
  |  Branch (8457:12): [True: 0, False: 3.60k]
  ------------------
 8458|  4.20M|      break;
 8459|  3.60k|    if (! poolGrow(pool))
  ------------------
  |  Branch (8459:9): [True: 0, False: 3.60k]
  ------------------
 8460|      0|      return NULL;
 8461|  3.60k|  }
 8462|  4.20M|  return pool->start;
 8463|  4.20M|}
xmlparse.c:defineAttribute:
 7527|  3.10k|                bool isId, const XML_Char *value, XML_Parser parser) {
 7528|  3.10k|  DEFAULT_ATTRIBUTE *att;
 7529|  3.10k|  if (value || isId) {
  ------------------
  |  Branch (7529:7): [True: 2.39k, False: 708]
  |  Branch (7529:16): [True: 417, False: 291]
  ------------------
 7530|       |    /* The handling of default attributes gets messed up if we have
 7531|       |       a default which duplicates a non-default. */
 7532|  2.81k|    NAMED *const nameFound
 7533|  2.81k|        = lookup(parser, &(type->defaultAttForName), attId->name, 0);
 7534|  2.81k|    if (nameFound)
  ------------------
  |  Branch (7534:9): [True: 918, False: 1.89k]
  ------------------
 7535|    918|      return 1;
 7536|  1.89k|    if (isId && ! type->idAtt && ! attId->xmlns)
  ------------------
  |  Branch (7536:9): [True: 253, False: 1.64k]
  |  Branch (7536:17): [True: 123, False: 130]
  |  Branch (7536:34): [True: 113, False: 10]
  ------------------
 7537|    113|      type->idAtt = attId;
 7538|  1.89k|  }
 7539|  2.18k|  if (type->nDefaultAtts == type->allocDefaultAtts) {
  ------------------
  |  Branch (7539:7): [True: 907, False: 1.27k]
  ------------------
 7540|       |    /* Detect and prevent integer overflow */
 7541|    907|    if (type->allocDefaultAtts > SIZE_MAX / 2) {
  ------------------
  |  Branch (7541:9): [True: 0, False: 907]
  ------------------
 7542|      0|      return 0;
 7543|      0|    }
 7544|       |
 7545|    907|    size_t count = type->allocDefaultAtts * 2;
 7546|    907|    if (count == 0) {
  ------------------
  |  Branch (7546:9): [True: 846, False: 61]
  ------------------
 7547|    846|      count = 8;
 7548|    846|    }
 7549|       |
 7550|       |    /* Detect and prevent integer overflow. */
 7551|    907|    if (count > SIZE_MAX / sizeof(DEFAULT_ATTRIBUTE)) {
  ------------------
  |  Branch (7551:9): [True: 0, False: 907]
  ------------------
 7552|      0|      return 0;
 7553|      0|    }
 7554|       |
 7555|    907|    DEFAULT_ATTRIBUTE *const temp = REALLOC(
  ------------------
  |  |  836|    907|#  define REALLOC(parser, p, s) (expat_realloc((parser), (p), (s), __LINE__))
  ------------------
 7556|    907|        parser, type->defaultAtts, (count * sizeof(DEFAULT_ATTRIBUTE)));
 7557|    907|    if (temp == NULL)
  ------------------
  |  Branch (7557:9): [True: 0, False: 907]
  ------------------
 7558|      0|      return 0;
 7559|    907|    type->allocDefaultAtts = count;
 7560|    907|    type->defaultAtts = temp;
 7561|    907|  }
 7562|  2.18k|  att = type->defaultAtts + type->nDefaultAtts;
 7563|  2.18k|  att->id = attId;
 7564|  2.18k|  att->value = value;
 7565|  2.18k|  att->isCdata = isCdata;
 7566|  2.18k|  if (! isCdata)
  ------------------
  |  Branch (7566:7): [True: 1.62k, False: 564]
  ------------------
 7567|  1.62k|    attId->maybeTokenized = true;
 7568|       |
 7569|  2.18k|  NAME_AND_DEFAULT_ATTRIBUTE *const nameAndDefaultAttribute
 7570|  2.18k|      = (NAME_AND_DEFAULT_ATTRIBUTE *)lookup(
 7571|  2.18k|          parser, &(type->defaultAttForName), attId->name,
 7572|  2.18k|          sizeof(NAME_AND_DEFAULT_ATTRIBUTE));
 7573|  2.18k|  if (! nameAndDefaultAttribute)
  ------------------
  |  Branch (7573:7): [True: 0, False: 2.18k]
  ------------------
 7574|      0|    return 0;
 7575|       |
 7576|  2.18k|  assert(nameAndDefaultAttribute->name == attId->name);
  ------------------
  |  Branch (7576:3): [True: 0, False: 2.18k]
  |  Branch (7576:3): [True: 2.18k, False: 0]
  ------------------
 7577|       |
 7578|       |  // NOTE: The XML 1.0r4 spec says:
 7579|       |  // "When more than one definition is provided for the same attribute of a
 7580|       |  // given element type, the first declaration is binding and later
 7581|       |  // declarations are ignored."
 7582|  2.18k|  if (! nameAndDefaultAttribute->initialized) {
  ------------------
  |  Branch (7582:7): [True: 1.92k, False: 265]
  ------------------
 7583|  1.92k|    nameAndDefaultAttribute->attIndex = type->nDefaultAtts;
 7584|  1.92k|    nameAndDefaultAttribute->initialized = true;
 7585|  1.92k|  }
 7586|       |
 7587|  2.18k|  type->nDefaultAtts += 1;
 7588|  2.18k|  return 1;
 7589|  2.18k|}
xmlparse.c:poolAppendChar:
  679|  13.0M|poolAppendChar(STRING_POOL *pool, XML_Char c) {
  680|  13.0M|  if (pool->ptr == pool->end && ! poolGrow(pool))
  ------------------
  |  Branch (680:7): [True: 11.7k, False: 12.9M]
  |  Branch (680:33): [True: 0, False: 11.7k]
  ------------------
  681|      0|    return false;
  682|       |
  683|  13.0M|  *(pool->ptr)++ = c;
  684|       |  return true;
  685|  13.0M|}
xmlparse.c:storeAttributeValue:
 6842|  8.17k|                    enum XML_Account account) {
 6843|  8.17k|  const char *next = ptr;
 6844|  8.17k|  enum XML_Error result = XML_ERROR_NONE;
 6845|       |
 6846|  1.78M|  while (1) {
  ------------------
  |  Branch (6846:10): [True: 1.78M, Folded]
  ------------------
 6847|  1.78M|    if (! parser->m_openAttributeEntities) {
  ------------------
  |  Branch (6847:9): [True: 27.9k, False: 1.75M]
  ------------------
 6848|  27.9k|      result = appendAttributeValue(parser, enc, isCdata, next, end, pool,
 6849|  27.9k|                                    account, &next);
 6850|  1.75M|    } else {
 6851|  1.75M|      OPEN_INTERNAL_ENTITY *const openEntity = parser->m_openAttributeEntities;
 6852|  1.75M|      if (! openEntity)
  ------------------
  |  Branch (6852:11): [True: 0, False: 1.75M]
  ------------------
 6853|      0|        return XML_ERROR_UNEXPECTED_STATE;
 6854|       |
 6855|  1.75M|      ENTITY *const entity = openEntity->entity;
 6856|  1.75M|      const char *const textStart
 6857|  1.75M|          = ((const char *)entity->textPtr) + entity->processed;
 6858|  1.75M|      const char *const textEnd
 6859|  1.75M|          = (const char *)(entity->textPtr + entity->textLen);
 6860|       |      /* Set a safe default value in case 'next' does not get set */
 6861|  1.75M|      const char *nextInEntity = textStart;
 6862|  1.75M|      if (entity->hasMore) {
  ------------------
  |  Branch (6862:11): [True: 1.16M, False: 598k]
  ------------------
 6863|  1.16M|        result = appendAttributeValue(
 6864|  1.16M|            parser, parser->m_internalEncoding, isCdata, textStart, textEnd,
 6865|  1.16M|            pool, XML_ACCOUNT_ENTITY_EXPANSION, &nextInEntity);
 6866|  1.16M|        if (result != XML_ERROR_NONE)
  ------------------
  |  Branch (6866:13): [True: 15, False: 1.16M]
  ------------------
 6867|     15|          break;
 6868|       |        // Check if entity is complete, if not, mark down how much of it is
 6869|       |        // processed. A XML_SUSPENDED check here is not required as
 6870|       |        // appendAttributeValue will never suspend the parser.
 6871|  1.16M|        if (nextInEntity < textEnd) {
  ------------------
  |  Branch (6871:13): [True: 562k, False: 598k]
  ------------------
 6872|   562k|          entity->processed = nextInEntity - (const char *)entity->textPtr;
 6873|   562k|          continue;
 6874|   562k|        }
 6875|  1.16M|        assert(nextInEntity == textEnd);
  ------------------
  |  Branch (6875:9): [True: 0, False: 598k]
  |  Branch (6875:9): [True: 598k, False: 0]
  ------------------
 6876|       |
 6877|       |        // Entity is complete. We cannot close it here since we need to first
 6878|       |        // process its possible inner entities (which are added to the
 6879|       |        // m_openAttributeEntities during appendAttributeValue)
 6880|   598k|        entity->hasMore = false;
 6881|   598k|        continue;
 6882|   598k|      } // End of entity processing, "if" block skips the rest
 6883|       |
 6884|       |      // Remove fully processed openEntity from open entity list.
 6885|   598k|#if XML_GE == 1
 6886|   598k|      entityTrackingOnClose(parser, entity, __LINE__);
 6887|   598k|#endif
 6888|       |      // openEntity is m_openAttributeEntities' head, since we set it at the
 6889|       |      // start of this function and because we skipped appendAttributeValue call
 6890|       |      // with hasMore set to false. This means we can directly remove the head
 6891|       |      // of m_openAttributeEntities
 6892|   598k|      assert(parser->m_openAttributeEntities == openEntity);
  ------------------
  |  Branch (6892:7): [True: 0, False: 598k]
  |  Branch (6892:7): [True: 598k, False: 0]
  ------------------
 6893|   598k|      entity->open = false;
 6894|   598k|      parser->m_openAttributeEntities = parser->m_openAttributeEntities->next;
 6895|       |
 6896|       |      /* put openEntity back in list of free instances */
 6897|   598k|      openEntity->next = parser->m_freeEntities;
 6898|   598k|      parser->m_freeEntities = openEntity;
 6899|   598k|    }
 6900|       |
 6901|       |    // Break if an error occurred or there is nothing left to process
 6902|   626k|    if (result || (parser->m_openAttributeEntities == NULL && end == next)) {
  ------------------
  |  Branch (6902:9): [True: 119, False: 626k]
  |  Branch (6902:20): [True: 27.8k, False: 598k]
  |  Branch (6902:63): [True: 8.03k, False: 19.8k]
  ------------------
 6903|  8.15k|      break;
 6904|  8.15k|    }
 6905|   626k|  }
 6906|       |
 6907|  8.17k|  if (result)
  ------------------
  |  Branch (6907:7): [True: 134, False: 8.03k]
  ------------------
 6908|    134|    return result;
 6909|  8.03k|  if (! isCdata && poolLength(pool) && poolLastChar(pool) == 0x20)
  ------------------
  |  |  672|  10.1k|#define poolLength(pool) ((pool)->ptr - (pool)->start)
  |  |  ------------------
  |  |  |  Branch (672:26): [True: 391, False: 1.73k]
  |  |  ------------------
  ------------------
                if (! isCdata && poolLength(pool) && poolLastChar(pool) == 0x20)
  ------------------
  |  |  674|    391|#define poolLastChar(pool) (((pool)->ptr)[-1])
  ------------------
  |  Branch (6909:7): [True: 2.13k, False: 5.90k]
  |  Branch (6909:40): [True: 124, False: 267]
  ------------------
 6910|    124|    poolChop(pool);
  ------------------
  |  |  673|    124|#define poolChop(pool) ((void)--(pool->ptr))
  ------------------
 6911|  8.03k|  if (! poolAppendChar(pool, XML_T('\0')))
  ------------------
  |  |  220|  8.03k|#  define XML_T(x) x
  ------------------
  |  Branch (6911:7): [True: 0, False: 8.03k]
  ------------------
 6912|      0|    return XML_ERROR_NO_MEMORY;
 6913|  8.03k|  return XML_ERROR_NONE;
 6914|  8.03k|}
xmlparse.c:appendAttributeValue:
 6919|  1.18M|                     enum XML_Account account, const char **nextPtr) {
 6920|  1.18M|  DTD *const dtd = parser->m_dtd; /* save one level of indirection */
 6921|       |#ifndef XML_DTD
 6922|       |  UNUSED_P(account);
 6923|       |#endif
 6924|       |
 6925|  16.5M|  for (;;) {
 6926|  16.5M|    const char *next
 6927|  16.5M|        = ptr; /* XmlAttributeValueTok doesn't always set the last arg */
 6928|  16.5M|    int tok = XmlAttributeValueTok(enc, ptr, end, &next);
  ------------------
  |  |  248|  16.5M|    XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |  245|  16.5M|    (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr))
  |  |  ------------------
  ------------------
 6929|  16.5M|#if XML_GE == 1
 6930|  16.5M|    if (! accountingDiffTolerated(parser, tok, ptr, next, __LINE__, account)) {
  ------------------
  |  Branch (6930:9): [True: 0, False: 16.5M]
  ------------------
 6931|      0|      accountingOnAbort(parser);
 6932|      0|      return XML_ERROR_AMPLIFICATION_LIMIT_BREACH;
 6933|      0|    }
 6934|  16.5M|#endif
 6935|  16.5M|    switch (tok) {
 6936|   590k|    case XML_TOK_NONE:
  ------------------
  |  |   51|   590k|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
  |  Branch (6936:5): [True: 590k, False: 15.9M]
  ------------------
 6937|   590k|      if (nextPtr) {
  ------------------
  |  Branch (6937:11): [True: 590k, False: 0]
  ------------------
 6938|   590k|        *nextPtr = next;
 6939|   590k|      }
 6940|   590k|      return XML_ERROR_NONE;
 6941|     12|    case XML_TOK_INVALID:
  ------------------
  |  |   57|     12|#  define XML_TOK_INVALID 0
  ------------------
  |  Branch (6941:5): [True: 12, False: 16.5M]
  ------------------
 6942|     12|      if (enc == parser->m_encoding)
  ------------------
  |  Branch (6942:11): [True: 7, False: 5]
  ------------------
 6943|      7|        parser->m_eventPtr = next;
 6944|     12|      return XML_ERROR_INVALID_TOKEN;
 6945|      7|    case XML_TOK_PARTIAL:
  ------------------
  |  |   56|      7|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  |  Branch (6945:5): [True: 7, False: 16.5M]
  ------------------
 6946|      7|      if (enc == parser->m_encoding)
  ------------------
  |  Branch (6946:11): [True: 6, False: 1]
  ------------------
 6947|      6|        parser->m_eventPtr = ptr;
 6948|      7|      return XML_ERROR_INVALID_TOKEN;
 6949|  2.35k|    case XML_TOK_CHAR_REF: {
  ------------------
  |  |   71|  2.35k|#  define XML_TOK_CHAR_REF 10 /* numeric character reference */
  ------------------
  |  Branch (6949:5): [True: 2.35k, False: 16.5M]
  ------------------
 6950|  2.35k|      XML_Char buf[XML_ENCODE_MAX];
 6951|  2.35k|      int n = XmlCharRefNumber(enc, ptr);
  ------------------
  |  |  263|  2.35k|#  define XmlCharRefNumber(enc, ptr) (((enc)->charRefNumber)(enc, ptr))
  ------------------
 6952|  2.35k|      if (n < 0) {
  ------------------
  |  Branch (6952:11): [True: 19, False: 2.33k]
  ------------------
 6953|     19|        if (enc == parser->m_encoding)
  ------------------
  |  Branch (6953:13): [True: 19, False: 0]
  ------------------
 6954|     19|          parser->m_eventPtr = ptr;
 6955|     19|        return XML_ERROR_BAD_CHAR_REF;
 6956|     19|      }
 6957|  2.33k|      if (! isCdata && n == 0x20 /* space */
  ------------------
  |  Branch (6957:11): [True: 681, False: 1.65k]
  |  Branch (6957:24): [True: 466, False: 215]
  ------------------
 6958|    466|          && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20))
  ------------------
  |  |  672|    466|#define poolLength(pool) ((pool)->ptr - (pool)->start)
  ------------------
                        && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20))
  ------------------
  |  |  674|    272|#define poolLastChar(pool) (((pool)->ptr)[-1])
  ------------------
  |  Branch (6958:15): [True: 194, False: 272]
  |  Branch (6958:40): [True: 194, False: 78]
  ------------------
 6959|    388|        break;
 6960|  1.94k|      n = XmlEncode(n, (ICHAR *)buf);
  ------------------
  |  |  193|  1.94k|#  define XmlEncode XmlUtf8Encode
  ------------------
 6961|       |      /* The XmlEncode() functions can never return 0 here.  That
 6962|       |       * error return happens if the code point passed in is either
 6963|       |       * negative or greater than or equal to 0x110000.  The
 6964|       |       * XmlCharRefNumber() functions will all return a number
 6965|       |       * strictly less than 0x110000 or a negative value if an error
 6966|       |       * occurred.  The negative value is intercepted above, so
 6967|       |       * XmlEncode() is never passed a value it might return an
 6968|       |       * error for.
 6969|       |       */
 6970|       |
 6971|  1.94k|      if (! poolAppendChars(pool, buf, n))
  ------------------
  |  Branch (6971:11): [True: 0, False: 1.94k]
  ------------------
 6972|      0|        return XML_ERROR_NO_MEMORY;
 6973|  1.94k|    } break;
 6974|  3.37M|    case XML_TOK_DATA_CHARS:
  ------------------
  |  |   67|  3.37M|#  define XML_TOK_DATA_CHARS 6
  ------------------
  |  Branch (6974:5): [True: 3.37M, False: 13.1M]
  ------------------
 6975|  3.37M|      if (! poolAppend(pool, enc, ptr, next))
  ------------------
  |  Branch (6975:11): [True: 0, False: 3.37M]
  ------------------
 6976|      0|        return XML_ERROR_NO_MEMORY;
 6977|  3.37M|      break;
 6978|  3.37M|    case XML_TOK_TRAILING_CR:
  ------------------
  |  |   53|    154|    -3                            /* A CR at the end of the scan;              \
  ------------------
  |  Branch (6978:5): [True: 154, False: 16.5M]
  ------------------
 6979|    154|      next = ptr + enc->minBytesPerChar;
 6980|    154|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|    154|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 6981|  11.8M|    case XML_TOK_ATTRIBUTE_VALUE_S:
  ------------------
  |  |  110|  11.8M|#  define XML_TOK_ATTRIBUTE_VALUE_S 39
  ------------------
  |  Branch (6981:5): [True: 11.8M, False: 4.62M]
  ------------------
 6982|  11.9M|    case XML_TOK_DATA_NEWLINE:
  ------------------
  |  |   68|  11.9M|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
  |  Branch (6982:5): [True: 27.9k, False: 16.4M]
  ------------------
 6983|  11.9M|      if (! isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20))
  ------------------
  |  |  672|  29.2k|#define poolLength(pool) ((pool)->ptr - (pool)->start)
  ------------------
                    if (! isCdata && (poolLength(pool) == 0 || poolLastChar(pool) == 0x20))
  ------------------
  |  |  674|  28.5k|#define poolLastChar(pool) (((pool)->ptr)[-1])
  ------------------
  |  Branch (6983:11): [True: 29.2k, False: 11.8M]
  |  Branch (6983:25): [True: 616, False: 28.5k]
  |  Branch (6983:50): [True: 19.8k, False: 8.69k]
  ------------------
 6984|  20.5k|        break;
 6985|  11.9M|      if (! poolAppendChar(pool, 0x20))
  ------------------
  |  Branch (6985:11): [True: 0, False: 11.9M]
  ------------------
 6986|      0|        return XML_ERROR_NO_MEMORY;
 6987|  11.9M|      break;
 6988|  11.9M|    case XML_TOK_ENTITY_REF: {
  ------------------
  |  |   70|   628k|#  define XML_TOK_ENTITY_REF 9
  ------------------
  |  Branch (6988:5): [True: 628k, False: 15.8M]
  ------------------
 6989|   628k|      const XML_Char *name;
 6990|   628k|      ENTITY *entity;
 6991|   628k|      bool checkEntityDecl;
 6992|   628k|      XML_Char ch = (XML_Char)XmlPredefinedEntityName(
  ------------------
  |  |  266|   628k|    (((enc)->predefinedEntityName)(enc, ptr, end))
  ------------------
 6993|   628k|          enc, ptr + enc->minBytesPerChar, next - enc->minBytesPerChar);
 6994|   628k|      if (ch) {
  ------------------
  |  Branch (6994:11): [True: 29.7k, False: 599k]
  ------------------
 6995|  29.7k|#if XML_GE == 1
 6996|       |        /* NOTE: We are replacing 4-6 characters original input for 1 character
 6997|       |         *       so there is no amplification and hence recording without
 6998|       |         *       protection. */
 6999|  29.7k|        accountingDiffTolerated(parser, tok, (char *)&ch,
 7000|  29.7k|                                ((char *)&ch) + sizeof(XML_Char), __LINE__,
 7001|  29.7k|                                XML_ACCOUNT_ENTITY_EXPANSION);
 7002|  29.7k|#endif /* XML_GE == 1 */
 7003|  29.7k|        if (! poolAppendChar(pool, ch))
  ------------------
  |  Branch (7003:13): [True: 0, False: 29.7k]
  ------------------
 7004|      0|          return XML_ERROR_NO_MEMORY;
 7005|  29.7k|        break;
 7006|  29.7k|      }
 7007|   599k|      name = poolStoreString(&parser->m_temp2Pool, enc,
 7008|   599k|                             ptr + enc->minBytesPerChar,
 7009|   599k|                             next - enc->minBytesPerChar);
 7010|   599k|      if (! name)
  ------------------
  |  Branch (7010:11): [True: 0, False: 599k]
  ------------------
 7011|      0|        return XML_ERROR_NO_MEMORY;
 7012|   599k|      entity = (ENTITY *)lookup(parser, &dtd->generalEntities, name, 0);
 7013|   599k|      poolDiscard(&parser->m_temp2Pool);
  ------------------
  |  |  675|   599k|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 7014|       |      /* First, determine if a check for an existing declaration is needed;
 7015|       |         if yes, check that the entity exists, and that it is internal.
 7016|       |      */
 7017|   599k|      if (pool == &dtd->pool) /* are we called from prolog? */
  ------------------
  |  Branch (7017:11): [True: 104k, False: 494k]
  ------------------
 7018|   104k|        checkEntityDecl =
 7019|   104k|#ifdef XML_DTD
 7020|   104k|            parser->m_prologState.documentEntity &&
  ------------------
  |  Branch (7020:13): [True: 104k, False: 0]
  ------------------
 7021|   104k|#endif /* XML_DTD */
 7022|   104k|            (dtd->standalone ? ! parser->m_openInternalEntities
  ------------------
  |  Branch (7022:13): [True: 104k, False: 152]
  |  Branch (7022:14): [True: 0, False: 104k]
  ------------------
 7023|   104k|                             : ! dtd->hasParamEntityRefs);
 7024|   494k|      else /* if (pool == &parser->m_tempPool): we are called from content */
 7025|   494k|        checkEntityDecl = ! dtd->hasParamEntityRefs || dtd->standalone;
  ------------------
  |  Branch (7025:27): [True: 487k, False: 6.64k]
  |  Branch (7025:56): [True: 0, False: 6.64k]
  ------------------
 7026|   599k|      if (checkEntityDecl) {
  ------------------
  |  Branch (7026:11): [True: 592k, False: 6.80k]
  ------------------
 7027|   592k|        if (! entity)
  ------------------
  |  Branch (7027:13): [True: 88, False: 592k]
  ------------------
 7028|     88|          return XML_ERROR_UNDEFINED_ENTITY;
 7029|   592k|        else if (! entity->is_internal)
  ------------------
  |  Branch (7029:18): [True: 0, False: 592k]
  ------------------
 7030|      0|          return XML_ERROR_ENTITY_DECLARED_IN_PE;
 7031|   592k|      } else if (! entity) {
  ------------------
  |  Branch (7031:18): [True: 644, False: 6.15k]
  ------------------
 7032|       |        /* Cannot report skipped entity here - see comments on
 7033|       |           parser->m_skippedEntityHandler.
 7034|       |        if (parser->m_skippedEntityHandler) {
 7035|       |          beforeHandler(parser);
 7036|       |          parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0);
 7037|       |          afterHandler(parser);
 7038|       |        }
 7039|       |        */
 7040|       |        /* Cannot call the default handler because this would be
 7041|       |           out of sync with the call to the startElementHandler.
 7042|       |        if ((pool == &parser->m_tempPool) && parser->m_defaultHandler)
 7043|       |          reportDefault(parser, enc, ptr, next);
 7044|       |        */
 7045|    644|        break;
 7046|    644|      }
 7047|   598k|      if (entity->open) {
  ------------------
  |  Branch (7047:11): [True: 4, False: 598k]
  ------------------
 7048|      4|        if (enc == parser->m_encoding) {
  ------------------
  |  Branch (7048:13): [True: 0, False: 4]
  ------------------
 7049|       |          /* It does not appear that this line can be executed.
 7050|       |           *
 7051|       |           * The "if (entity->open)" check catches recursive entity
 7052|       |           * definitions.  In order to be called with an open
 7053|       |           * entity, it must have gone through this code before and
 7054|       |           * been through the recursive call to
 7055|       |           * appendAttributeValue() some lines below.  That call
 7056|       |           * sets the local encoding ("enc") to the parser's
 7057|       |           * internal encoding (internal_utf8 or internal_utf16),
 7058|       |           * which can never be the same as the principle encoding.
 7059|       |           * It doesn't appear there is another code path that gets
 7060|       |           * here with entity->open being TRUE.
 7061|       |           *
 7062|       |           * Since it is not certain that this logic is watertight,
 7063|       |           * we keep the line and merely exclude it from coverage
 7064|       |           * tests.
 7065|       |           */
 7066|      0|          parser->m_eventPtr = ptr; /* LCOV_EXCL_LINE */
 7067|      0|        }
 7068|      4|        return XML_ERROR_RECURSIVE_ENTITY_REF;
 7069|      4|      }
 7070|   598k|      if (entity->notation) {
  ------------------
  |  Branch (7070:11): [True: 2, False: 598k]
  ------------------
 7071|      2|        if (enc == parser->m_encoding)
  ------------------
  |  Branch (7071:13): [True: 1, False: 1]
  ------------------
 7072|      1|          parser->m_eventPtr = ptr;
 7073|      2|        return XML_ERROR_BINARY_ENTITY_REF;
 7074|      2|      }
 7075|   598k|      if (! entity->textPtr) {
  ------------------
  |  Branch (7075:11): [True: 2, False: 598k]
  ------------------
 7076|      2|        if (enc == parser->m_encoding)
  ------------------
  |  Branch (7076:13): [True: 1, False: 1]
  ------------------
 7077|      1|          parser->m_eventPtr = ptr;
 7078|      2|        return XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF;
 7079|   598k|      } else {
 7080|   598k|        enum XML_Error result;
 7081|   598k|        result = processEntity(parser, entity, XML_FALSE, ENTITY_ATTRIBUTE);
  ------------------
  |  |   64|   598k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7082|   598k|        if ((result == XML_ERROR_NONE) && (nextPtr != NULL)) {
  ------------------
  |  Branch (7082:13): [True: 598k, False: 0]
  |  Branch (7082:43): [True: 598k, False: 0]
  ------------------
 7083|   598k|          *nextPtr = next;
 7084|   598k|        }
 7085|   598k|        return result;
 7086|   598k|      }
 7087|   598k|    } break;
 7088|      0|    default:
  ------------------
  |  Branch (7088:5): [True: 0, False: 16.5M]
  ------------------
 7089|       |      /* The only token returned by XmlAttributeValueTok() that does
 7090|       |       * not have an explicit case here is XML_TOK_PARTIAL_CHAR.
 7091|       |       * Getting that would require an entity name to contain an
 7092|       |       * incomplete XML character (e.g. \xE2\x82); however previous
 7093|       |       * tokenisers will have already recognised and rejected such
 7094|       |       * names before XmlAttributeValueTok() gets a look-in.  This
 7095|       |       * default case should be retained as a safety net, but the code
 7096|       |       * excluded from coverage tests.
 7097|       |       *
 7098|       |       * LCOV_EXCL_START
 7099|       |       */
 7100|      0|      if (enc == parser->m_encoding)
  ------------------
  |  Branch (7100:11): [True: 0, False: 0]
  ------------------
 7101|      0|        parser->m_eventPtr = ptr;
 7102|      0|      return XML_ERROR_UNEXPECTED_STATE;
 7103|       |      /* LCOV_EXCL_STOP */
 7104|  16.5M|    }
 7105|  15.3M|    ptr = next;
 7106|  15.3M|  }
 7107|       |  /* not reached */
 7108|  1.18M|}
xmlparse.c:callStoreEntityValue:
 7303|  3.72k|                     enum XML_Account account) {
 7304|  3.72k|  const char *next = entityTextPtr;
 7305|  3.72k|  enum XML_Error result = XML_ERROR_NONE;
 7306|  3.72k|  while (1) {
  ------------------
  |  Branch (7306:10): [True: 3.72k, Folded]
  ------------------
 7307|  3.72k|    if (! parser->m_openValueEntities) {
  ------------------
  |  Branch (7307:9): [True: 3.72k, False: 0]
  ------------------
 7308|  3.72k|      result
 7309|  3.72k|          = storeEntityValue(parser, enc, next, entityTextEnd, account, &next);
 7310|  3.72k|    } else {
 7311|      0|      OPEN_INTERNAL_ENTITY *const openEntity = parser->m_openValueEntities;
 7312|      0|      if (! openEntity)
  ------------------
  |  Branch (7312:11): [True: 0, False: 0]
  ------------------
 7313|      0|        return XML_ERROR_UNEXPECTED_STATE;
 7314|       |
 7315|      0|      ENTITY *const entity = openEntity->entity;
 7316|      0|      const char *const textStart
 7317|      0|          = ((const char *)entity->textPtr) + entity->processed;
 7318|      0|      const char *const textEnd
 7319|      0|          = (const char *)(entity->textPtr + entity->textLen);
 7320|       |      /* Set a safe default value in case 'next' does not get set */
 7321|      0|      const char *nextInEntity = textStart;
 7322|      0|      if (entity->hasMore) {
  ------------------
  |  Branch (7322:11): [True: 0, False: 0]
  ------------------
 7323|      0|        result = storeEntityValue(parser, parser->m_internalEncoding, textStart,
 7324|      0|                                  textEnd, XML_ACCOUNT_ENTITY_EXPANSION,
 7325|      0|                                  &nextInEntity);
 7326|      0|        if (result != XML_ERROR_NONE)
  ------------------
  |  Branch (7326:13): [True: 0, False: 0]
  ------------------
 7327|      0|          break;
 7328|       |        // Check if entity is complete, if not, mark down how much of it is
 7329|       |        // processed. A XML_SUSPENDED check here is not required as
 7330|       |        // appendAttributeValue will never suspend the parser.
 7331|      0|        if (textEnd != nextInEntity) {
  ------------------
  |  Branch (7331:13): [True: 0, False: 0]
  ------------------
 7332|      0|          entity->processed = nextInEntity - (const char *)entity->textPtr;
 7333|      0|          continue;
 7334|      0|        }
 7335|       |
 7336|       |        // Entity is complete. We cannot close it here since we need to first
 7337|       |        // process its possible inner entities (which are added to the
 7338|       |        // m_openValueEntities during storeEntityValue)
 7339|      0|        entity->hasMore = false;
 7340|      0|        continue;
 7341|      0|      } // End of entity processing, "if" block skips the rest
 7342|       |
 7343|       |      // Remove fully processed openEntity from open entity list.
 7344|      0|#  if XML_GE == 1
 7345|      0|      entityTrackingOnClose(parser, entity, __LINE__);
 7346|      0|#  endif
 7347|       |      // openEntity is m_openValueEntities' head, since we set it at the
 7348|       |      // start of this function and because we skipped storeEntityValue call
 7349|       |      // with hasMore set to false. This means we can directly remove the head
 7350|       |      // of m_openValueEntities
 7351|      0|      assert(parser->m_openValueEntities == openEntity);
  ------------------
  |  Branch (7351:7): [True: 0, False: 0]
  |  Branch (7351:7): [True: 0, False: 0]
  ------------------
 7352|      0|      entity->open = false;
 7353|      0|      parser->m_openValueEntities = parser->m_openValueEntities->next;
 7354|       |
 7355|       |      /* put openEntity back in list of free instances */
 7356|      0|      openEntity->next = parser->m_freeEntities;
 7357|      0|      parser->m_freeEntities = openEntity;
 7358|      0|    }
 7359|       |
 7360|       |    // Break if an error occurred or there is nothing left to process
 7361|  3.72k|    if (result
  ------------------
  |  Branch (7361:9): [True: 23, False: 3.70k]
  ------------------
 7362|  3.72k|        || (parser->m_openValueEntities == NULL && entityTextEnd == next)) {
  ------------------
  |  Branch (7362:13): [True: 3.70k, False: 0]
  |  Branch (7362:52): [True: 3.70k, False: 0]
  ------------------
 7363|  3.72k|      break;
 7364|  3.72k|    }
 7365|  3.72k|  }
 7366|       |
 7367|  3.72k|  return result;
 7368|  3.72k|}
xmlparse.c:storeEntityValue:
 7114|  3.72k|                 enum XML_Account account, const char **nextPtr) {
 7115|  3.72k|  DTD *const dtd = parser->m_dtd; /* save one level of indirection */
 7116|  3.72k|  STRING_POOL *pool = &(dtd->entityValuePool);
 7117|  3.72k|  enum XML_Error result = XML_ERROR_NONE;
 7118|  3.72k|#  ifdef XML_DTD
 7119|  3.72k|  int oldInEntityValue = parser->m_prologState.inEntityValue;
 7120|  3.72k|  parser->m_prologState.inEntityValue = 1;
 7121|       |#  else
 7122|       |  UNUSED_P(account);
 7123|       |#  endif /* XML_DTD */
 7124|       |  /* never return Null for the value argument in EntityDeclHandler,
 7125|       |     since this would indicate an external entity; therefore we
 7126|       |     have to make sure that entityValuePool.start is not null */
 7127|  3.72k|  if (! pool->blocks) {
  ------------------
  |  Branch (7127:7): [True: 1.71k, False: 2.00k]
  ------------------
 7128|  1.71k|    if (! poolGrow(pool))
  ------------------
  |  Branch (7128:9): [True: 0, False: 1.71k]
  ------------------
 7129|      0|      return XML_ERROR_NO_MEMORY;
 7130|  1.71k|  }
 7131|       |
 7132|  3.72k|  const char *next = entityTextPtr;
 7133|       |
 7134|       |  /* Nothing to tokenize. */
 7135|  3.72k|  if (entityTextPtr >= entityTextEnd) {
  ------------------
  |  Branch (7135:7): [True: 1.18k, False: 2.53k]
  ------------------
 7136|  1.18k|    result = XML_ERROR_NONE;
 7137|  1.18k|    goto endEntityValue;
 7138|  1.18k|  }
 7139|       |
 7140|  26.9k|  for (;;) {
 7141|  26.9k|    next
 7142|  26.9k|        = entityTextPtr; /* XmlEntityValueTok doesn't always set the last arg */
 7143|  26.9k|    int tok = XmlEntityValueTok(enc, entityTextPtr, entityTextEnd, &next);
  ------------------
  |  |  251|  26.9k|    XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |  245|  26.9k|    (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr))
  |  |  ------------------
  ------------------
 7144|       |
 7145|  26.9k|    if (! accountingDiffTolerated(parser, tok, entityTextPtr, next, __LINE__,
  ------------------
  |  Branch (7145:9): [True: 0, False: 26.9k]
  ------------------
 7146|  26.9k|                                  account)) {
 7147|      0|      accountingOnAbort(parser);
 7148|      0|      result = XML_ERROR_AMPLIFICATION_LIMIT_BREACH;
 7149|      0|      goto endEntityValue;
 7150|      0|    }
 7151|       |
 7152|  26.9k|    switch (tok) {
 7153|      1|    case XML_TOK_PARAM_ENTITY_REF:
  ------------------
  |  |   95|      1|#  define XML_TOK_PARAM_ENTITY_REF 28
  ------------------
  |  Branch (7153:5): [True: 1, False: 26.9k]
  ------------------
 7154|      1|#  ifdef XML_DTD
 7155|      1|      if (parser->m_isParamEntity || enc != parser->m_encoding) {
  ------------------
  |  Branch (7155:11): [True: 0, False: 1]
  |  Branch (7155:38): [True: 0, False: 1]
  ------------------
 7156|      0|        const XML_Char *name;
 7157|      0|        ENTITY *entity;
 7158|      0|        name = poolStoreString(&parser->m_tempPool, enc,
 7159|      0|                               entityTextPtr + enc->minBytesPerChar,
 7160|      0|                               next - enc->minBytesPerChar);
 7161|      0|        if (! name) {
  ------------------
  |  Branch (7161:13): [True: 0, False: 0]
  ------------------
 7162|      0|          result = XML_ERROR_NO_MEMORY;
 7163|      0|          goto endEntityValue;
 7164|      0|        }
 7165|      0|        entity = (ENTITY *)lookup(parser, &dtd->paramEntities, name, 0);
 7166|      0|        poolDiscard(&parser->m_tempPool);
  ------------------
  |  |  675|      0|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 7167|      0|        if (! entity) {
  ------------------
  |  Branch (7167:13): [True: 0, False: 0]
  ------------------
 7168|       |          /* not a well-formedness error - see XML 1.0: WFC Entity Declared */
 7169|       |          /* cannot report skipped entity here - see comments on
 7170|       |             parser->m_skippedEntityHandler
 7171|       |          if (parser->m_skippedEntityHandler) {
 7172|       |            beforeHandler(parser);
 7173|       |            parser->m_skippedEntityHandler(parser->m_handlerArg, name, 0);
 7174|       |            afterHandler(parser);
 7175|       |          }
 7176|       |          */
 7177|      0|          dtd->keepProcessing = dtd->standalone;
 7178|      0|          goto endEntityValue;
 7179|      0|        }
 7180|      0|        if (entity->open || (entity == parser->m_declEntity)) {
  ------------------
  |  Branch (7180:13): [True: 0, False: 0]
  |  Branch (7180:29): [True: 0, False: 0]
  ------------------
 7181|      0|          if (enc == parser->m_encoding)
  ------------------
  |  Branch (7181:15): [True: 0, False: 0]
  ------------------
 7182|      0|            parser->m_eventPtr = entityTextPtr;
 7183|      0|          result = XML_ERROR_RECURSIVE_ENTITY_REF;
 7184|      0|          goto endEntityValue;
 7185|      0|        }
 7186|      0|        if (entity->systemId) {
  ------------------
  |  Branch (7186:13): [True: 0, False: 0]
  ------------------
 7187|      0|          if (parser->m_externalEntityRefHandler) {
  ------------------
  |  Branch (7187:15): [True: 0, False: 0]
  ------------------
 7188|      0|            dtd->paramEntityRead = false;
 7189|      0|            entity->open = true;
 7190|      0|            entityTrackingOnOpen(parser, entity, __LINE__);
 7191|      0|            beforeHandler(parser);
 7192|      0|            const int status = parser->m_externalEntityRefHandler(
 7193|      0|                parser->m_externalEntityRefHandlerArg, 0, entity->base,
 7194|      0|                entity->systemId, entity->publicId);
 7195|      0|            afterHandler(parser);
 7196|      0|            if (! status) {
  ------------------
  |  Branch (7196:17): [True: 0, False: 0]
  ------------------
 7197|      0|              entityTrackingOnClose(parser, entity, __LINE__);
 7198|      0|              entity->open = false;
 7199|      0|              result = XML_ERROR_EXTERNAL_ENTITY_HANDLING;
 7200|      0|              goto endEntityValue;
 7201|      0|            }
 7202|      0|            entityTrackingOnClose(parser, entity, __LINE__);
 7203|      0|            entity->open = false;
 7204|      0|            if (! dtd->paramEntityRead)
  ------------------
  |  Branch (7204:17): [True: 0, False: 0]
  ------------------
 7205|      0|              dtd->keepProcessing = dtd->standalone;
 7206|      0|          } else
 7207|      0|            dtd->keepProcessing = dtd->standalone;
 7208|      0|        } else {
 7209|      0|          result = processEntity(parser, entity, XML_FALSE, ENTITY_VALUE);
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7210|      0|          goto endEntityValue;
 7211|      0|        }
 7212|      0|        break;
 7213|      0|      }
 7214|      1|#  endif /* XML_DTD */
 7215|       |      /* In the internal subset, PE references are not legal
 7216|       |         within markup declarations, e.g entity values in this case. */
 7217|      1|      parser->m_eventPtr = entityTextPtr;
 7218|      1|      result = XML_ERROR_PARAM_ENTITY_REF;
 7219|      1|      goto endEntityValue;
 7220|  2.51k|    case XML_TOK_NONE:
  ------------------
  |  |   51|  2.51k|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
  |  Branch (7220:5): [True: 2.51k, False: 24.4k]
  ------------------
 7221|  2.51k|      result = XML_ERROR_NONE;
 7222|  2.51k|      goto endEntityValue;
 7223|  15.9k|    case XML_TOK_ENTITY_REF:
  ------------------
  |  |   70|  15.9k|#  define XML_TOK_ENTITY_REF 9
  ------------------
  |  Branch (7223:5): [True: 15.9k, False: 11.0k]
  ------------------
 7224|  21.0k|    case XML_TOK_DATA_CHARS:
  ------------------
  |  |   67|  21.0k|#  define XML_TOK_DATA_CHARS 6
  ------------------
  |  Branch (7224:5): [True: 5.09k, False: 21.8k]
  ------------------
 7225|  21.0k|      if (! poolAppend(pool, enc, entityTextPtr, next)) {
  ------------------
  |  Branch (7225:11): [True: 0, False: 21.0k]
  ------------------
 7226|      0|        result = XML_ERROR_NO_MEMORY;
 7227|      0|        goto endEntityValue;
 7228|      0|      }
 7229|  21.0k|      break;
 7230|  21.0k|    case XML_TOK_TRAILING_CR:
  ------------------
  |  |   53|     73|    -3                            /* A CR at the end of the scan;              \
  ------------------
  |  Branch (7230:5): [True: 73, False: 26.8k]
  ------------------
 7231|     73|      next = entityTextPtr + enc->minBytesPerChar;
 7232|     73|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|     73|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 7233|  2.25k|    case XML_TOK_DATA_NEWLINE:
  ------------------
  |  |   68|  2.25k|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
  |  Branch (7233:5): [True: 2.17k, False: 24.7k]
  ------------------
 7234|  2.25k|      if (! poolAppendChar(pool, 0xA)) {
  ------------------
  |  Branch (7234:11): [True: 0, False: 2.25k]
  ------------------
 7235|      0|        result = XML_ERROR_NO_MEMORY;
 7236|      0|        goto endEntityValue;
 7237|      0|      }
 7238|  2.25k|      break;
 7239|  2.25k|    case XML_TOK_CHAR_REF: {
  ------------------
  |  |   71|  1.15k|#  define XML_TOK_CHAR_REF 10 /* numeric character reference */
  ------------------
  |  Branch (7239:5): [True: 1.15k, False: 25.8k]
  ------------------
 7240|  1.15k|      XML_Char buf[XML_ENCODE_MAX];
 7241|  1.15k|      int n = XmlCharRefNumber(enc, entityTextPtr);
  ------------------
  |  |  263|  1.15k|#  define XmlCharRefNumber(enc, ptr) (((enc)->charRefNumber)(enc, ptr))
  ------------------
 7242|  1.15k|      if (n < 0) {
  ------------------
  |  Branch (7242:11): [True: 2, False: 1.15k]
  ------------------
 7243|      2|        if (enc == parser->m_encoding)
  ------------------
  |  Branch (7243:13): [True: 2, False: 0]
  ------------------
 7244|      2|          parser->m_eventPtr = entityTextPtr;
 7245|      2|        result = XML_ERROR_BAD_CHAR_REF;
 7246|      2|        goto endEntityValue;
 7247|      2|      }
 7248|  1.15k|      n = XmlEncode(n, (ICHAR *)buf);
  ------------------
  |  |  193|  1.15k|#  define XmlEncode XmlUtf8Encode
  ------------------
 7249|       |      /* The XmlEncode() functions can never return 0 here.  That
 7250|       |       * error return happens if the code point passed in is either
 7251|       |       * negative or greater than or equal to 0x110000.  The
 7252|       |       * XmlCharRefNumber() functions will all return a number
 7253|       |       * strictly less than 0x110000 or a negative value if an error
 7254|       |       * occurred.  The negative value is intercepted above, so
 7255|       |       * XmlEncode() is never passed a value it might return an
 7256|       |       * error for.
 7257|       |       */
 7258|  1.15k|      if (! poolAppendChars(pool, buf, n)) {
  ------------------
  |  Branch (7258:11): [True: 0, False: 1.15k]
  ------------------
 7259|      0|        result = XML_ERROR_NO_MEMORY;
 7260|      0|        goto endEntityValue;
 7261|      0|      }
 7262|  1.15k|    } break;
 7263|  1.15k|    case XML_TOK_PARTIAL:
  ------------------
  |  |   56|     18|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  |  Branch (7263:5): [True: 18, False: 26.9k]
  ------------------
 7264|     18|      if (enc == parser->m_encoding)
  ------------------
  |  Branch (7264:11): [True: 18, False: 0]
  ------------------
 7265|     18|        parser->m_eventPtr = entityTextPtr;
 7266|     18|      result = XML_ERROR_INVALID_TOKEN;
 7267|     18|      goto endEntityValue;
 7268|      2|    case XML_TOK_INVALID:
  ------------------
  |  |   57|      2|#  define XML_TOK_INVALID 0
  ------------------
  |  Branch (7268:5): [True: 2, False: 26.9k]
  ------------------
 7269|      2|      if (enc == parser->m_encoding)
  ------------------
  |  Branch (7269:11): [True: 2, False: 0]
  ------------------
 7270|      2|        parser->m_eventPtr = next;
 7271|      2|      result = XML_ERROR_INVALID_TOKEN;
 7272|      2|      goto endEntityValue;
 7273|      0|    default:
  ------------------
  |  Branch (7273:5): [True: 0, False: 26.9k]
  ------------------
 7274|       |      /* This default case should be unnecessary -- all the tokens
 7275|       |       * that XmlEntityValueTok() can return have their own explicit
 7276|       |       * cases -- but should be retained for safety.  We do however
 7277|       |       * exclude it from the coverage statistics.
 7278|       |       *
 7279|       |       * LCOV_EXCL_START
 7280|       |       */
 7281|      0|      if (enc == parser->m_encoding)
  ------------------
  |  Branch (7281:11): [True: 0, False: 0]
  ------------------
 7282|      0|        parser->m_eventPtr = entityTextPtr;
 7283|      0|      result = XML_ERROR_UNEXPECTED_STATE;
 7284|      0|      goto endEntityValue;
 7285|       |      /* LCOV_EXCL_STOP */
 7286|  26.9k|    }
 7287|  24.4k|    entityTextPtr = next;
 7288|  24.4k|  }
 7289|  3.72k|endEntityValue:
 7290|  3.72k|#  ifdef XML_DTD
 7291|  3.72k|  parser->m_prologState.inEntityValue = oldInEntityValue;
 7292|  3.72k|#  endif /* XML_DTD */
 7293|       |  // If 'nextPtr' is given, it should be updated during the processing
 7294|  3.72k|  if (nextPtr != NULL) {
  ------------------
  |  Branch (7294:7): [True: 3.72k, False: 0]
  ------------------
 7295|  3.72k|    *nextPtr = next;
 7296|  3.72k|  }
 7297|  3.72k|  return result;
 7298|  2.53k|}
xmlparse.c:expat_realloc:
  987|  5.02k|expat_realloc(XML_Parser parser, void *ptr, size_t size, int sourceLine) {
  988|  5.02k|  assert(parser != NULL);
  ------------------
  |  Branch (988:3): [True: 0, False: 5.02k]
  |  Branch (988:3): [True: 5.02k, False: 0]
  ------------------
  989|       |
  990|  5.02k|  if (ptr == NULL) {
  ------------------
  |  Branch (990:7): [True: 1.08k, False: 3.93k]
  ------------------
  991|  1.08k|    return expat_malloc(parser, size, sourceLine);
  992|  1.08k|  }
  993|       |
  994|  3.93k|  if (size == 0) {
  ------------------
  |  Branch (994:7): [True: 0, False: 3.93k]
  ------------------
  995|      0|    expat_free(parser, ptr, sourceLine);
  996|      0|    return NULL;
  997|      0|  }
  998|       |
  999|  3.93k|  const XML_Parser rootParser = getRootParserOf(parser, NULL);
 1000|  3.93k|  assert(rootParser->m_parentParser == NULL);
  ------------------
  |  Branch (1000:3): [True: 0, False: 3.93k]
  |  Branch (1000:3): [True: 3.93k, False: 0]
  ------------------
 1001|       |
 1002|       |  // Extract original size (to the eyes of the caller) and the original
 1003|       |  // pointer returned by malloc/realloc
 1004|  3.93k|  void *mallocedPtr = (char *)ptr - EXPAT_MALLOC_PADDING - sizeof(size_t);
  ------------------
  |  |  124|  3.93k|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|  3.93k|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
 1005|  3.93k|  const size_t prevSize = *(size_t *)mallocedPtr;
 1006|       |
 1007|       |  // Classify upcoming change
 1008|  3.93k|  const bool isIncrease = (size > prevSize);
 1009|  3.93k|  const size_t absDiff
 1010|  3.93k|      = (size > prevSize) ? (size - prevSize) : (prevSize - size);
  ------------------
  |  Branch (1010:9): [True: 3.93k, False: 0]
  ------------------
 1011|       |
 1012|       |  // Ask for permission from accounting
 1013|  3.93k|  if (isIncrease) {
  ------------------
  |  Branch (1013:7): [True: 3.93k, False: 0]
  ------------------
 1014|  3.93k|    if (! expat_heap_increase_tolerable(rootParser, absDiff, sourceLine)) {
  ------------------
  |  Branch (1014:9): [True: 0, False: 3.93k]
  ------------------
 1015|      0|      return NULL; // i.e. signal violation as out-of-memory
 1016|      0|    }
 1017|  3.93k|  }
 1018|       |
 1019|       |  // Detect and prevent integer overflow
 1020|  3.93k|  if (size > SIZE_MAX - sizeof(size_t) - EXPAT_MALLOC_PADDING) {
  ------------------
  |  |  124|  3.93k|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|  3.93k|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
  |  Branch (1020:7): [True: 0, False: 3.93k]
  ------------------
 1021|      0|    return NULL;
 1022|      0|  }
 1023|       |
 1024|       |  // Actually allocate
 1025|  3.93k|  mallocedPtr = parser->m_mem.realloc_fcn(
 1026|  3.93k|      mallocedPtr, sizeof(size_t) + EXPAT_MALLOC_PADDING + size);
  ------------------
  |  |  124|  3.93k|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|  3.93k|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
 1027|       |
 1028|  3.93k|  if (mallocedPtr == NULL) {
  ------------------
  |  Branch (1028:7): [True: 0, False: 3.93k]
  ------------------
 1029|      0|    return NULL;
 1030|      0|  }
 1031|       |
 1032|       |  // Update accounting
 1033|  3.93k|  if (isIncrease) {
  ------------------
  |  Branch (1033:7): [True: 3.93k, False: 0]
  ------------------
 1034|  3.93k|    assert(SIZE_MAX - rootParser->m_alloc_tracker.bytesAllocated >= absDiff);
  ------------------
  |  Branch (1034:5): [True: 0, False: 3.93k]
  |  Branch (1034:5): [True: 3.93k, False: 0]
  ------------------
 1035|  3.93k|    rootParser->m_alloc_tracker.bytesAllocated += absDiff;
 1036|  3.93k|  } else { // i.e. decrease
 1037|      0|    assert(rootParser->m_alloc_tracker.bytesAllocated >= absDiff);
  ------------------
  |  Branch (1037:5): [True: 0, False: 0]
  |  Branch (1037:5): [True: 0, False: 0]
  ------------------
 1038|      0|    rootParser->m_alloc_tracker.bytesAllocated -= absDiff;
 1039|      0|  }
 1040|       |
 1041|       |  // Report as needed
 1042|  3.93k|  if (rootParser->m_alloc_tracker.debugLevel >= 2) {
  ------------------
  |  Branch (1042:7): [True: 0, False: 3.93k]
  ------------------
 1043|      0|    if (rootParser->m_alloc_tracker.bytesAllocated
  ------------------
  |  Branch (1043:9): [True: 0, False: 0]
  ------------------
 1044|      0|        > rootParser->m_alloc_tracker.peakBytesAllocated) {
 1045|      0|      rootParser->m_alloc_tracker.peakBytesAllocated
 1046|      0|          = rootParser->m_alloc_tracker.bytesAllocated;
 1047|      0|    }
 1048|      0|    expat_heap_stat(rootParser, isIncrease ? '+' : '-', absDiff,
  ------------------
  |  Branch (1048:33): [True: 0, False: 0]
  ------------------
 1049|      0|                    rootParser->m_alloc_tracker.bytesAllocated,
 1050|      0|                    rootParser->m_alloc_tracker.peakBytesAllocated, sourceLine);
 1051|      0|  }
 1052|       |
 1053|       |  // Update in-block recorded size
 1054|  3.93k|  *(size_t *)mallocedPtr = size;
 1055|       |
 1056|  3.93k|  return (char *)mallocedPtr + sizeof(size_t) + EXPAT_MALLOC_PADDING;
  ------------------
  |  |  124|  3.93k|#  define EXPAT_MALLOC_PADDING ((EXPAT_MALLOC_ALIGNMENT) - sizeof(size_t))
  |  |  ------------------
  |  |  |  |  123|  3.93k|#  define EXPAT_MALLOC_ALIGNMENT sizeof(union expat_align)
  |  |  ------------------
  ------------------
 1057|  3.93k|}
xmlparse.c:processEntity:
 6691|   704k|              enum EntityType type) {
 6692|   704k|  OPEN_INTERNAL_ENTITY *openEntity, **openEntityList;
 6693|   704k|  OPEN_INTERNAL_ENTITY **const freeEntityList = &parser->m_freeEntities;
 6694|   704k|  switch (type) {
 6695|   105k|  case ENTITY_INTERNAL:
  ------------------
  |  Branch (6695:3): [True: 105k, False: 598k]
  ------------------
 6696|   105k|    parser->m_processor = internalEntityProcessor;
 6697|   105k|    openEntityList = &parser->m_openInternalEntities;
 6698|   105k|    break;
 6699|   598k|  case ENTITY_ATTRIBUTE:
  ------------------
  |  Branch (6699:3): [True: 598k, False: 105k]
  ------------------
 6700|   598k|    openEntityList = &parser->m_openAttributeEntities;
 6701|   598k|    break;
 6702|      0|  case ENTITY_VALUE:
  ------------------
  |  Branch (6702:3): [True: 0, False: 704k]
  ------------------
 6703|      0|    openEntityList = &parser->m_openValueEntities;
 6704|      0|    break;
 6705|       |    /* default case serves merely as a safety net in case of a
 6706|       |     * wrong entityType. Therefore we exclude the following lines
 6707|       |     * from the test coverage.
 6708|       |     *
 6709|       |     * LCOV_EXCL_START
 6710|       |     */
 6711|      0|  default:
  ------------------
  |  Branch (6711:3): [True: 0, False: 704k]
  ------------------
 6712|       |    // Should not reach here
 6713|      0|    assert(0);
  ------------------
  |  Branch (6713:5): [Folded, False: 0]
  |  Branch (6713:5): [Folded, False: 0]
  ------------------
 6714|       |    /* LCOV_EXCL_STOP */
 6715|   704k|  }
 6716|       |
 6717|   704k|  if (*freeEntityList) {
  ------------------
  |  Branch (6717:7): [True: 702k, False: 2.13k]
  ------------------
 6718|   702k|    openEntity = *freeEntityList;
 6719|   702k|    *freeEntityList = openEntity->next;
 6720|   702k|  } else {
 6721|  2.13k|    openEntity = MALLOC(parser, sizeof(OPEN_INTERNAL_ENTITY));
  ------------------
  |  |  835|  2.13k|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 6722|  2.13k|    if (! openEntity)
  ------------------
  |  Branch (6722:9): [True: 0, False: 2.13k]
  ------------------
 6723|      0|      return XML_ERROR_NO_MEMORY;
 6724|  2.13k|  }
 6725|   704k|  entity->open = true;
 6726|   704k|  entity->hasMore = true;
 6727|   704k|#if XML_GE == 1
 6728|   704k|  entityTrackingOnOpen(parser, entity, __LINE__);
 6729|   704k|#endif
 6730|   704k|  entity->processed = 0;
 6731|   704k|  openEntity->next = *openEntityList;
 6732|   704k|  *openEntityList = openEntity;
 6733|   704k|  openEntity->entity = entity;
 6734|   704k|  openEntity->type = type;
 6735|   704k|  openEntity->startTagLevel = parser->m_tagLevel;
 6736|   704k|  openEntity->betweenDecl = betweenDecl;
 6737|   704k|  openEntity->internalEventPtr = NULL;
 6738|   704k|  openEntity->internalEventEndPtr = NULL;
 6739|       |
 6740|       |  // Only internal entities make use of the reenter flag
 6741|       |  // therefore no need to set it for other entity types
 6742|   704k|  if (type == ENTITY_INTERNAL) {
  ------------------
  |  Branch (6742:7): [True: 105k, False: 598k]
  ------------------
 6743|   105k|    triggerReenter(parser);
 6744|   105k|  }
 6745|   704k|  return XML_ERROR_NONE;
 6746|   704k|}
xmlparse.c:internalEntityProcessor:
 6750|   304k|                        const char **nextPtr) {
 6751|   304k|  UNUSED_P(s);
  ------------------
  |  |  101|   304k|#    define UNUSED_P(p) (void)p
  ------------------
 6752|   304k|  UNUSED_P(end);
  ------------------
  |  |  101|   304k|#    define UNUSED_P(p) (void)p
  ------------------
 6753|   304k|  UNUSED_P(nextPtr);
  ------------------
  |  |  101|   304k|#    define UNUSED_P(p) (void)p
  ------------------
 6754|   304k|  ENTITY *entity;
 6755|   304k|  const char *textStart, *textEnd;
 6756|   304k|  const char *next;
 6757|   304k|  enum XML_Error result;
 6758|   304k|  OPEN_INTERNAL_ENTITY *openEntity = parser->m_openInternalEntities;
 6759|   304k|  if (! openEntity)
  ------------------
  |  Branch (6759:7): [True: 0, False: 304k]
  ------------------
 6760|      0|    return XML_ERROR_UNEXPECTED_STATE;
 6761|       |
 6762|   304k|  entity = openEntity->entity;
 6763|       |
 6764|       |  // This will return early
 6765|   304k|  if (entity->hasMore) {
  ------------------
  |  Branch (6765:7): [True: 198k, False: 105k]
  ------------------
 6766|   198k|    textStart = ((const char *)entity->textPtr) + entity->processed;
 6767|   198k|    textEnd = (const char *)(entity->textPtr + entity->textLen);
 6768|       |    /* Set a safe default value in case 'next' does not get set */
 6769|   198k|    next = textStart;
 6770|       |
 6771|   198k|    if (entity->is_param) {
  ------------------
  |  Branch (6771:9): [True: 0, False: 198k]
  ------------------
 6772|      0|      int tok
 6773|      0|          = XmlPrologTok(parser->m_internalEncoding, textStart, textEnd, &next);
  ------------------
  |  |  226|      0|    XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |  223|      0|    (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
  |  |  ------------------
  ------------------
 6774|      0|      result = doProlog(parser, parser->m_internalEncoding, textStart, textEnd,
 6775|      0|                        tok, next, &next, XML_FALSE, XML_FALSE,
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
                                      tok, next, &next, XML_FALSE, XML_FALSE,
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6776|      0|                        XML_ACCOUNT_ENTITY_EXPANSION);
 6777|   198k|    } else {
 6778|   198k|      result = doContent(parser, openEntity->startTagLevel,
 6779|   198k|                         parser->m_internalEncoding, textStart, textEnd, &next,
 6780|   198k|                         XML_FALSE, XML_ACCOUNT_ENTITY_EXPANSION);
  ------------------
  |  |   64|   198k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 6781|   198k|    }
 6782|       |
 6783|   198k|    if (result != XML_ERROR_NONE)
  ------------------
  |  Branch (6783:9): [True: 93, False: 198k]
  ------------------
 6784|     93|      return result;
 6785|       |    // Check if entity is complete, if not, mark down how much of it is
 6786|       |    // processed
 6787|   198k|    if (textEnd != next
  ------------------
  |  Branch (6787:9): [True: 92.6k, False: 105k]
  ------------------
 6788|  92.6k|        && (parser->m_parsingStatus.parsing == XML_SUSPENDED
  ------------------
  |  Branch (6788:13): [True: 0, False: 92.6k]
  ------------------
 6789|  92.6k|            || (parser->m_parsingStatus.parsing == XML_PARSING
  ------------------
  |  Branch (6789:17): [True: 92.6k, False: 0]
  ------------------
 6790|  92.6k|                && parser->m_reenter))) {
  ------------------
  |  Branch (6790:20): [True: 92.6k, False: 0]
  ------------------
 6791|  92.6k|      entity->processed = next - (const char *)entity->textPtr;
 6792|  92.6k|      return result;
 6793|  92.6k|    }
 6794|       |
 6795|       |    // Entity is complete. We cannot close it here since we need to first
 6796|       |    // process its possible inner entities (which are added to the
 6797|       |    // m_openInternalEntities during doProlog or doContent calls above)
 6798|   105k|    entity->hasMore = false;
 6799|   105k|    if (! entity->is_param
  ------------------
  |  Branch (6799:9): [True: 105k, False: 0]
  ------------------
 6800|   105k|        && (openEntity->startTagLevel != parser->m_tagLevel)) {
  ------------------
  |  Branch (6800:12): [True: 3, False: 105k]
  ------------------
 6801|      3|      return XML_ERROR_ASYNC_ENTITY;
 6802|      3|    }
 6803|   105k|    triggerReenter(parser);
 6804|   105k|    return result;
 6805|   105k|  } // End of entity processing, "if" block will return here
 6806|       |
 6807|       |  // Remove fully processed openEntity from open entity list.
 6808|   105k|#if XML_GE == 1
 6809|   105k|  entityTrackingOnClose(parser, entity, __LINE__);
 6810|   105k|#endif
 6811|       |  // openEntity is m_openInternalEntities' head, as we set it at the start of
 6812|       |  // this function and we skipped doProlog and doContent calls with hasMore set
 6813|       |  // to false. This means we can directly remove the head of
 6814|       |  // m_openInternalEntities
 6815|   105k|  assert(parser->m_openInternalEntities == openEntity);
  ------------------
  |  Branch (6815:3): [True: 0, False: 105k]
  |  Branch (6815:3): [True: 105k, False: 0]
  ------------------
 6816|   105k|  entity->open = false;
 6817|   105k|  parser->m_openInternalEntities = parser->m_openInternalEntities->next;
 6818|       |
 6819|       |  /* put openEntity back in list of free instances */
 6820|   105k|  openEntity->next = parser->m_freeEntities;
 6821|   105k|  parser->m_freeEntities = openEntity;
 6822|       |
 6823|   105k|  if (parser->m_openInternalEntities == NULL) {
  ------------------
  |  Branch (6823:7): [True: 9.11k, False: 96.6k]
  ------------------
 6824|  9.11k|    parser->m_processor = entity->is_param ? prologProcessor : contentProcessor;
  ------------------
  |  Branch (6824:27): [True: 0, False: 9.11k]
  ------------------
 6825|  9.11k|  }
 6826|   105k|  triggerReenter(parser);
 6827|   105k|  return XML_ERROR_NONE;
 6828|   105k|}
xmlparse.c:triggerReenter:
 2617|   317k|triggerReenter(XML_Parser parser) {
 2618|   317k|  parser->m_reenter = XML_TRUE;
  ------------------
  |  |   63|   317k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 2619|   317k|}
xmlparse.c:entityTrackingOnOpen:
 9120|   704k|entityTrackingOnOpen(XML_Parser originParser, ENTITY *entity, int sourceLine) {
 9121|   704k|  const XML_Parser rootParser = getRootParserOf(originParser, NULL);
 9122|   704k|  assert(! rootParser->m_parentParser);
  ------------------
  |  Branch (9122:3): [True: 0, False: 704k]
  |  Branch (9122:3): [True: 704k, False: 0]
  ------------------
 9123|       |
 9124|   704k|  rootParser->m_entity_stats.countEverOpened++;
 9125|   704k|  rootParser->m_entity_stats.currentDepth++;
 9126|   704k|  if (rootParser->m_entity_stats.currentDepth
  ------------------
  |  Branch (9126:7): [True: 2.13k, False: 702k]
  ------------------
 9127|   704k|      > rootParser->m_entity_stats.maximumDepthSeen) {
 9128|  2.13k|    rootParser->m_entity_stats.maximumDepthSeen++;
 9129|  2.13k|  }
 9130|       |
 9131|   704k|  entityTrackingReportStats(rootParser, entity, "OPEN ", sourceLine);
 9132|   704k|}
xmlparse.c:entityTrackingReportStats:
 9086|  1.40M|                          const char *action, int sourceLine) {
 9087|  1.40M|  assert(! rootParser->m_parentParser);
  ------------------
  |  Branch (9087:3): [True: 0, False: 1.40M]
  |  Branch (9087:3): [True: 1.40M, False: 0]
  ------------------
 9088|  1.40M|  if (rootParser->m_entity_stats.debugLevel == 0u)
  ------------------
  |  Branch (9088:7): [True: 1.40M, False: 0]
  ------------------
 9089|  1.40M|    return;
 9090|       |
 9091|       |#  if defined(XML_UNICODE)
 9092|       |  const char *const entityName = "[..]";
 9093|       |#  else
 9094|      0|  const char *const entityName = entity->name;
 9095|      0|#  endif
 9096|       |
 9097|      0|  const bool limitingWanted = rootParser->m_entity_stats.debugLevel < 2;
 9098|      0|  const int maxLimitedDepth = 10; // somewhat arbitrary
 9099|      0|  const int candidateIndentDepth
 9100|      0|      = (int)rootParser->m_entity_stats.currentDepth - 1;
 9101|      0|  const bool limitingNeeded
 9102|      0|      = limitingWanted && (candidateIndentDepth > maxLimitedDepth);
  ------------------
  |  Branch (9102:9): [True: 0, False: 0]
  |  Branch (9102:27): [True: 0, False: 0]
  ------------------
 9103|      0|  const char *const ellipisOrEmpty = limitingNeeded ? " [..] " : "";
  ------------------
  |  Branch (9103:38): [True: 0, False: 0]
  ------------------
 9104|      0|  const int indentDepth
 9105|      0|      = limitingNeeded ? (maxLimitedDepth - /* make space for ellipis */ 2)
  ------------------
  |  Branch (9105:9): [True: 0, False: 0]
  ------------------
 9106|      0|                       : candidateIndentDepth;
 9107|       |
 9108|      0|  fprintf(
 9109|      0|      stderr,
 9110|      0|      "expat: Entities(%p): Count %9u, depth %2u/%2u %*s%s%s%s; %s length " EXPAT_FMT_SIZE_T(
 9111|      0|          "") " (xmlparse.c:%d)\n",
 9112|      0|      (void *)rootParser, rootParser->m_entity_stats.countEverOpened,
 9113|      0|      rootParser->m_entity_stats.currentDepth,
 9114|      0|      rootParser->m_entity_stats.maximumDepthSeen, indentDepth * 2, "",
 9115|      0|      ellipisOrEmpty, entity->is_param ? "%" : "&", entityName, action,
  ------------------
  |  Branch (9115:23): [True: 0, False: 0]
  ------------------
 9116|      0|      entity->textLen, sourceLine);
 9117|      0|}
xmlparse.c:entityTrackingOnClose:
 9135|   704k|entityTrackingOnClose(XML_Parser originParser, ENTITY *entity, int sourceLine) {
 9136|   704k|  const XML_Parser rootParser = getRootParserOf(originParser, NULL);
 9137|   704k|  assert(! rootParser->m_parentParser);
  ------------------
  |  Branch (9137:3): [True: 0, False: 704k]
  |  Branch (9137:3): [True: 704k, False: 0]
  ------------------
 9138|       |
 9139|   704k|  entityTrackingReportStats(rootParser, entity, "CLOSE", sourceLine);
 9140|   704k|  rootParser->m_entity_stats.currentDepth--;
 9141|   704k|}
xmlparse.c:reportProcessingInstruction:
 7424|  7.48k|                            const char *start, const char *end) {
 7425|  7.48k|  const XML_Char *target;
 7426|  7.48k|  XML_Char *data;
 7427|  7.48k|  const char *tem;
 7428|  7.48k|  if (! parser->m_processingInstructionHandler) {
  ------------------
  |  Branch (7428:7): [True: 7.48k, False: 0]
  ------------------
 7429|  7.48k|    if (parser->m_defaultHandler)
  ------------------
  |  Branch (7429:9): [True: 0, False: 7.48k]
  ------------------
 7430|      0|      reportDefault(parser, enc, start, end);
 7431|  7.48k|    return 1;
 7432|  7.48k|  }
 7433|      0|  start += enc->minBytesPerChar * 2;
 7434|      0|  tem = start + XmlNameLength(enc, start);
  ------------------
  |  |  256|      0|#  define XmlNameLength(enc, ptr) (((enc)->nameLength)(enc, ptr))
  ------------------
 7435|      0|  target = poolStoreString(&parser->m_tempPool, enc, start, tem);
 7436|      0|  if (! target)
  ------------------
  |  Branch (7436:7): [True: 0, False: 0]
  ------------------
 7437|      0|    return 0;
 7438|      0|  poolFinish(&parser->m_tempPool);
  ------------------
  |  |  676|      0|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 7439|      0|  data = poolStoreString(&parser->m_tempPool, enc, XmlSkipS(enc, tem),
  ------------------
  |  |  258|      0|#  define XmlSkipS(enc, ptr) (((enc)->skipS)(enc, ptr))
  ------------------
 7440|      0|                         end - enc->minBytesPerChar * 2);
 7441|      0|  if (! data)
  ------------------
  |  Branch (7441:7): [True: 0, False: 0]
  ------------------
 7442|      0|    return 0;
 7443|      0|  normalizeLines(data);
 7444|      0|  beforeHandler(parser);
 7445|      0|  parser->m_processingInstructionHandler(parser->m_handlerArg, target, data);
 7446|      0|  afterHandler(parser);
 7447|      0|  poolClear(&parser->m_tempPool);
 7448|      0|  return 1;
 7449|      0|}
xmlparse.c:reportComment:
 7453|  1.52k|              const char *end) {
 7454|  1.52k|  XML_Char *data;
 7455|  1.52k|  if (! parser->m_commentHandler) {
  ------------------
  |  Branch (7455:7): [True: 1.52k, False: 0]
  ------------------
 7456|  1.52k|    if (parser->m_defaultHandler)
  ------------------
  |  Branch (7456:9): [True: 0, False: 1.52k]
  ------------------
 7457|      0|      reportDefault(parser, enc, start, end);
 7458|  1.52k|    return 1;
 7459|  1.52k|  }
 7460|      0|  data = poolStoreString(&parser->m_tempPool, enc,
 7461|      0|                         start + enc->minBytesPerChar * 4,
 7462|      0|                         end - enc->minBytesPerChar * 3);
 7463|      0|  if (! data)
  ------------------
  |  Branch (7463:7): [True: 0, False: 0]
  ------------------
 7464|      0|    return 0;
 7465|      0|  normalizeLines(data);
 7466|      0|  beforeHandler(parser);
 7467|      0|  parser->m_commentHandler(parser->m_handlerArg, data);
 7468|      0|  afterHandler(parser);
 7469|      0|  poolClear(&parser->m_tempPool);
 7470|      0|  return 1;
 7471|      0|}
xmlparse.c:destroyBindings:
 1853|  52.1k|destroyBindings(BINDING *bindings, XML_Parser parser) {
 1854|  68.6k|  for (;;) {
 1855|  68.6k|    BINDING *b = bindings;
 1856|  68.6k|    if (! b)
  ------------------
  |  Branch (1856:9): [True: 52.1k, False: 16.5k]
  ------------------
 1857|  52.1k|      break;
 1858|  16.5k|    bindings = b->nextTagBinding;
 1859|  16.5k|    FREE(parser, b->uri);
  ------------------
  |  |  837|  16.5k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1860|  16.5k|    FREE(parser, b);
  ------------------
  |  |  837|  16.5k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 1861|  16.5k|  }
 1862|  52.1k|}
xmlparse.c:ENTROPY_DEBUG:
 1111|  12.0k|ENTROPY_DEBUG(const char *label, struct sipkey entropy_128) {
 1112|  12.0k|  if (getDebugLevel("EXPAT_ENTROPY_DEBUG", 0) >= 1u) {
  ------------------
  |  Branch (1112:7): [True: 0, False: 12.0k]
  ------------------
 1113|       |    fprintf(stderr,
 1114|      0|            "expat: Entropy: %s --> [0x" EXPAT_FMT_LLX(
 1115|      0|                "016") ", 0x" EXPAT_FMT_LLX("016") "] (16 bytes)\n",
 1116|      0|            label, (unsigned long long)entropy_128.k[0],
 1117|      0|            (unsigned long long)entropy_128.k[1]);
 1118|      0|  }
 1119|  12.0k|  return entropy_128;
 1120|  12.0k|}
xmlparse.c:startParsing:
 1276|  12.0k|startParsing(XML_Parser parser) {
 1277|       |  /* hash functions must be initialized before setContext() is called */
 1278|  12.0k|  if (parser->m_hash_secret_salt_set != XML_TRUE) {
  ------------------
  |  |   63|  12.0k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
  |  Branch (1278:7): [True: 12.0k, False: 0]
  ------------------
 1279|  12.0k|    parser->m_hash_secret_salt_128 = generate_hash_secret_salt();
 1280|  12.0k|    parser->m_hash_secret_salt_set = XML_TRUE;
  ------------------
  |  |   63|  12.0k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 1281|  12.0k|  }
 1282|  12.0k|  if (parser->m_ns) {
  ------------------
  |  Branch (1282:7): [True: 4.76k, False: 7.30k]
  ------------------
 1283|       |    /* implicit context only set for root parser, since child
 1284|       |       parsers (i.e. external entity parsers) will inherit it
 1285|       |    */
 1286|  4.76k|    return setContext(parser, implicitContext);
 1287|  4.76k|  }
 1288|  7.30k|  return XML_TRUE;
  ------------------
  |  |   63|  7.30k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 1289|  12.0k|}
xmlparse.c:generate_hash_secret_salt:
 1123|  12.0k|generate_hash_secret_salt(void) {
 1124|  12.0k|  struct sipkey entropy;
 1125|       |
 1126|       |  /* "Failproof" high quality providers: */
 1127|  12.0k|#if defined(HAVE_ARC4RANDOM_BUF)
 1128|  12.0k|  writeRandomBytes_arc4random_buf(&entropy, sizeof(entropy));
 1129|  12.0k|  return ENTROPY_DEBUG("arc4random_buf", entropy);
 1130|       |#elif defined(HAVE_ARC4RANDOM)
 1131|       |  writeRandomBytes_arc4random(&entropy, sizeof(entropy));
 1132|       |  return ENTROPY_DEBUG("arc4random", entropy);
 1133|       |#else
 1134|       |  /* Try high quality providers first .. */
 1135|       |#  ifdef _WIN32
 1136|       |  if (writeRandomBytes_rand_s(&entropy, sizeof(entropy))) {
 1137|       |    return ENTROPY_DEBUG("rand_s", entropy);
 1138|       |  }
 1139|       |#  elif defined(HAVE_GETENTROPY)
 1140|       |  if (writeRandomBytes_getentropy(&entropy, sizeof(entropy))) {
 1141|       |    return ENTROPY_DEBUG("getentropy", entropy);
 1142|       |  }
 1143|       |  errno = 0;
 1144|       |#  elif defined(HAVE_GETRANDOM) || defined(HAVE_SYSCALL_GETRANDOM)
 1145|       |  if (writeRandomBytes_getrandom_nonblock(&entropy, sizeof(entropy))) {
 1146|       |    return ENTROPY_DEBUG("getrandom", entropy);
 1147|       |  }
 1148|       |#  endif
 1149|       |#  if ! defined(_WIN32) && defined(XML_DEV_URANDOM)
 1150|       |  if (writeRandomBytes_dev_urandom(&entropy, sizeof(entropy))) {
 1151|       |    return ENTROPY_DEBUG("/dev/urandom", entropy);
 1152|       |  }
 1153|       |#  endif /* ! defined(_WIN32) && defined(XML_DEV_URANDOM) */
 1154|       |  /* .. and self-made low quality for backup: */
 1155|       |
 1156|       |  entropy.k[0] = 0;
 1157|       |  entropy.k[1] = gather_time_entropy();
 1158|       |#  if ! defined(__wasi__)
 1159|       |  /* Process ID is 0 bits entropy if attacker has local access */
 1160|       |  entropy.k[1] ^= getpid();
 1161|       |#  endif
 1162|       |
 1163|       |  /* Factors are 2^31-1 and 2^61-1 (Mersenne primes M31 and M61) */
 1164|       |  if (sizeof(unsigned long) == 4) {
 1165|       |    entropy.k[1] *= 2147483647;
 1166|       |    return ENTROPY_DEBUG("fallback(4)", entropy);
 1167|       |  } else {
 1168|       |    entropy.k[1] *= 2305843009213693951ULL;
 1169|       |    return ENTROPY_DEBUG("fallback(8)", entropy);
 1170|       |  }
 1171|       |#endif
 1172|  12.0k|}
xmlparse.c:callProcessor:
 1212|  12.0k|              const char **endPtr) {
 1213|  12.0k|  const size_t have_now = EXPAT_SAFE_PTR_DIFF(end, start);
  ------------------
  |  |  229|  12.0k|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 12.0k, False: 0]
  |  |  |  Branch (229:44): [True: 12.0k, False: 0]
  |  |  ------------------
  ------------------
 1214|       |
 1215|  12.0k|  if (parser->m_reparseDeferralEnabled
  ------------------
  |  Branch (1215:7): [True: 12.0k, False: 0]
  ------------------
 1216|  12.0k|      && ! parser->m_parsingStatus.finalBuffer) {
  ------------------
  |  Branch (1216:10): [True: 0, False: 12.0k]
  ------------------
 1217|       |    // Heuristic: don't try to parse a partial token again until the amount of
 1218|       |    // available data has increased significantly.
 1219|      0|    const size_t had_before = parser->m_partialTokenBytesBefore;
 1220|       |    // ...but *do* try anyway if we're close to causing a reallocation.
 1221|      0|    size_t available_buffer
 1222|      0|        = EXPAT_SAFE_PTR_DIFF(parser->m_bufferPtr, parser->m_buffer);
  ------------------
  |  |  229|      0|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 0, False: 0]
  |  |  |  Branch (229:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1223|      0|#if XML_CONTEXT_BYTES > 0
 1224|      0|    available_buffer -= EXPAT_MIN(available_buffer, XML_CONTEXT_BYTES);
  ------------------
  |  |  231|      0|#define EXPAT_MIN(a, b) (((a) < (b)) ? (a) : (b))
  |  |  ------------------
  |  |  |  Branch (231:26): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1225|      0|#endif
 1226|      0|    available_buffer
 1227|      0|        += EXPAT_SAFE_PTR_DIFF(parser->m_bufferLim, parser->m_bufferEnd);
  ------------------
  |  |  229|      0|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 0, False: 0]
  |  |  |  Branch (229:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1228|       |    // m_lastBufferRequestSize is never assigned a value < 0, so the cast is ok
 1229|      0|    const bool enough
 1230|      0|        = (have_now >= 2 * had_before)
  ------------------
  |  Branch (1230:11): [True: 0, False: 0]
  ------------------
 1231|      0|          || ((size_t)parser->m_lastBufferRequestSize > available_buffer);
  ------------------
  |  Branch (1231:14): [True: 0, False: 0]
  ------------------
 1232|       |
 1233|      0|    if (! enough) {
  ------------------
  |  Branch (1233:9): [True: 0, False: 0]
  ------------------
 1234|      0|      *endPtr = start; // callers may expect this to be set
 1235|      0|      return XML_ERROR_NONE;
 1236|      0|    }
 1237|      0|  }
 1238|       |#if defined(XML_TESTING)
 1239|       |  g_bytesScanned += (unsigned)have_now;
 1240|       |#endif
 1241|       |  // Run in a loop to eliminate dangerous recursion depths
 1242|  12.0k|  enum XML_Error ret;
 1243|  12.0k|  *endPtr = start;
 1244|   325k|  while (1) {
  ------------------
  |  Branch (1244:10): [True: 325k, Folded]
  ------------------
 1245|       |    // Use endPtr as the new start in each iteration, since it will
 1246|       |    // be set to the next start point by m_processor.
 1247|   325k|    ret = parser->m_processor(parser, *endPtr, end, endPtr);
 1248|       |
 1249|       |    // Make parsing status (and in particular XML_SUSPENDED) take
 1250|       |    // precedence over re-enter flag when they disagree
 1251|   325k|    if (parser->m_parsingStatus.parsing != XML_PARSING) {
  ------------------
  |  Branch (1251:9): [True: 0, False: 325k]
  ------------------
 1252|      0|      parser->m_reenter = XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 1253|      0|    }
 1254|       |
 1255|   325k|    if (! parser->m_reenter) {
  ------------------
  |  Branch (1255:9): [True: 12.0k, False: 313k]
  ------------------
 1256|  12.0k|      break;
 1257|  12.0k|    }
 1258|       |
 1259|   313k|    parser->m_reenter = XML_FALSE;
  ------------------
  |  |   64|   313k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 1260|   313k|    if (ret != XML_ERROR_NONE)
  ------------------
  |  Branch (1260:9): [True: 3, False: 313k]
  ------------------
 1261|      3|      return ret;
 1262|   313k|  }
 1263|       |
 1264|  12.0k|  if (ret == XML_ERROR_NONE) {
  ------------------
  |  Branch (1264:7): [True: 251, False: 11.8k]
  ------------------
 1265|       |    // if we consumed nothing, remember what we had on this parse attempt.
 1266|    251|    if (*endPtr == start) {
  ------------------
  |  Branch (1266:9): [True: 0, False: 251]
  ------------------
 1267|      0|      parser->m_partialTokenBytesBefore = have_now;
 1268|    251|    } else {
 1269|    251|      parser->m_partialTokenBytesBefore = 0;
 1270|    251|    }
 1271|    251|  }
 1272|  12.0k|  return ret;
 1273|  12.0k|}
xmlparse.c:setParserBuffer:
 2500|  12.0k|setParserBuffer(XML_Parser parser, char *newBuf, int newBufSize, int keep) {
 2501|  12.0k|  parser->m_bufferLim = newBuf + newBufSize;
 2502|  12.0k|  if (parser->m_bufferPtr) {
  ------------------
  |  Branch (2502:7): [True: 0, False: 12.0k]
  ------------------
 2503|      0|    const int parsing
 2504|      0|        = (int)EXPAT_SAFE_PTR_DIFF(parser->m_bufferEnd, parser->m_bufferPtr);
  ------------------
  |  |  229|      0|#define EXPAT_SAFE_PTR_DIFF(p, q) (((p) && (q)) ? ((p) - (q)) : 0)
  |  |  ------------------
  |  |  |  Branch (229:37): [True: 0, False: 0]
  |  |  |  Branch (229:44): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2505|      0|    memcpy(newBuf, parser->m_bufferPtr - keep, parsing + keep);
 2506|       |    // NOTE: We are avoiding FREE(..) here because parser->m_buffer
 2507|       |    //       is not being allocated with MALLOC(..) but with plain
 2508|       |    //       .malloc_fcn(..).
 2509|      0|    parser->m_mem.free_fcn(parser->m_buffer);
 2510|      0|    parser->m_buffer = newBuf;
 2511|      0|    parser->m_bufferEnd = newBuf + parsing + keep;
 2512|      0|    parser->m_bufferPtr = newBuf + keep;
 2513|  12.0k|  } else {
 2514|       |    /* This must be a brand new buffer with no data in it yet */
 2515|  12.0k|    parser->m_buffer = newBuf;
 2516|  12.0k|    parser->m_bufferEnd = newBuf;
 2517|  12.0k|    parser->m_bufferPtr = newBuf;
 2518|  12.0k|  }
 2519|  12.0k|}
xmlparse.c:setContext:
 7771|  4.76k|setContext(XML_Parser parser, const XML_Char *context) {
 7772|  4.76k|  if (context == NULL) {
  ------------------
  |  Branch (7772:7): [True: 0, False: 4.76k]
  ------------------
 7773|      0|    return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7774|      0|  }
 7775|       |
 7776|  4.76k|  DTD *const dtd = parser->m_dtd; /* save one level of indirection */
 7777|  4.76k|  const XML_Char *s = context;
 7778|       |
 7779|  23.8k|  while (*context != XML_T('\0')) {
  ------------------
  |  |  220|  23.8k|#  define XML_T(x) x
  ------------------
  |  Branch (7779:10): [True: 19.0k, False: 4.76k]
  ------------------
 7780|  19.0k|    if (*s == CONTEXT_SEP || *s == XML_T('\0')) {
  ------------------
  |  | 7682|  19.0k|#define CONTEXT_SEP XML_T(ASCII_FF)
  |  |  ------------------
  |  |  |  |  220|  38.0k|#  define XML_T(x) x
  |  |  ------------------
  ------------------
                  if (*s == CONTEXT_SEP || *s == XML_T('\0')) {
  ------------------
  |  |  220|  19.0k|#  define XML_T(x) x
  ------------------
  |  Branch (7780:9): [True: 0, False: 19.0k]
  |  Branch (7780:30): [True: 0, False: 19.0k]
  ------------------
 7781|      0|      ENTITY *e;
 7782|      0|      if (! poolAppendChar(&parser->m_tempPool, XML_T('\0')))
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
  |  Branch (7782:11): [True: 0, False: 0]
  ------------------
 7783|      0|        return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7784|      0|      e = (ENTITY *)lookup(parser, &dtd->generalEntities,
 7785|      0|                           poolStart(&parser->m_tempPool), 0);
  ------------------
  |  |  671|      0|#define poolStart(pool) ((pool)->start)
  ------------------
 7786|      0|      if (e)
  ------------------
  |  Branch (7786:11): [True: 0, False: 0]
  ------------------
 7787|      0|        e->open = true;
 7788|      0|      if (*s != XML_T('\0'))
  ------------------
  |  |  220|      0|#  define XML_T(x) x
  ------------------
  |  Branch (7788:11): [True: 0, False: 0]
  ------------------
 7789|      0|        s++;
 7790|      0|      context = s;
 7791|      0|      poolDiscard(&parser->m_tempPool);
  ------------------
  |  |  675|      0|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 7792|  19.0k|    } else if (*s == XML_T(ASCII_EQUALS)) {
  ------------------
  |  |  220|  19.0k|#  define XML_T(x) x
  ------------------
  |  Branch (7792:16): [True: 4.76k, False: 14.2k]
  ------------------
 7793|  4.76k|      PREFIX *prefix;
 7794|  4.76k|      if (poolLength(&parser->m_tempPool) == 0)
  ------------------
  |  |  672|  4.76k|#define poolLength(pool) ((pool)->ptr - (pool)->start)
  ------------------
  |  Branch (7794:11): [True: 0, False: 4.76k]
  ------------------
 7795|      0|        prefix = &dtd->defaultPrefix;
 7796|  4.76k|      else {
 7797|  4.76k|        if (! poolAppendChar(&parser->m_tempPool, XML_T('\0')))
  ------------------
  |  |  220|  4.76k|#  define XML_T(x) x
  ------------------
  |  Branch (7797:13): [True: 0, False: 4.76k]
  ------------------
 7798|      0|          return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7799|  4.76k|        const XML_Char *const prefixName = poolCopyStringNoFinish(
 7800|  4.76k|            &dtd->pool, poolStart(&parser->m_tempPool));
  ------------------
  |  |  671|  4.76k|#define poolStart(pool) ((pool)->start)
  ------------------
 7801|  4.76k|        if (! prefixName) {
  ------------------
  |  Branch (7801:13): [True: 0, False: 4.76k]
  ------------------
 7802|      0|          return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7803|      0|        }
 7804|       |
 7805|  4.76k|        prefix = (PREFIX *)lookup(parser, &dtd->prefixes, prefixName,
 7806|  4.76k|                                  sizeof(PREFIX));
 7807|       |
 7808|  4.76k|        const bool prefixNameUsed = prefix && prefix->name == prefixName;
  ------------------
  |  Branch (7808:37): [True: 4.76k, False: 0]
  |  Branch (7808:47): [True: 4.76k, False: 0]
  ------------------
 7809|  4.76k|        if (prefixNameUsed)
  ------------------
  |  Branch (7809:13): [True: 4.76k, False: 0]
  ------------------
 7810|  4.76k|          poolFinish(&dtd->pool);
  ------------------
  |  |  676|  4.76k|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 7811|      0|        else
 7812|      0|          poolDiscard(&dtd->pool);
  ------------------
  |  |  675|      0|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 7813|       |
 7814|  4.76k|        if (! prefix)
  ------------------
  |  Branch (7814:13): [True: 0, False: 4.76k]
  ------------------
 7815|      0|          return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7816|       |
 7817|  4.76k|        poolDiscard(&parser->m_tempPool);
  ------------------
  |  |  675|  4.76k|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 7818|  4.76k|      }
 7819|   176k|      for (context = s + 1; *context != CONTEXT_SEP && *context != XML_T('\0');
  ------------------
  |  | 7682|   176k|#define CONTEXT_SEP XML_T(ASCII_FF)
  |  |  ------------------
  |  |  |  |  220|   352k|#  define XML_T(x) x
  |  |  ------------------
  ------------------
                    for (context = s + 1; *context != CONTEXT_SEP && *context != XML_T('\0');
  ------------------
  |  |  220|   176k|#  define XML_T(x) x
  ------------------
  |  Branch (7819:29): [True: 176k, False: 0]
  |  Branch (7819:56): [True: 171k, False: 4.76k]
  ------------------
 7820|   171k|           context++)
 7821|   171k|        if (! poolAppendChar(&parser->m_tempPool, *context))
  ------------------
  |  Branch (7821:13): [True: 0, False: 171k]
  ------------------
 7822|      0|          return XML_FALSE;
  ------------------
  |  |   64|  4.76k|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7823|  4.76k|      if (! poolAppendChar(&parser->m_tempPool, XML_T('\0')))
  ------------------
  |  |  220|  4.76k|#  define XML_T(x) x
  ------------------
  |  Branch (7823:11): [True: 0, False: 4.76k]
  ------------------
 7824|      0|        return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7825|  4.76k|      if (addBinding(parser, prefix, NULL, poolStart(&parser->m_tempPool),
  ------------------
  |  |  671|  4.76k|#define poolStart(pool) ((pool)->start)
  ------------------
  |  Branch (7825:11): [True: 0, False: 4.76k]
  ------------------
 7826|  4.76k|                     &parser->m_inheritedBindings)
 7827|  4.76k|          != XML_ERROR_NONE)
 7828|      0|        return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7829|  4.76k|      poolDiscard(&parser->m_tempPool);
  ------------------
  |  |  675|  4.76k|#define poolDiscard(pool) ((pool)->ptr = (pool)->start)
  ------------------
 7830|  4.76k|      if (*context != XML_T('\0'))
  ------------------
  |  |  220|  4.76k|#  define XML_T(x) x
  ------------------
  |  Branch (7830:11): [True: 0, False: 4.76k]
  ------------------
 7831|      0|        ++context;
 7832|  4.76k|      s = context;
 7833|  14.2k|    } else {
 7834|  14.2k|      if (! poolAppendChar(&parser->m_tempPool, *s))
  ------------------
  |  Branch (7834:11): [True: 0, False: 14.2k]
  ------------------
 7835|      0|        return XML_FALSE;
  ------------------
  |  |   64|      0|#  define XML_FALSE ((XML_Bool)0)
  ------------------
 7836|  14.2k|      s++;
 7837|  14.2k|    }
 7838|  19.0k|  }
 7839|  4.76k|  return XML_TRUE;
  ------------------
  |  |   63|  4.76k|#  define XML_TRUE ((XML_Bool)1)
  ------------------
 7840|  4.76k|}
xmlparse.c:poolCopyStringNoFinish:
 8477|  4.76k|poolCopyStringNoFinish(STRING_POOL *pool, const XML_Char *s) {
 8478|  4.76k|  const XML_Char *const original = s;
 8479|  19.0k|  do {
 8480|  19.0k|    if (! poolAppendChar(pool, *s)) {
  ------------------
  |  Branch (8480:9): [True: 0, False: 19.0k]
  ------------------
 8481|       |      // Revert any previously successful advancement
 8482|      0|      const ptrdiff_t advancedBy = s - original;
 8483|      0|      if (advancedBy > 0)
  ------------------
  |  Branch (8483:11): [True: 0, False: 0]
  ------------------
 8484|      0|        pool->ptr -= advancedBy;
 8485|      0|      return NULL;
 8486|      0|    }
 8487|  19.0k|  } while (*s++);
  ------------------
  |  Branch (8487:12): [True: 14.2k, False: 4.76k]
  ------------------
 8488|  4.76k|  return pool->start;
 8489|  4.76k|}
xmlparse.c:hashTableDestroy:
 8371|  75.7k|hashTableDestroy(HASH_TABLE *table) {
 8372|  75.7k|  size_t i;
 8373|  1.27M|  for (i = 0; i < table->size; i++)
  ------------------
  |  Branch (8373:15): [True: 1.19M, False: 75.7k]
  ------------------
 8374|  1.19M|    FREE(table->parser, table->v[i]);
  ------------------
  |  |  837|  1.19M|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 8375|  75.7k|  FREE(table->parser, table->v);
  ------------------
  |  |  837|  75.7k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 8376|  75.7k|}
xmlparse.c:dtdDestroy:
 7939|  12.0k|dtdDestroy(DTD *p, XML_Bool isDocEntity, XML_Parser parser) {
 7940|  12.0k|  HASH_TABLE_ITER iter;
 7941|  12.0k|  hashTableIterInit(&iter, &(p->elementTypes));
 7942|  27.4k|  for (;;) {
 7943|  27.4k|    ELEMENT_TYPE *e = (ELEMENT_TYPE *)hashTableIterNext(&iter);
 7944|  27.4k|    if (! e)
  ------------------
  |  Branch (7944:9): [True: 12.0k, False: 15.3k]
  ------------------
 7945|  12.0k|      break;
 7946|  15.3k|    hashTableDestroy(&(e->defaultAttForName));
 7947|  15.3k|    FREE(parser, e->defaultAtts);
  ------------------
  |  |  837|  15.3k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 7948|  15.3k|  }
 7949|  12.0k|  hashTableDestroy(&(p->generalEntities));
 7950|  12.0k|#ifdef XML_DTD
 7951|  12.0k|  hashTableDestroy(&(p->paramEntities));
 7952|  12.0k|#endif /* XML_DTD */
 7953|  12.0k|  hashTableDestroy(&(p->elementTypes));
 7954|  12.0k|  hashTableDestroy(&(p->attributeIds));
 7955|  12.0k|  hashTableDestroy(&(p->prefixes));
 7956|  12.0k|  poolDestroy(&(p->pool));
 7957|  12.0k|  poolDestroy(&(p->entityValuePool));
 7958|  12.0k|  if (isDocEntity) {
  ------------------
  |  Branch (7958:7): [True: 12.0k, False: 0]
  ------------------
 7959|  12.0k|    FREE(parser, p->scaffIndex);
  ------------------
  |  |  837|  12.0k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 7960|  12.0k|    FREE(parser, p->scaffold);
  ------------------
  |  |  837|  12.0k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 7961|  12.0k|  }
 7962|  12.0k|  FREE(parser, p);
  ------------------
  |  |  837|  12.0k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 7963|  12.0k|}
xmlparse.c:poolClear:
 8414|  60.7k|poolClear(STRING_POOL *pool) {
 8415|  60.7k|  if (! pool->freeBlocks)
  ------------------
  |  Branch (8415:7): [True: 45.5k, False: 15.1k]
  ------------------
 8416|  45.5k|    pool->freeBlocks = pool->blocks;
 8417|  15.1k|  else {
 8418|  15.1k|    BLOCK *p = pool->blocks;
 8419|  16.0k|    while (p) {
  ------------------
  |  Branch (8419:12): [True: 934, False: 15.1k]
  ------------------
 8420|    934|      BLOCK *tem = p->next;
 8421|    934|      p->next = pool->freeBlocks;
 8422|    934|      pool->freeBlocks = p;
 8423|    934|      p = tem;
 8424|    934|    }
 8425|  15.1k|  }
 8426|  60.7k|  pool->blocks = NULL;
 8427|  60.7k|  pool->start = NULL;
 8428|  60.7k|  pool->ptr = NULL;
 8429|       |  pool->end = NULL;
 8430|  60.7k|}
xmlparse.c:poolDestroy:
 8433|  48.2k|poolDestroy(STRING_POOL *pool) {
 8434|  48.2k|  BLOCK *p = pool->blocks;
 8435|  63.6k|  while (p) {
  ------------------
  |  Branch (8435:10): [True: 15.3k, False: 48.2k]
  ------------------
 8436|  15.3k|    BLOCK *tem = p->next;
 8437|  15.3k|    FREE(pool->parser, p);
  ------------------
  |  |  837|  15.3k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 8438|  15.3k|    p = tem;
 8439|  15.3k|  }
 8440|  48.2k|  p = pool->freeBlocks;
 8441|  53.1k|  while (p) {
  ------------------
  |  Branch (8441:10): [True: 4.88k, False: 48.2k]
  ------------------
 8442|  4.88k|    BLOCK *tem = p->next;
 8443|  4.88k|    FREE(pool->parser, p);
  ------------------
  |  |  837|  4.88k|#  define FREE(parser, p) (expat_free((parser), (p), __LINE__))
  ------------------
 8444|  4.88k|    p = tem;
 8445|  4.88k|  }
 8446|  48.2k|}
xmlparse.c:poolCopyString:
 8466|  14.1k|poolCopyString(STRING_POOL *pool, const XML_Char *s) {
 8467|  14.1k|  if (! poolAppendChars(pool, s, xcslen(s) + /*null terminator*/ 1))
  ------------------
  |  Branch (8467:7): [True: 0, False: 14.1k]
  ------------------
 8468|      0|    return NULL;
 8469|  14.1k|  s = pool->start;
 8470|  14.1k|  poolFinish(pool);
  ------------------
  |  |  676|  14.1k|#define poolFinish(pool) ((pool)->start = (pool)->ptr)
  ------------------
 8471|  14.1k|  return s;
 8472|  14.1k|}
xmlparse.c:copyString:
 8912|  12.0k|copyString(const XML_Char *s, XML_Parser parser) {
 8913|       |  /* First determine how long the string is */
 8914|  12.0k|  const size_t charsRequired = xcslen(s) + /*null terminator*/ 1;
 8915|       |
 8916|       |  /* Detect and prevent integer overflow */
 8917|  12.0k|  if (charsRequired > SIZE_MAX / sizeof(XML_Char))
  ------------------
  |  Branch (8917:7): [True: 0, False: 12.0k]
  ------------------
 8918|      0|    return NULL;
 8919|       |
 8920|  12.0k|  const size_t bytesRequired = charsRequired * sizeof(XML_Char);
 8921|       |
 8922|       |  /* Now allocate space for the copy */
 8923|  12.0k|  XML_Char *const result = MALLOC(parser, bytesRequired);
  ------------------
  |  |  835|  12.0k|#  define MALLOC(parser, s) (expat_malloc((parser), (s), __LINE__))
  ------------------
 8924|       |
 8925|  12.0k|  if (result == NULL)
  ------------------
  |  Branch (8925:7): [True: 0, False: 12.0k]
  ------------------
 8926|      0|    return NULL;
 8927|       |
 8928|       |  /* Copy the original into place */
 8929|  12.0k|  memcpy(result, s, bytesRequired);
 8930|       |
 8931|  12.0k|  return result;
 8932|  12.0k|}
xmlparse.c:getRootParserOf:
 9146|  19.2M|getRootParserOf(XML_Parser parser, unsigned int *outLevelDiff) {
 9147|  19.2M|  XML_Parser rootParser = parser;
 9148|  19.2M|  unsigned int stepsTakenUpwards = 0;
 9149|  19.2M|  while (rootParser->m_parentParser) {
  ------------------
  |  Branch (9149:10): [True: 0, False: 19.2M]
  ------------------
 9150|      0|    rootParser = rootParser->m_parentParser;
 9151|      0|    stepsTakenUpwards++;
 9152|      0|  }
 9153|  19.2M|  assert(! rootParser->m_parentParser);
  ------------------
  |  Branch (9153:3): [True: 0, False: 19.2M]
  |  Branch (9153:3): [True: 19.2M, False: 0]
  ------------------
 9154|  19.2M|  if (outLevelDiff != NULL) {
  ------------------
  |  Branch (9154:7): [True: 16.5M, False: 2.74M]
  ------------------
 9155|  16.5M|    *outLevelDiff = stepsTakenUpwards;
 9156|  16.5M|  }
 9157|  19.2M|  return rootParser;
 9158|  19.2M|}

XmlPrologStateInit:
 1238|  12.0k|XmlPrologStateInit(PROLOG_STATE *state) {
 1239|  12.0k|  state->handler = prolog0;
 1240|  12.0k|#ifdef XML_DTD
 1241|  12.0k|  state->documentEntity = 1;
 1242|  12.0k|  state->includeLevel = 0;
 1243|  12.0k|  state->inEntityValue = 0;
 1244|  12.0k|#endif /* XML_DTD */
 1245|  12.0k|}
xmlrole.c:prolog0:
  143|  11.3k|        const ENCODING *enc) {
  144|  11.3k|  switch (tok) {
  ------------------
  |  Branch (144:11): [True: 11.3k, False: 5]
  ------------------
  145|      0|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|      0|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (145:3): [True: 0, False: 11.3k]
  ------------------
  146|      0|    state->handler = prolog1;
  147|      0|    return XML_ROLE_NONE;
  148|    481|  case XML_TOK_XML_DECL:
  ------------------
  |  |   77|    481|#  define XML_TOK_XML_DECL 12 /* XML decl or text decl */
  ------------------
  |  Branch (148:3): [True: 481, False: 10.8k]
  ------------------
  149|    481|    state->handler = prolog1;
  150|    481|    return XML_ROLE_XML_DECL;
  151|    219|  case XML_TOK_PI:
  ------------------
  |  |   76|    219|#  define XML_TOK_PI 11       /* processing instruction */
  ------------------
  |  Branch (151:3): [True: 219, False: 11.1k]
  ------------------
  152|    219|    state->handler = prolog1;
  153|    219|    return XML_ROLE_PI;
  154|    116|  case XML_TOK_COMMENT:
  ------------------
  |  |   78|    116|#  define XML_TOK_COMMENT 13
  ------------------
  |  Branch (154:3): [True: 116, False: 11.2k]
  ------------------
  155|    116|    state->handler = prolog1;
  156|    116|    return XML_ROLE_COMMENT;
  157|      0|  case XML_TOK_BOM:
  ------------------
  |  |   79|      0|#  define XML_TOK_BOM 14 /* Byte order mark */
  ------------------
  |  Branch (157:3): [True: 0, False: 11.3k]
  ------------------
  158|      0|    return XML_ROLE_NONE;
  159|  6.66k|  case XML_TOK_DECL_OPEN:
  ------------------
  |  |   83|  6.66k|#  define XML_TOK_DECL_OPEN 16  /* <!foo */
  ------------------
  |  Branch (159:3): [True: 6.66k, False: 4.67k]
  ------------------
  160|  6.66k|    if (! XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end,
  ------------------
  |  |  254|  6.66k|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  ------------------
  |  Branch (160:9): [True: 39, False: 6.62k]
  ------------------
  161|  6.66k|                              KW_DOCTYPE))
  162|     39|      break;
  163|  6.62k|    state->handler = doctype0;
  164|  6.62k|    return XML_ROLE_DOCTYPE_NONE;
  165|  3.84k|  case XML_TOK_INSTANCE_START:
  ------------------
  |  |   96|  3.84k|#  define XML_TOK_INSTANCE_START 29
  ------------------
  |  Branch (165:3): [True: 3.84k, False: 7.48k]
  ------------------
  166|  3.84k|    state->handler = error;
  167|  3.84k|    return XML_ROLE_INSTANCE_START;
  168|  11.3k|  }
  169|     44|  return common(state, tok);
  170|  11.3k|}
xmlrole.c:prolog1:
  174|  3.00k|        const ENCODING *enc) {
  175|  3.00k|  switch (tok) {
  ------------------
  |  Branch (175:11): [True: 2.98k, False: 25]
  ------------------
  176|    748|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    748|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (176:3): [True: 748, False: 2.26k]
  ------------------
  177|    748|    return XML_ROLE_NONE;
  178|  1.89k|  case XML_TOK_PI:
  ------------------
  |  |   76|  1.89k|#  define XML_TOK_PI 11       /* processing instruction */
  ------------------
  |  Branch (178:3): [True: 1.89k, False: 1.11k]
  ------------------
  179|  1.89k|    return XML_ROLE_PI;
  180|    311|  case XML_TOK_COMMENT:
  ------------------
  |  |   78|    311|#  define XML_TOK_COMMENT 13
  ------------------
  |  Branch (180:3): [True: 311, False: 2.69k]
  ------------------
  181|    311|    return XML_ROLE_COMMENT;
  182|      0|  case XML_TOK_BOM:
  ------------------
  |  |   79|      0|#  define XML_TOK_BOM 14 /* Byte order mark */
  ------------------
  |  Branch (182:3): [True: 0, False: 3.00k]
  ------------------
  183|       |    /* This case can never arise.  To reach this role function, the
  184|       |     * parse must have passed through prolog0 and therefore have had
  185|       |     * some form of input, even if only a space.  At that point, a
  186|       |     * byte order mark is no longer a valid character (though
  187|       |     * technically it should be interpreted as a non-breaking space),
  188|       |     * so will be rejected by the tokenizing stages.
  189|       |     */
  190|      0|    return XML_ROLE_NONE; /* LCOV_EXCL_LINE */
  191|     10|  case XML_TOK_DECL_OPEN:
  ------------------
  |  |   83|     10|#  define XML_TOK_DECL_OPEN 16  /* <!foo */
  ------------------
  |  Branch (191:3): [True: 10, False: 2.99k]
  ------------------
  192|     10|    if (! XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end,
  ------------------
  |  |  254|     10|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  ------------------
  |  Branch (192:9): [True: 4, False: 6]
  ------------------
  193|     10|                              KW_DOCTYPE))
  194|      4|      break;
  195|      6|    state->handler = doctype0;
  196|      6|    return XML_ROLE_DOCTYPE_NONE;
  197|     20|  case XML_TOK_INSTANCE_START:
  ------------------
  |  |   96|     20|#  define XML_TOK_INSTANCE_START 29
  ------------------
  |  Branch (197:3): [True: 20, False: 2.98k]
  ------------------
  198|     20|    state->handler = error;
  199|     20|    return XML_ROLE_INSTANCE_START;
  200|  3.00k|  }
  201|     29|  return common(state, tok);
  202|  3.00k|}
xmlrole.c:doctype0:
  226|  12.8k|         const ENCODING *enc) {
  227|  12.8k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  12.8k|#    define UNUSED_P(p) (void)p
  ------------------
  228|  12.8k|  UNUSED_P(end);
  ------------------
  |  |  101|  12.8k|#    define UNUSED_P(p) (void)p
  ------------------
  229|  12.8k|  UNUSED_P(enc);
  ------------------
  |  |  101|  12.8k|#    define UNUSED_P(p) (void)p
  ------------------
  230|  12.8k|  switch (tok) {
  ------------------
  |  Branch (230:11): [True: 12.6k, False: 203]
  ------------------
  231|  6.62k|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|  6.62k|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (231:3): [True: 6.62k, False: 6.26k]
  ------------------
  232|  6.62k|    return XML_ROLE_DOCTYPE_NONE;
  233|  6.04k|  case XML_TOK_NAME:
  ------------------
  |  |   85|  6.04k|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (233:3): [True: 6.04k, False: 6.85k]
  ------------------
  234|  6.06k|  case XML_TOK_PREFIXED_NAME:
  ------------------
  |  |  118|  6.06k|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
  |  Branch (234:3): [True: 24, False: 12.8k]
  ------------------
  235|  6.06k|    state->handler = doctype1;
  236|  6.06k|    return XML_ROLE_DOCTYPE_NAME;
  237|  12.8k|  }
  238|    203|  return common(state, tok);
  239|  12.8k|}
xmlrole.c:doctype1:
  243|  8.08k|         const ENCODING *enc) {
  244|  8.08k|  switch (tok) {
  ------------------
  |  Branch (244:11): [True: 8.06k, False: 11]
  ------------------
  245|  2.01k|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|  2.01k|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (245:3): [True: 2.01k, False: 6.06k]
  ------------------
  246|  2.01k|    return XML_ROLE_DOCTYPE_NONE;
  247|  3.26k|  case XML_TOK_OPEN_BRACKET:
  ------------------
  |  |   92|  3.26k|#  define XML_TOK_OPEN_BRACKET 25
  ------------------
  |  Branch (247:3): [True: 3.26k, False: 4.81k]
  ------------------
  248|  3.26k|    state->handler = internalSubset;
  249|  3.26k|    return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
  250|  2.38k|  case XML_TOK_DECL_CLOSE:
  ------------------
  |  |   84|  2.38k|#  define XML_TOK_DECL_CLOSE 17 /* > */
  ------------------
  |  Branch (250:3): [True: 2.38k, False: 5.70k]
  ------------------
  251|  2.38k|    state->handler = prolog2;
  252|  2.38k|    return XML_ROLE_DOCTYPE_CLOSE;
  253|    409|  case XML_TOK_NAME:
  ------------------
  |  |   85|    409|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (253:3): [True: 409, False: 7.67k]
  ------------------
  254|    409|    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
  ------------------
  |  |  254|    409|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 142, False: 267]
  |  |  ------------------
  ------------------
  255|    142|      state->handler = doctype3;
  256|    142|      return XML_ROLE_DOCTYPE_NONE;
  257|    142|    }
  258|    267|    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
  ------------------
  |  |  254|    267|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 256, False: 11]
  |  |  ------------------
  ------------------
  259|    256|      state->handler = doctype2;
  260|    256|      return XML_ROLE_DOCTYPE_NONE;
  261|    256|    }
  262|     11|    break;
  263|  8.08k|  }
  264|     22|  return common(state, tok);
  265|  8.08k|}
xmlrole.c:internalSubset:
  336|  12.5k|               const ENCODING *enc) {
  337|  12.5k|  switch (tok) {
  ------------------
  |  Branch (337:11): [True: 12.5k, False: 73]
  ------------------
  338|    407|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    407|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (338:3): [True: 407, False: 12.1k]
  ------------------
  339|    407|    return XML_ROLE_NONE;
  340|  9.13k|  case XML_TOK_DECL_OPEN:
  ------------------
  |  |   83|  9.13k|#  define XML_TOK_DECL_OPEN 16  /* <!foo */
  ------------------
  |  Branch (340:3): [True: 9.13k, False: 3.44k]
  ------------------
  341|  9.13k|    if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end,
  ------------------
  |  |  254|  9.13k|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 5.16k, False: 3.97k]
  |  |  ------------------
  ------------------
  342|  9.13k|                            KW_ENTITY)) {
  343|  5.16k|      state->handler = entity0;
  344|  5.16k|      return XML_ROLE_ENTITY_NONE;
  345|  5.16k|    }
  346|  3.97k|    if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end,
  ------------------
  |  |  254|  3.97k|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 1.53k, False: 2.43k]
  |  |  ------------------
  ------------------
  347|  3.97k|                            KW_ATTLIST)) {
  348|  1.53k|      state->handler = attlist0;
  349|  1.53k|      return XML_ROLE_ATTLIST_NONE;
  350|  1.53k|    }
  351|  2.43k|    if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end,
  ------------------
  |  |  254|  2.43k|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 1.55k, False: 879]
  |  |  ------------------
  ------------------
  352|  2.43k|                            KW_ELEMENT)) {
  353|  1.55k|      state->handler = element0;
  354|  1.55k|      return XML_ROLE_ELEMENT_NONE;
  355|  1.55k|    }
  356|    879|    if (XmlNameMatchesAscii(enc, ptr + 2 * MIN_BYTES_PER_CHAR(enc), end,
  ------------------
  |  |  254|    879|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 875, False: 4]
  |  |  ------------------
  ------------------
  357|    879|                            KW_NOTATION)) {
  358|    875|      state->handler = notation0;
  359|    875|      return XML_ROLE_NOTATION_NONE;
  360|    875|    }
  361|      4|    break;
  362|    443|  case XML_TOK_PI:
  ------------------
  |  |   76|    443|#  define XML_TOK_PI 11       /* processing instruction */
  ------------------
  |  Branch (362:3): [True: 443, False: 12.1k]
  ------------------
  363|    443|    return XML_ROLE_PI;
  364|    194|  case XML_TOK_COMMENT:
  ------------------
  |  |   78|    194|#  define XML_TOK_COMMENT 13
  ------------------
  |  Branch (364:3): [True: 194, False: 12.3k]
  ------------------
  365|    194|    return XML_ROLE_COMMENT;
  366|    789|  case XML_TOK_PARAM_ENTITY_REF:
  ------------------
  |  |   95|    789|#  define XML_TOK_PARAM_ENTITY_REF 28
  ------------------
  |  Branch (366:3): [True: 789, False: 11.7k]
  ------------------
  367|    789|    return XML_ROLE_PARAM_ENTITY_REF;
  368|  1.53k|  case XML_TOK_CLOSE_BRACKET:
  ------------------
  |  |   93|  1.53k|#  define XML_TOK_CLOSE_BRACKET 26
  ------------------
  |  Branch (368:3): [True: 1.53k, False: 11.0k]
  ------------------
  369|  1.53k|    state->handler = doctype5;
  370|  1.53k|    return XML_ROLE_DOCTYPE_NONE;
  371|      0|  case XML_TOK_NONE:
  ------------------
  |  |   51|      0|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
  |  Branch (371:3): [True: 0, False: 12.5k]
  ------------------
  372|      0|    return XML_ROLE_NONE;
  373|  12.5k|  }
  374|     77|  return common(state, tok);
  375|  12.5k|}
xmlrole.c:entity0:
  418|  10.3k|        const ENCODING *enc) {
  419|  10.3k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  10.3k|#    define UNUSED_P(p) (void)p
  ------------------
  420|  10.3k|  UNUSED_P(end);
  ------------------
  |  |  101|  10.3k|#    define UNUSED_P(p) (void)p
  ------------------
  421|  10.3k|  UNUSED_P(enc);
  ------------------
  |  |  101|  10.3k|#    define UNUSED_P(p) (void)p
  ------------------
  422|  10.3k|  switch (tok) {
  ------------------
  |  Branch (422:11): [True: 10.3k, False: 13]
  ------------------
  423|  5.16k|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|  5.16k|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (423:3): [True: 5.16k, False: 5.16k]
  ------------------
  424|  5.16k|    return XML_ROLE_ENTITY_NONE;
  425|    918|  case XML_TOK_PERCENT:
  ------------------
  |  |   89|    918|#  define XML_TOK_PERCENT 22
  ------------------
  |  Branch (425:3): [True: 918, False: 9.40k]
  ------------------
  426|    918|    state->handler = entity1;
  427|    918|    return XML_ROLE_ENTITY_NONE;
  428|  4.23k|  case XML_TOK_NAME:
  ------------------
  |  |   85|  4.23k|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (428:3): [True: 4.23k, False: 6.09k]
  ------------------
  429|  4.23k|    state->handler = entity2;
  430|  4.23k|    return XML_ROLE_GENERAL_ENTITY_NAME;
  431|  10.3k|  }
  432|     13|  return common(state, tok);
  433|  10.3k|}
xmlrole.c:entity1:
  437|  1.83k|        const ENCODING *enc) {
  438|  1.83k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  1.83k|#    define UNUSED_P(p) (void)p
  ------------------
  439|  1.83k|  UNUSED_P(end);
  ------------------
  |  |  101|  1.83k|#    define UNUSED_P(p) (void)p
  ------------------
  440|  1.83k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.83k|#    define UNUSED_P(p) (void)p
  ------------------
  441|  1.83k|  switch (tok) {
  ------------------
  |  Branch (441:11): [True: 1.81k, False: 15]
  ------------------
  442|    916|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    916|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (442:3): [True: 916, False: 918]
  ------------------
  443|    916|    return XML_ROLE_ENTITY_NONE;
  444|    903|  case XML_TOK_NAME:
  ------------------
  |  |   85|    903|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (444:3): [True: 903, False: 931]
  ------------------
  445|    903|    state->handler = entity7;
  446|    903|    return XML_ROLE_PARAM_ENTITY_NAME;
  447|  1.83k|  }
  448|     15|  return common(state, tok);
  449|  1.83k|}
xmlrole.c:entity7:
  545|  1.77k|        const ENCODING *enc) {
  546|  1.77k|  switch (tok) {
  ------------------
  |  Branch (546:11): [True: 1.75k, False: 18]
  ------------------
  547|    890|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    890|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (547:3): [True: 890, False: 886]
  ------------------
  548|    890|    return XML_ROLE_ENTITY_NONE;
  549|    350|  case XML_TOK_NAME:
  ------------------
  |  |   85|    350|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (549:3): [True: 350, False: 1.42k]
  ------------------
  550|    350|    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
  ------------------
  |  |  254|    350|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 222, False: 128]
  |  |  ------------------
  ------------------
  551|    222|      state->handler = entity9;
  552|    222|      return XML_ROLE_ENTITY_NONE;
  553|    222|    }
  554|    128|    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
  ------------------
  |  |  254|    128|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 127, False: 1]
  |  |  ------------------
  ------------------
  555|    127|      state->handler = entity8;
  556|    127|      return XML_ROLE_ENTITY_NONE;
  557|    127|    }
  558|      1|    break;
  559|    518|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|    518|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (559:3): [True: 518, False: 1.25k]
  ------------------
  560|    518|    state->handler = declClose;
  561|    518|    state->role_none = XML_ROLE_ENTITY_NONE;
  562|    518|    return XML_ROLE_ENTITY_VALUE;
  563|  1.77k|  }
  564|     19|  return common(state, tok);
  565|  1.77k|}
xmlrole.c:entity9:
  585|    675|        const ENCODING *enc) {
  586|    675|  UNUSED_P(ptr);
  ------------------
  |  |  101|    675|#    define UNUSED_P(p) (void)p
  ------------------
  587|    675|  UNUSED_P(end);
  ------------------
  |  |  101|    675|#    define UNUSED_P(p) (void)p
  ------------------
  588|    675|  UNUSED_P(enc);
  ------------------
  |  |  101|    675|#    define UNUSED_P(p) (void)p
  ------------------
  589|    675|  switch (tok) {
  ------------------
  |  Branch (589:11): [True: 664, False: 11]
  ------------------
  590|    336|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    336|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (590:3): [True: 336, False: 339]
  ------------------
  591|    336|    return XML_ROLE_ENTITY_NONE;
  592|    328|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|    328|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (592:3): [True: 328, False: 347]
  ------------------
  593|    328|    state->handler = entity10;
  594|    328|    return XML_ROLE_ENTITY_SYSTEM_ID;
  595|    675|  }
  596|     11|  return common(state, tok);
  597|    675|}
xmlrole.c:entity10:
  601|    515|         const ENCODING *enc) {
  602|    515|  UNUSED_P(ptr);
  ------------------
  |  |  101|    515|#    define UNUSED_P(p) (void)p
  ------------------
  603|    515|  UNUSED_P(end);
  ------------------
  |  |  101|    515|#    define UNUSED_P(p) (void)p
  ------------------
  604|    515|  UNUSED_P(enc);
  ------------------
  |  |  101|    515|#    define UNUSED_P(p) (void)p
  ------------------
  605|    515|  switch (tok) {
  ------------------
  |  Branch (605:11): [True: 514, False: 1]
  ------------------
  606|    187|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    187|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (606:3): [True: 187, False: 328]
  ------------------
  607|    187|    return XML_ROLE_ENTITY_NONE;
  608|    327|  case XML_TOK_DECL_CLOSE:
  ------------------
  |  |   84|    327|#  define XML_TOK_DECL_CLOSE 17 /* > */
  ------------------
  |  Branch (608:3): [True: 327, False: 188]
  ------------------
  609|    327|    setTopLevel(state);
  ------------------
  |  |  118|    327|    ((state)->handler                                                          \
  |  |  119|    327|     = ((state)->documentEntity ? internalSubset : externalSubset1))
  |  |  ------------------
  |  |  |  Branch (119:9): [True: 327, False: 0]
  |  |  ------------------
  ------------------
  610|    327|    return XML_ROLE_ENTITY_COMPLETE;
  611|    515|  }
  612|      1|  return common(state, tok);
  613|    515|}
xmlrole.c:entity8:
  569|    252|        const ENCODING *enc) {
  570|    252|  UNUSED_P(ptr);
  ------------------
  |  |  101|    252|#    define UNUSED_P(p) (void)p
  ------------------
  571|    252|  UNUSED_P(end);
  ------------------
  |  |  101|    252|#    define UNUSED_P(p) (void)p
  ------------------
  572|    252|  UNUSED_P(enc);
  ------------------
  |  |  101|    252|#    define UNUSED_P(p) (void)p
  ------------------
  573|    252|  switch (tok) {
  ------------------
  |  Branch (573:11): [True: 247, False: 5]
  ------------------
  574|    126|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    126|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (574:3): [True: 126, False: 126]
  ------------------
  575|    126|    return XML_ROLE_ENTITY_NONE;
  576|    121|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|    121|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (576:3): [True: 121, False: 131]
  ------------------
  577|    121|    state->handler = entity9;
  578|    121|    return XML_ROLE_ENTITY_PUBLIC_ID;
  579|    252|  }
  580|      5|  return common(state, tok);
  581|    252|}
xmlrole.c:declClose:
 1179|  5.97k|          const ENCODING *enc) {
 1180|  5.97k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  5.97k|#    define UNUSED_P(p) (void)p
  ------------------
 1181|  5.97k|  UNUSED_P(end);
  ------------------
  |  |  101|  5.97k|#    define UNUSED_P(p) (void)p
  ------------------
 1182|  5.97k|  UNUSED_P(enc);
  ------------------
  |  |  101|  5.97k|#    define UNUSED_P(p) (void)p
  ------------------
 1183|  5.97k|  switch (tok) {
  ------------------
  |  Branch (1183:11): [True: 5.87k, False: 99]
  ------------------
 1184|    302|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    302|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (1184:3): [True: 302, False: 5.67k]
  ------------------
 1185|    302|    return state->role_none;
 1186|  5.57k|  case XML_TOK_DECL_CLOSE:
  ------------------
  |  |   84|  5.57k|#  define XML_TOK_DECL_CLOSE 17 /* > */
  ------------------
  |  Branch (1186:3): [True: 5.57k, False: 401]
  ------------------
 1187|  5.57k|    setTopLevel(state);
  ------------------
  |  |  118|  5.57k|    ((state)->handler                                                          \
  |  |  119|  5.57k|     = ((state)->documentEntity ? internalSubset : externalSubset1))
  |  |  ------------------
  |  |  |  Branch (119:9): [True: 5.57k, False: 0]
  |  |  ------------------
  ------------------
 1188|  5.57k|    return state->role_none;
 1189|  5.97k|  }
 1190|     99|  return common(state, tok);
 1191|  5.97k|}
xmlrole.c:entity2:
  453|  8.40k|        const ENCODING *enc) {
  454|  8.40k|  switch (tok) {
  ------------------
  |  Branch (454:11): [True: 8.38k, False: 24]
  ------------------
  455|  4.21k|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|  4.21k|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (455:3): [True: 4.21k, False: 4.19k]
  ------------------
  456|  4.21k|    return XML_ROLE_ENTITY_NONE;
  457|    791|  case XML_TOK_NAME:
  ------------------
  |  |   85|    791|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (457:3): [True: 791, False: 7.61k]
  ------------------
  458|    791|    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
  ------------------
  |  |  254|    791|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 362, False: 429]
  |  |  ------------------
  ------------------
  459|    362|      state->handler = entity4;
  460|    362|      return XML_ROLE_ENTITY_NONE;
  461|    362|    }
  462|    429|    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
  ------------------
  |  |  254|    429|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 427, False: 2]
  |  |  ------------------
  ------------------
  463|    427|      state->handler = entity3;
  464|    427|      return XML_ROLE_ENTITY_NONE;
  465|    427|    }
  466|      2|    break;
  467|  3.37k|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|  3.37k|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (467:3): [True: 3.37k, False: 5.03k]
  ------------------
  468|  3.37k|    state->handler = declClose;
  469|  3.37k|    state->role_none = XML_ROLE_ENTITY_NONE;
  470|  3.37k|    return XML_ROLE_ENTITY_VALUE;
  471|  8.40k|  }
  472|     26|  return common(state, tok);
  473|  8.40k|}
xmlrole.c:entity4:
  493|  1.52k|        const ENCODING *enc) {
  494|  1.52k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  1.52k|#    define UNUSED_P(p) (void)p
  ------------------
  495|  1.52k|  UNUSED_P(end);
  ------------------
  |  |  101|  1.52k|#    define UNUSED_P(p) (void)p
  ------------------
  496|  1.52k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.52k|#    define UNUSED_P(p) (void)p
  ------------------
  497|  1.52k|  switch (tok) {
  ------------------
  |  Branch (497:11): [True: 1.49k, False: 25]
  ------------------
  498|    765|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    765|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (498:3): [True: 765, False: 756]
  ------------------
  499|    765|    return XML_ROLE_ENTITY_NONE;
  500|    731|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|    731|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (500:3): [True: 731, False: 790]
  ------------------
  501|    731|    state->handler = entity5;
  502|    731|    return XML_ROLE_ENTITY_SYSTEM_ID;
  503|  1.52k|  }
  504|     25|  return common(state, tok);
  505|  1.52k|}
xmlrole.c:entity5:
  509|    965|        const ENCODING *enc) {
  510|    965|  switch (tok) {
  ------------------
  |  Branch (510:11): [True: 964, False: 1]
  ------------------
  511|    234|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    234|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (511:3): [True: 234, False: 731]
  ------------------
  512|    234|    return XML_ROLE_ENTITY_NONE;
  513|    508|  case XML_TOK_DECL_CLOSE:
  ------------------
  |  |   84|    508|#  define XML_TOK_DECL_CLOSE 17 /* > */
  ------------------
  |  Branch (513:3): [True: 508, False: 457]
  ------------------
  514|    508|    setTopLevel(state);
  ------------------
  |  |  118|    508|    ((state)->handler                                                          \
  |  |  119|    508|     = ((state)->documentEntity ? internalSubset : externalSubset1))
  |  |  ------------------
  |  |  |  Branch (119:9): [True: 508, False: 0]
  |  |  ------------------
  ------------------
  515|    508|    return XML_ROLE_ENTITY_COMPLETE;
  516|    222|  case XML_TOK_NAME:
  ------------------
  |  |   85|    222|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (516:3): [True: 222, False: 743]
  ------------------
  517|    222|    if (XmlNameMatchesAscii(enc, ptr, end, KW_NDATA)) {
  ------------------
  |  |  254|    222|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 221, False: 1]
  |  |  ------------------
  ------------------
  518|    221|      state->handler = entity6;
  519|    221|      return XML_ROLE_ENTITY_NONE;
  520|    221|    }
  521|      1|    break;
  522|    965|  }
  523|      2|  return common(state, tok);
  524|    965|}
xmlrole.c:entity6:
  528|    440|        const ENCODING *enc) {
  529|    440|  UNUSED_P(ptr);
  ------------------
  |  |  101|    440|#    define UNUSED_P(p) (void)p
  ------------------
  530|    440|  UNUSED_P(end);
  ------------------
  |  |  101|    440|#    define UNUSED_P(p) (void)p
  ------------------
  531|    440|  UNUSED_P(enc);
  ------------------
  |  |  101|    440|#    define UNUSED_P(p) (void)p
  ------------------
  532|    440|  switch (tok) {
  ------------------
  |  Branch (532:11): [True: 437, False: 3]
  ------------------
  533|    219|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    219|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (533:3): [True: 219, False: 221]
  ------------------
  534|    219|    return XML_ROLE_ENTITY_NONE;
  535|    218|  case XML_TOK_NAME:
  ------------------
  |  |   85|    218|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (535:3): [True: 218, False: 222]
  ------------------
  536|    218|    state->handler = declClose;
  537|    218|    state->role_none = XML_ROLE_ENTITY_NONE;
  538|    218|    return XML_ROLE_ENTITY_NOTATION_NAME;
  539|    440|  }
  540|      3|  return common(state, tok);
  541|    440|}
xmlrole.c:entity3:
  477|    852|        const ENCODING *enc) {
  478|    852|  UNUSED_P(ptr);
  ------------------
  |  |  101|    852|#    define UNUSED_P(p) (void)p
  ------------------
  479|    852|  UNUSED_P(end);
  ------------------
  |  |  101|    852|#    define UNUSED_P(p) (void)p
  ------------------
  480|    852|  UNUSED_P(enc);
  ------------------
  |  |  101|    852|#    define UNUSED_P(p) (void)p
  ------------------
  481|    852|  switch (tok) {
  ------------------
  |  Branch (481:11): [True: 846, False: 6]
  ------------------
  482|    425|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    425|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (482:3): [True: 425, False: 427]
  ------------------
  483|    425|    return XML_ROLE_ENTITY_NONE;
  484|    421|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|    421|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (484:3): [True: 421, False: 431]
  ------------------
  485|    421|    state->handler = entity4;
  486|    421|    return XML_ROLE_ENTITY_PUBLIC_ID;
  487|    852|  }
  488|      6|  return common(state, tok);
  489|    852|}
xmlrole.c:attlist0:
  706|  3.06k|         const ENCODING *enc) {
  707|  3.06k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  3.06k|#    define UNUSED_P(p) (void)p
  ------------------
  708|  3.06k|  UNUSED_P(end);
  ------------------
  |  |  101|  3.06k|#    define UNUSED_P(p) (void)p
  ------------------
  709|  3.06k|  UNUSED_P(enc);
  ------------------
  |  |  101|  3.06k|#    define UNUSED_P(p) (void)p
  ------------------
  710|  3.06k|  switch (tok) {
  ------------------
  |  Branch (710:11): [True: 3.06k, False: 6]
  ------------------
  711|  1.53k|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|  1.53k|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (711:3): [True: 1.53k, False: 1.53k]
  ------------------
  712|  1.53k|    return XML_ROLE_ATTLIST_NONE;
  713|  1.45k|  case XML_TOK_NAME:
  ------------------
  |  |   85|  1.45k|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (713:3): [True: 1.45k, False: 1.60k]
  ------------------
  714|  1.52k|  case XML_TOK_PREFIXED_NAME:
  ------------------
  |  |  118|  1.52k|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
  |  Branch (714:3): [True: 68, False: 2.99k]
  ------------------
  715|  1.52k|    state->handler = attlist1;
  716|  1.52k|    return XML_ROLE_ATTLIST_ELEMENT_NAME;
  717|  3.06k|  }
  718|      6|  return common(state, tok);
  719|  3.06k|}
xmlrole.c:attlist1:
  723|  8.82k|         const ENCODING *enc) {
  724|  8.82k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  8.82k|#    define UNUSED_P(p) (void)p
  ------------------
  725|  8.82k|  UNUSED_P(end);
  ------------------
  |  |  101|  8.82k|#    define UNUSED_P(p) (void)p
  ------------------
  726|  8.82k|  UNUSED_P(enc);
  ------------------
  |  |  101|  8.82k|#    define UNUSED_P(p) (void)p
  ------------------
  727|  8.82k|  switch (tok) {
  ------------------
  |  Branch (727:11): [True: 8.78k, False: 36]
  ------------------
  728|  3.88k|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|  3.88k|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (728:3): [True: 3.88k, False: 4.93k]
  ------------------
  729|  3.88k|    return XML_ROLE_ATTLIST_NONE;
  730|  1.07k|  case XML_TOK_DECL_CLOSE:
  ------------------
  |  |   84|  1.07k|#  define XML_TOK_DECL_CLOSE 17 /* > */
  ------------------
  |  Branch (730:3): [True: 1.07k, False: 7.74k]
  ------------------
  731|  1.07k|    setTopLevel(state);
  ------------------
  |  |  118|  1.07k|    ((state)->handler                                                          \
  |  |  119|  1.07k|     = ((state)->documentEntity ? internalSubset : externalSubset1))
  |  |  ------------------
  |  |  |  Branch (119:9): [True: 1.07k, False: 0]
  |  |  ------------------
  ------------------
  732|  1.07k|    return XML_ROLE_ATTLIST_NONE;
  733|  3.44k|  case XML_TOK_NAME:
  ------------------
  |  |   85|  3.44k|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (733:3): [True: 3.44k, False: 5.38k]
  ------------------
  734|  3.82k|  case XML_TOK_PREFIXED_NAME:
  ------------------
  |  |  118|  3.82k|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
  |  Branch (734:3): [True: 379, False: 8.44k]
  ------------------
  735|  3.82k|    state->handler = attlist2;
  736|  3.82k|    return XML_ROLE_ATTRIBUTE_NAME;
  737|  8.82k|  }
  738|     36|  return common(state, tok);
  739|  8.82k|}
xmlrole.c:attlist2:
  743|  7.60k|         const ENCODING *enc) {
  744|  7.60k|  switch (tok) {
  ------------------
  |  Branch (744:11): [True: 7.57k, False: 36]
  ------------------
  745|  3.79k|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|  3.79k|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (745:3): [True: 3.79k, False: 3.80k]
  ------------------
  746|  3.79k|    return XML_ROLE_ATTLIST_NONE;
  747|  3.11k|  case XML_TOK_NAME: {
  ------------------
  |  |   85|  3.11k|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (747:3): [True: 3.11k, False: 4.49k]
  ------------------
  748|  3.11k|    static const char *const types[] = {
  749|  3.11k|        KW_CDATA,  KW_ID,       KW_IDREF,   KW_IDREFS,
  750|  3.11k|        KW_ENTITY, KW_ENTITIES, KW_NMTOKEN, KW_NMTOKENS,
  751|  3.11k|    };
  752|  3.11k|    int i;
  753|  8.61k|    for (i = 0; i < (int)(sizeof(types) / sizeof(types[0])); i++)
  ------------------
  |  Branch (753:17): [True: 8.47k, False: 142]
  ------------------
  754|  8.47k|      if (XmlNameMatchesAscii(enc, ptr, end, types[i])) {
  ------------------
  |  |  254|  8.47k|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 2.97k, False: 5.50k]
  |  |  ------------------
  ------------------
  755|  2.97k|        state->handler = attlist8;
  756|  2.97k|        return XML_ROLE_ATTRIBUTE_TYPE_CDATA + i;
  757|  2.97k|      }
  758|  3.11k|  }
  759|    142|    if (XmlNameMatchesAscii(enc, ptr, end, KW_NOTATION)) {
  ------------------
  |  |  254|    142|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 128, False: 14]
  |  |  ------------------
  ------------------
  760|    128|      state->handler = attlist5;
  761|    128|      return XML_ROLE_ATTLIST_NONE;
  762|    128|    }
  763|     14|    break;
  764|    657|  case XML_TOK_OPEN_PAREN:
  ------------------
  |  |   90|    657|#  define XML_TOK_OPEN_PAREN 23
  ------------------
  |  Branch (764:3): [True: 657, False: 6.95k]
  ------------------
  765|    657|    state->handler = attlist3;
  766|    657|    return XML_ROLE_ATTLIST_NONE;
  767|  7.60k|  }
  768|     50|  return common(state, tok);
  769|  7.60k|}
xmlrole.c:attlist8:
  862|  7.14k|         const ENCODING *enc) {
  863|  7.14k|  switch (tok) {
  ------------------
  |  Branch (863:11): [True: 7.07k, False: 62]
  ------------------
  864|  3.56k|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|  3.56k|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (864:3): [True: 3.56k, False: 3.57k]
  ------------------
  865|  3.56k|    return XML_ROLE_ATTLIST_NONE;
  866|    925|  case XML_TOK_POUND_NAME:
  ------------------
  |  |   87|    925|#  define XML_TOK_POUND_NAME 20 /* #name */
  ------------------
  |  Branch (866:3): [True: 925, False: 6.21k]
  ------------------
  867|    925|    if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end,
  ------------------
  |  |  254|    925|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 693, False: 232]
  |  |  ------------------
  ------------------
  868|    925|                            KW_IMPLIED)) {
  869|    693|      state->handler = attlist1;
  870|    693|      return XML_ROLE_IMPLIED_ATTRIBUTE_VALUE;
  871|    693|    }
  872|    232|    if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end,
  ------------------
  |  |  254|    232|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 81, False: 151]
  |  |  ------------------
  ------------------
  873|    232|                            KW_REQUIRED)) {
  874|     81|      state->handler = attlist1;
  875|     81|      return XML_ROLE_REQUIRED_ATTRIBUTE_VALUE;
  876|     81|    }
  877|    151|    if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end,
  ------------------
  |  |  254|    151|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 150, False: 1]
  |  |  ------------------
  ------------------
  878|    151|                            KW_FIXED)) {
  879|    150|      state->handler = attlist9;
  880|    150|      return XML_ROLE_ATTLIST_NONE;
  881|    150|    }
  882|      1|    break;
  883|  2.58k|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|  2.58k|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (883:3): [True: 2.58k, False: 4.55k]
  ------------------
  884|  2.58k|    state->handler = attlist1;
  885|  2.58k|    return XML_ROLE_DEFAULT_ATTRIBUTE_VALUE;
  886|  7.14k|  }
  887|     63|  return common(state, tok);
  888|  7.14k|}
xmlrole.c:attlist9:
  892|    297|         const ENCODING *enc) {
  893|    297|  UNUSED_P(ptr);
  ------------------
  |  |  101|    297|#    define UNUSED_P(p) (void)p
  ------------------
  894|    297|  UNUSED_P(end);
  ------------------
  |  |  101|    297|#    define UNUSED_P(p) (void)p
  ------------------
  895|    297|  UNUSED_P(enc);
  ------------------
  |  |  101|    297|#    define UNUSED_P(p) (void)p
  ------------------
  896|    297|  switch (tok) {
  ------------------
  |  Branch (896:11): [True: 283, False: 14]
  ------------------
  897|    147|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    147|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (897:3): [True: 147, False: 150]
  ------------------
  898|    147|    return XML_ROLE_ATTLIST_NONE;
  899|    136|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|    136|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (899:3): [True: 136, False: 161]
  ------------------
  900|    136|    state->handler = attlist1;
  901|    136|    return XML_ROLE_FIXED_ATTRIBUTE_VALUE;
  902|    297|  }
  903|     14|  return common(state, tok);
  904|    297|}
xmlrole.c:attlist5:
  810|    253|         const ENCODING *enc) {
  811|    253|  UNUSED_P(ptr);
  ------------------
  |  |  101|    253|#    define UNUSED_P(p) (void)p
  ------------------
  812|    253|  UNUSED_P(end);
  ------------------
  |  |  101|    253|#    define UNUSED_P(p) (void)p
  ------------------
  813|    253|  UNUSED_P(enc);
  ------------------
  |  |  101|    253|#    define UNUSED_P(p) (void)p
  ------------------
  814|    253|  switch (tok) {
  ------------------
  |  Branch (814:11): [True: 247, False: 6]
  ------------------
  815|    126|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    126|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (815:3): [True: 126, False: 127]
  ------------------
  816|    126|    return XML_ROLE_ATTLIST_NONE;
  817|    121|  case XML_TOK_OPEN_PAREN:
  ------------------
  |  |   90|    121|#  define XML_TOK_OPEN_PAREN 23
  ------------------
  |  Branch (817:3): [True: 121, False: 132]
  ------------------
  818|    121|    state->handler = attlist6;
  819|    121|    return XML_ROLE_ATTLIST_NONE;
  820|    253|  }
  821|      6|  return common(state, tok);
  822|    253|}
xmlrole.c:attlist6:
  826|  1.07k|         const ENCODING *enc) {
  827|  1.07k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  1.07k|#    define UNUSED_P(p) (void)p
  ------------------
  828|  1.07k|  UNUSED_P(end);
  ------------------
  |  |  101|  1.07k|#    define UNUSED_P(p) (void)p
  ------------------
  829|  1.07k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.07k|#    define UNUSED_P(p) (void)p
  ------------------
  830|  1.07k|  switch (tok) {
  ------------------
  |  Branch (830:11): [True: 1.05k, False: 19]
  ------------------
  831|    260|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    260|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (831:3): [True: 260, False: 815]
  ------------------
  832|    260|    return XML_ROLE_ATTLIST_NONE;
  833|    796|  case XML_TOK_NAME:
  ------------------
  |  |   85|    796|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (833:3): [True: 796, False: 279]
  ------------------
  834|    796|    state->handler = attlist7;
  835|    796|    return XML_ROLE_ATTRIBUTE_NOTATION_VALUE;
  836|  1.07k|  }
  837|     19|  return common(state, tok);
  838|  1.07k|}
xmlrole.c:attlist7:
  842|  1.05k|         const ENCODING *enc) {
  843|  1.05k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  1.05k|#    define UNUSED_P(p) (void)p
  ------------------
  844|  1.05k|  UNUSED_P(end);
  ------------------
  |  |  101|  1.05k|#    define UNUSED_P(p) (void)p
  ------------------
  845|  1.05k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.05k|#    define UNUSED_P(p) (void)p
  ------------------
  846|  1.05k|  switch (tok) {
  ------------------
  |  Branch (846:11): [True: 1.04k, False: 9]
  ------------------
  847|    258|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    258|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (847:3): [True: 258, False: 796]
  ------------------
  848|    258|    return XML_ROLE_ATTLIST_NONE;
  849|     92|  case XML_TOK_CLOSE_PAREN:
  ------------------
  |  |   91|     92|#  define XML_TOK_CLOSE_PAREN 24
  ------------------
  |  Branch (849:3): [True: 92, False: 962]
  ------------------
  850|     92|    state->handler = attlist8;
  851|     92|    return XML_ROLE_ATTLIST_NONE;
  852|    695|  case XML_TOK_OR:
  ------------------
  |  |   88|    695|#  define XML_TOK_OR 21         /* | */
  ------------------
  |  Branch (852:3): [True: 695, False: 359]
  ------------------
  853|    695|    state->handler = attlist6;
  854|    695|    return XML_ROLE_ATTLIST_NONE;
  855|  1.05k|  }
  856|      9|  return common(state, tok);
  857|  1.05k|}
xmlrole.c:attlist3:
  773|  4.24k|         const ENCODING *enc) {
  774|  4.24k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  4.24k|#    define UNUSED_P(p) (void)p
  ------------------
  775|  4.24k|  UNUSED_P(end);
  ------------------
  |  |  101|  4.24k|#    define UNUSED_P(p) (void)p
  ------------------
  776|  4.24k|  UNUSED_P(enc);
  ------------------
  |  |  101|  4.24k|#    define UNUSED_P(p) (void)p
  ------------------
  777|  4.24k|  switch (tok) {
  ------------------
  |  Branch (777:11): [True: 4.21k, False: 29]
  ------------------
  778|    335|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    335|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (778:3): [True: 335, False: 3.90k]
  ------------------
  779|    335|    return XML_ROLE_ATTLIST_NONE;
  780|  1.85k|  case XML_TOK_NMTOKEN:
  ------------------
  |  |   86|  1.85k|#  define XML_TOK_NMTOKEN 19
  ------------------
  |  Branch (780:3): [True: 1.85k, False: 2.38k]
  ------------------
  781|  3.47k|  case XML_TOK_NAME:
  ------------------
  |  |   85|  3.47k|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (781:3): [True: 1.62k, False: 2.62k]
  ------------------
  782|  3.87k|  case XML_TOK_PREFIXED_NAME:
  ------------------
  |  |  118|  3.87k|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
  |  Branch (782:3): [True: 405, False: 3.83k]
  ------------------
  783|  3.87k|    state->handler = attlist4;
  784|  3.87k|    return XML_ROLE_ATTRIBUTE_ENUM_VALUE;
  785|  4.24k|  }
  786|     29|  return common(state, tok);
  787|  4.24k|}
xmlrole.c:attlist4:
  791|  4.25k|         const ENCODING *enc) {
  792|  4.25k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  4.25k|#    define UNUSED_P(p) (void)p
  ------------------
  793|  4.25k|  UNUSED_P(end);
  ------------------
  |  |  101|  4.25k|#    define UNUSED_P(p) (void)p
  ------------------
  794|  4.25k|  UNUSED_P(enc);
  ------------------
  |  |  101|  4.25k|#    define UNUSED_P(p) (void)p
  ------------------
  795|  4.25k|  switch (tok) {
  ------------------
  |  Branch (795:11): [True: 4.15k, False: 97]
  ------------------
  796|    379|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    379|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (796:3): [True: 379, False: 3.87k]
  ------------------
  797|    379|    return XML_ROLE_ATTLIST_NONE;
  798|    527|  case XML_TOK_CLOSE_PAREN:
  ------------------
  |  |   91|    527|#  define XML_TOK_CLOSE_PAREN 24
  ------------------
  |  Branch (798:3): [True: 527, False: 3.72k]
  ------------------
  799|    527|    state->handler = attlist8;
  800|    527|    return XML_ROLE_ATTLIST_NONE;
  801|  3.25k|  case XML_TOK_OR:
  ------------------
  |  |   88|  3.25k|#  define XML_TOK_OR 21         /* | */
  ------------------
  |  Branch (801:3): [True: 3.25k, False: 1.00k]
  ------------------
  802|  3.25k|    state->handler = attlist3;
  803|  3.25k|    return XML_ROLE_ATTLIST_NONE;
  804|  4.25k|  }
  805|     97|  return common(state, tok);
  806|  4.25k|}
xmlrole.c:element0:
  908|  3.10k|         const ENCODING *enc) {
  909|  3.10k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  3.10k|#    define UNUSED_P(p) (void)p
  ------------------
  910|  3.10k|  UNUSED_P(end);
  ------------------
  |  |  101|  3.10k|#    define UNUSED_P(p) (void)p
  ------------------
  911|  3.10k|  UNUSED_P(enc);
  ------------------
  |  |  101|  3.10k|#    define UNUSED_P(p) (void)p
  ------------------
  912|  3.10k|  switch (tok) {
  ------------------
  |  Branch (912:11): [True: 3.10k, False: 4]
  ------------------
  913|  1.55k|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|  1.55k|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (913:3): [True: 1.55k, False: 1.55k]
  ------------------
  914|  1.55k|    return XML_ROLE_ELEMENT_NONE;
  915|  1.48k|  case XML_TOK_NAME:
  ------------------
  |  |   85|  1.48k|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (915:3): [True: 1.48k, False: 1.62k]
  ------------------
  916|  1.55k|  case XML_TOK_PREFIXED_NAME:
  ------------------
  |  |  118|  1.55k|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
  |  Branch (916:3): [True: 67, False: 3.04k]
  ------------------
  917|  1.55k|    state->handler = element1;
  918|  1.55k|    return XML_ROLE_ELEMENT_NAME;
  919|  3.10k|  }
  920|      4|  return common(state, tok);
  921|  3.10k|}
xmlrole.c:element1:
  925|  3.09k|         const ENCODING *enc) {
  926|  3.09k|  switch (tok) {
  ------------------
  |  Branch (926:11): [True: 3.08k, False: 12]
  ------------------
  927|  1.54k|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|  1.54k|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (927:3): [True: 1.54k, False: 1.55k]
  ------------------
  928|  1.54k|    return XML_ROLE_ELEMENT_NONE;
  929|    149|  case XML_TOK_NAME:
  ------------------
  |  |   85|    149|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (929:3): [True: 149, False: 2.94k]
  ------------------
  930|    149|    if (XmlNameMatchesAscii(enc, ptr, end, KW_EMPTY)) {
  ------------------
  |  |  254|    149|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 66, False: 83]
  |  |  ------------------
  ------------------
  931|     66|      state->handler = declClose;
  932|     66|      state->role_none = XML_ROLE_ELEMENT_NONE;
  933|     66|      return XML_ROLE_CONTENT_EMPTY;
  934|     66|    }
  935|     83|    if (XmlNameMatchesAscii(enc, ptr, end, KW_ANY)) {
  ------------------
  |  |  254|     83|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 82, False: 1]
  |  |  ------------------
  ------------------
  936|     82|      state->handler = declClose;
  937|     82|      state->role_none = XML_ROLE_ELEMENT_NONE;
  938|     82|      return XML_ROLE_CONTENT_ANY;
  939|     82|    }
  940|      1|    break;
  941|  1.38k|  case XML_TOK_OPEN_PAREN:
  ------------------
  |  |   90|  1.38k|#  define XML_TOK_OPEN_PAREN 23
  ------------------
  |  Branch (941:3): [True: 1.38k, False: 1.70k]
  ------------------
  942|  1.38k|    state->handler = element2;
  943|  1.38k|    state->level = 1;
  944|  1.38k|    return XML_ROLE_GROUP_OPEN;
  945|  3.09k|  }
  946|     13|  return common(state, tok);
  947|  3.09k|}
xmlrole.c:element2:
  951|  1.46k|         const ENCODING *enc) {
  952|  1.46k|  switch (tok) {
  ------------------
  |  Branch (952:11): [True: 1.44k, False: 14]
  ------------------
  953|     83|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|     83|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (953:3): [True: 83, False: 1.37k]
  ------------------
  954|     83|    return XML_ROLE_ELEMENT_NONE;
  955|    301|  case XML_TOK_POUND_NAME:
  ------------------
  |  |   87|    301|#  define XML_TOK_POUND_NAME 20 /* #name */
  ------------------
  |  Branch (955:3): [True: 301, False: 1.15k]
  ------------------
  956|    301|    if (XmlNameMatchesAscii(enc, ptr + MIN_BYTES_PER_CHAR(enc), end,
  ------------------
  |  |  254|    301|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 300, False: 1]
  |  |  ------------------
  ------------------
  957|    301|                            KW_PCDATA)) {
  958|    300|      state->handler = element3;
  959|    300|      return XML_ROLE_CONTENT_PCDATA;
  960|    300|    }
  961|      1|    break;
  962|    226|  case XML_TOK_OPEN_PAREN:
  ------------------
  |  |   90|    226|#  define XML_TOK_OPEN_PAREN 23
  ------------------
  |  Branch (962:3): [True: 226, False: 1.23k]
  ------------------
  963|    226|    state->level = 2;
  964|    226|    state->handler = element6;
  965|    226|    return XML_ROLE_GROUP_OPEN;
  966|    540|  case XML_TOK_NAME:
  ------------------
  |  |   85|    540|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (966:3): [True: 540, False: 920]
  ------------------
  967|    636|  case XML_TOK_PREFIXED_NAME:
  ------------------
  |  |  118|    636|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
  |  Branch (967:3): [True: 96, False: 1.36k]
  ------------------
  968|    636|    state->handler = element7;
  969|    636|    return XML_ROLE_CONTENT_ELEMENT;
  970|     72|  case XML_TOK_NAME_QUESTION:
  ------------------
  |  |   99|     72|#  define XML_TOK_NAME_QUESTION 30        /* name? */
  ------------------
  |  Branch (970:3): [True: 72, False: 1.38k]
  ------------------
  971|     72|    state->handler = element7;
  972|     72|    return XML_ROLE_CONTENT_ELEMENT_OPT;
  973|     50|  case XML_TOK_NAME_ASTERISK:
  ------------------
  |  |  100|     50|#  define XML_TOK_NAME_ASTERISK 31        /* name* */
  ------------------
  |  Branch (973:3): [True: 50, False: 1.41k]
  ------------------
  974|     50|    state->handler = element7;
  975|     50|    return XML_ROLE_CONTENT_ELEMENT_REP;
  976|     78|  case XML_TOK_NAME_PLUS:
  ------------------
  |  |  101|     78|#  define XML_TOK_NAME_PLUS 32            /* name+ */
  ------------------
  |  Branch (976:3): [True: 78, False: 1.38k]
  ------------------
  977|     78|    state->handler = element7;
  978|     78|    return XML_ROLE_CONTENT_ELEMENT_PLUS;
  979|  1.46k|  }
  980|     15|  return common(state, tok);
  981|  1.46k|}
xmlrole.c:element3:
  985|    383|         const ENCODING *enc) {
  986|    383|  UNUSED_P(ptr);
  ------------------
  |  |  101|    383|#    define UNUSED_P(p) (void)p
  ------------------
  987|    383|  UNUSED_P(end);
  ------------------
  |  |  101|    383|#    define UNUSED_P(p) (void)p
  ------------------
  988|    383|  UNUSED_P(enc);
  ------------------
  |  |  101|    383|#    define UNUSED_P(p) (void)p
  ------------------
  989|    383|  switch (tok) {
  ------------------
  |  Branch (989:11): [True: 368, False: 15]
  ------------------
  990|     84|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|     84|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (990:3): [True: 84, False: 299]
  ------------------
  991|     84|    return XML_ROLE_ELEMENT_NONE;
  992|    142|  case XML_TOK_CLOSE_PAREN:
  ------------------
  |  |   91|    142|#  define XML_TOK_CLOSE_PAREN 24
  ------------------
  |  Branch (992:3): [True: 142, False: 241]
  ------------------
  993|    142|    state->handler = declClose;
  994|    142|    state->role_none = XML_ROLE_ELEMENT_NONE;
  995|    142|    return XML_ROLE_GROUP_CLOSE;
  996|     34|  case XML_TOK_CLOSE_PAREN_ASTERISK:
  ------------------
  |  |  105|     34|#  define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */
  ------------------
  |  Branch (996:3): [True: 34, False: 349]
  ------------------
  997|     34|    state->handler = declClose;
  998|     34|    state->role_none = XML_ROLE_ELEMENT_NONE;
  999|     34|    return XML_ROLE_GROUP_CLOSE_REP;
 1000|    108|  case XML_TOK_OR:
  ------------------
  |  |   88|    108|#  define XML_TOK_OR 21         /* | */
  ------------------
  |  Branch (1000:3): [True: 108, False: 275]
  ------------------
 1001|    108|    state->handler = element4;
 1002|    108|    return XML_ROLE_ELEMENT_NONE;
 1003|    383|  }
 1004|     15|  return common(state, tok);
 1005|    383|}
xmlrole.c:element4:
 1009|  1.35k|         const ENCODING *enc) {
 1010|  1.35k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  1.35k|#    define UNUSED_P(p) (void)p
  ------------------
 1011|  1.35k|  UNUSED_P(end);
  ------------------
  |  |  101|  1.35k|#    define UNUSED_P(p) (void)p
  ------------------
 1012|  1.35k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.35k|#    define UNUSED_P(p) (void)p
  ------------------
 1013|  1.35k|  switch (tok) {
  ------------------
  |  Branch (1013:11): [True: 1.32k, False: 29]
  ------------------
 1014|    274|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    274|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (1014:3): [True: 274, False: 1.08k]
  ------------------
 1015|    274|    return XML_ROLE_ELEMENT_NONE;
 1016|    857|  case XML_TOK_NAME:
  ------------------
  |  |   85|    857|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (1016:3): [True: 857, False: 497]
  ------------------
 1017|  1.05k|  case XML_TOK_PREFIXED_NAME:
  ------------------
  |  |  118|  1.05k|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
  |  Branch (1017:3): [True: 194, False: 1.16k]
  ------------------
 1018|  1.05k|    state->handler = element5;
 1019|  1.05k|    return XML_ROLE_CONTENT_ELEMENT;
 1020|  1.35k|  }
 1021|     29|  return common(state, tok);
 1022|  1.35k|}
xmlrole.c:element5:
 1026|  1.37k|         const ENCODING *enc) {
 1027|  1.37k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  1.37k|#    define UNUSED_P(p) (void)p
  ------------------
 1028|  1.37k|  UNUSED_P(end);
  ------------------
  |  |  101|  1.37k|#    define UNUSED_P(p) (void)p
  ------------------
 1029|  1.37k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.37k|#    define UNUSED_P(p) (void)p
  ------------------
 1030|  1.37k|  switch (tok) {
  ------------------
  |  Branch (1030:11): [True: 1.34k, False: 22]
  ------------------
 1031|    320|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    320|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (1031:3): [True: 320, False: 1.05k]
  ------------------
 1032|    320|    return XML_ROLE_ELEMENT_NONE;
 1033|     56|  case XML_TOK_CLOSE_PAREN_ASTERISK:
  ------------------
  |  |  105|     56|#  define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */
  ------------------
  |  Branch (1033:3): [True: 56, False: 1.31k]
  ------------------
 1034|     56|    state->handler = declClose;
 1035|     56|    state->role_none = XML_ROLE_ELEMENT_NONE;
 1036|     56|    return XML_ROLE_GROUP_CLOSE_REP;
 1037|    973|  case XML_TOK_OR:
  ------------------
  |  |   88|    973|#  define XML_TOK_OR 21         /* | */
  ------------------
  |  Branch (1037:3): [True: 973, False: 398]
  ------------------
 1038|    973|    state->handler = element4;
 1039|    973|    return XML_ROLE_ELEMENT_NONE;
 1040|  1.37k|  }
 1041|     22|  return common(state, tok);
 1042|  1.37k|}
xmlrole.c:element6:
 1046|  10.8k|         const ENCODING *enc) {
 1047|  10.8k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  10.8k|#    define UNUSED_P(p) (void)p
  ------------------
 1048|  10.8k|  UNUSED_P(end);
  ------------------
  |  |  101|  10.8k|#    define UNUSED_P(p) (void)p
  ------------------
 1049|  10.8k|  UNUSED_P(enc);
  ------------------
  |  |  101|  10.8k|#    define UNUSED_P(p) (void)p
  ------------------
 1050|  10.8k|  switch (tok) {
  ------------------
  |  Branch (1050:11): [True: 10.8k, False: 68]
  ------------------
 1051|    649|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    649|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (1051:3): [True: 649, False: 10.2k]
  ------------------
 1052|    649|    return XML_ROLE_ELEMENT_NONE;
 1053|  6.76k|  case XML_TOK_OPEN_PAREN:
  ------------------
  |  |   90|  6.76k|#  define XML_TOK_OPEN_PAREN 23
  ------------------
  |  Branch (1053:3): [True: 6.76k, False: 4.11k]
  ------------------
 1054|  6.76k|    state->level += 1;
 1055|  6.76k|    return XML_ROLE_GROUP_OPEN;
 1056|  2.08k|  case XML_TOK_NAME:
  ------------------
  |  |   85|  2.08k|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (1056:3): [True: 2.08k, False: 8.78k]
  ------------------
 1057|  2.69k|  case XML_TOK_PREFIXED_NAME:
  ------------------
  |  |  118|  2.69k|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
  |  Branch (1057:3): [True: 603, False: 10.2k]
  ------------------
 1058|  2.69k|    state->handler = element7;
 1059|  2.69k|    return XML_ROLE_CONTENT_ELEMENT;
 1060|    205|  case XML_TOK_NAME_QUESTION:
  ------------------
  |  |   99|    205|#  define XML_TOK_NAME_QUESTION 30        /* name? */
  ------------------
  |  Branch (1060:3): [True: 205, False: 10.6k]
  ------------------
 1061|    205|    state->handler = element7;
 1062|    205|    return XML_ROLE_CONTENT_ELEMENT_OPT;
 1063|    245|  case XML_TOK_NAME_ASTERISK:
  ------------------
  |  |  100|    245|#  define XML_TOK_NAME_ASTERISK 31        /* name* */
  ------------------
  |  Branch (1063:3): [True: 245, False: 10.6k]
  ------------------
 1064|    245|    state->handler = element7;
 1065|    245|    return XML_ROLE_CONTENT_ELEMENT_REP;
 1066|    255|  case XML_TOK_NAME_PLUS:
  ------------------
  |  |  101|    255|#  define XML_TOK_NAME_PLUS 32            /* name+ */
  ------------------
  |  Branch (1066:3): [True: 255, False: 10.6k]
  ------------------
 1067|    255|    state->handler = element7;
 1068|    255|    return XML_ROLE_CONTENT_ELEMENT_PLUS;
 1069|  10.8k|  }
 1070|     68|  return common(state, tok);
 1071|  10.8k|}
xmlrole.c:element7:
 1075|  6.92k|         const ENCODING *enc) {
 1076|  6.92k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  6.92k|#    define UNUSED_P(p) (void)p
  ------------------
 1077|  6.92k|  UNUSED_P(end);
  ------------------
  |  |  101|  6.92k|#    define UNUSED_P(p) (void)p
  ------------------
 1078|  6.92k|  UNUSED_P(enc);
  ------------------
  |  |  101|  6.92k|#    define UNUSED_P(p) (void)p
  ------------------
 1079|  6.92k|  switch (tok) {
  ------------------
  |  Branch (1079:11): [True: 6.74k, False: 180]
  ------------------
 1080|  1.03k|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|  1.03k|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (1080:3): [True: 1.03k, False: 5.89k]
  ------------------
 1081|  1.03k|    return XML_ROLE_ELEMENT_NONE;
 1082|  1.70k|  case XML_TOK_CLOSE_PAREN:
  ------------------
  |  |   91|  1.70k|#  define XML_TOK_CLOSE_PAREN 24
  ------------------
  |  Branch (1082:3): [True: 1.70k, False: 5.22k]
  ------------------
 1083|  1.70k|    state->level -= 1;
 1084|  1.70k|    if (state->level == 0) {
  ------------------
  |  Branch (1084:9): [True: 490, False: 1.21k]
  ------------------
 1085|    490|      state->handler = declClose;
 1086|    490|      state->role_none = XML_ROLE_ELEMENT_NONE;
 1087|    490|    }
 1088|  1.70k|    return XML_ROLE_GROUP_CLOSE;
 1089|    189|  case XML_TOK_CLOSE_PAREN_ASTERISK:
  ------------------
  |  |  105|    189|#  define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */
  ------------------
  |  Branch (1089:3): [True: 189, False: 6.73k]
  ------------------
 1090|    189|    state->level -= 1;
 1091|    189|    if (state->level == 0) {
  ------------------
  |  Branch (1091:9): [True: 76, False: 113]
  ------------------
 1092|     76|      state->handler = declClose;
 1093|     76|      state->role_none = XML_ROLE_ELEMENT_NONE;
 1094|     76|    }
 1095|    189|    return XML_ROLE_GROUP_CLOSE_REP;
 1096|    253|  case XML_TOK_CLOSE_PAREN_QUESTION:
  ------------------
  |  |  104|    253|#  define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */
  ------------------
  |  Branch (1096:3): [True: 253, False: 6.67k]
  ------------------
 1097|    253|    state->level -= 1;
 1098|    253|    if (state->level == 0) {
  ------------------
  |  Branch (1098:9): [True: 146, False: 107]
  ------------------
 1099|    146|      state->handler = declClose;
 1100|    146|      state->role_none = XML_ROLE_ELEMENT_NONE;
 1101|    146|    }
 1102|    253|    return XML_ROLE_GROUP_CLOSE_OPT;
 1103|    326|  case XML_TOK_CLOSE_PAREN_PLUS:
  ------------------
  |  |  106|    326|#  define XML_TOK_CLOSE_PAREN_PLUS 37     /* )+ */
  ------------------
  |  Branch (1103:3): [True: 326, False: 6.60k]
  ------------------
 1104|    326|    state->level -= 1;
 1105|    326|    if (state->level == 0) {
  ------------------
  |  Branch (1105:9): [True: 90, False: 236]
  ------------------
 1106|     90|      state->handler = declClose;
 1107|     90|      state->role_none = XML_ROLE_ELEMENT_NONE;
 1108|     90|    }
 1109|    326|    return XML_ROLE_GROUP_CLOSE_PLUS;
 1110|  1.63k|  case XML_TOK_COMMA:
  ------------------
  |  |  107|  1.63k|#  define XML_TOK_COMMA 38
  ------------------
  |  Branch (1110:3): [True: 1.63k, False: 5.29k]
  ------------------
 1111|  1.63k|    state->handler = element6;
 1112|  1.63k|    return XML_ROLE_GROUP_SEQUENCE;
 1113|  1.61k|  case XML_TOK_OR:
  ------------------
  |  |   88|  1.61k|#  define XML_TOK_OR 21         /* | */
  ------------------
  |  Branch (1113:3): [True: 1.61k, False: 5.31k]
  ------------------
 1114|  1.61k|    state->handler = element6;
 1115|  1.61k|    return XML_ROLE_GROUP_CHOICE;
 1116|  6.92k|  }
 1117|    180|  return common(state, tok);
 1118|  6.92k|}
xmlrole.c:notation0:
  617|  1.74k|          const ENCODING *enc) {
  618|  1.74k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  1.74k|#    define UNUSED_P(p) (void)p
  ------------------
  619|  1.74k|  UNUSED_P(end);
  ------------------
  |  |  101|  1.74k|#    define UNUSED_P(p) (void)p
  ------------------
  620|  1.74k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.74k|#    define UNUSED_P(p) (void)p
  ------------------
  621|  1.74k|  switch (tok) {
  ------------------
  |  Branch (621:11): [True: 1.74k, False: 4]
  ------------------
  622|    874|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    874|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (622:3): [True: 874, False: 870]
  ------------------
  623|    874|    return XML_ROLE_NOTATION_NONE;
  624|    866|  case XML_TOK_NAME:
  ------------------
  |  |   85|    866|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (624:3): [True: 866, False: 878]
  ------------------
  625|    866|    state->handler = notation1;
  626|    866|    return XML_ROLE_NOTATION_NAME;
  627|  1.74k|  }
  628|      4|  return common(state, tok);
  629|  1.74k|}
xmlrole.c:notation1:
  633|  1.72k|          const ENCODING *enc) {
  634|  1.72k|  switch (tok) {
  ------------------
  |  Branch (634:11): [True: 1.72k, False: 7]
  ------------------
  635|    863|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    863|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (635:3): [True: 863, False: 865]
  ------------------
  636|    863|    return XML_ROLE_NOTATION_NONE;
  637|    858|  case XML_TOK_NAME:
  ------------------
  |  |   85|    858|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (637:3): [True: 858, False: 870]
  ------------------
  638|    858|    if (XmlNameMatchesAscii(enc, ptr, end, KW_SYSTEM)) {
  ------------------
  |  |  254|    858|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 317, False: 541]
  |  |  ------------------
  ------------------
  639|    317|      state->handler = notation3;
  640|    317|      return XML_ROLE_NOTATION_NONE;
  641|    317|    }
  642|    541|    if (XmlNameMatchesAscii(enc, ptr, end, KW_PUBLIC)) {
  ------------------
  |  |  254|    541|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 540, False: 1]
  |  |  ------------------
  ------------------
  643|    540|      state->handler = notation2;
  644|    540|      return XML_ROLE_NOTATION_NONE;
  645|    540|    }
  646|      1|    break;
  647|  1.72k|  }
  648|      8|  return common(state, tok);
  649|  1.72k|}
xmlrole.c:notation3:
  669|    624|          const ENCODING *enc) {
  670|    624|  UNUSED_P(ptr);
  ------------------
  |  |  101|    624|#    define UNUSED_P(p) (void)p
  ------------------
  671|    624|  UNUSED_P(end);
  ------------------
  |  |  101|    624|#    define UNUSED_P(p) (void)p
  ------------------
  672|    624|  UNUSED_P(enc);
  ------------------
  |  |  101|    624|#    define UNUSED_P(p) (void)p
  ------------------
  673|    624|  switch (tok) {
  ------------------
  |  Branch (673:11): [True: 618, False: 6]
  ------------------
  674|    315|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    315|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (674:3): [True: 315, False: 309]
  ------------------
  675|    315|    return XML_ROLE_NOTATION_NONE;
  676|    303|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|    303|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (676:3): [True: 303, False: 321]
  ------------------
  677|    303|    state->handler = declClose;
  678|    303|    state->role_none = XML_ROLE_NOTATION_NONE;
  679|    303|    return XML_ROLE_NOTATION_SYSTEM_ID;
  680|    624|  }
  681|      6|  return common(state, tok);
  682|    624|}
xmlrole.c:notation2:
  653|  1.07k|          const ENCODING *enc) {
  654|  1.07k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  1.07k|#    define UNUSED_P(p) (void)p
  ------------------
  655|  1.07k|  UNUSED_P(end);
  ------------------
  |  |  101|  1.07k|#    define UNUSED_P(p) (void)p
  ------------------
  656|  1.07k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.07k|#    define UNUSED_P(p) (void)p
  ------------------
  657|  1.07k|  switch (tok) {
  ------------------
  |  Branch (657:11): [True: 1.07k, False: 7]
  ------------------
  658|    538|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    538|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (658:3): [True: 538, False: 540]
  ------------------
  659|    538|    return XML_ROLE_NOTATION_NONE;
  660|    533|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|    533|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (660:3): [True: 533, False: 545]
  ------------------
  661|    533|    state->handler = notation4;
  662|    533|    return XML_ROLE_NOTATION_PUBLIC_ID;
  663|  1.07k|  }
  664|      7|  return common(state, tok);
  665|  1.07k|}
xmlrole.c:notation4:
  686|    700|          const ENCODING *enc) {
  687|    700|  UNUSED_P(ptr);
  ------------------
  |  |  101|    700|#    define UNUSED_P(p) (void)p
  ------------------
  688|    700|  UNUSED_P(end);
  ------------------
  |  |  101|    700|#    define UNUSED_P(p) (void)p
  ------------------
  689|    700|  UNUSED_P(enc);
  ------------------
  |  |  101|    700|#    define UNUSED_P(p) (void)p
  ------------------
  690|    700|  switch (tok) {
  ------------------
  |  Branch (690:11): [True: 699, False: 1]
  ------------------
  691|    187|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    187|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (691:3): [True: 187, False: 513]
  ------------------
  692|    187|    return XML_ROLE_NOTATION_NONE;
  693|    101|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|    101|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (693:3): [True: 101, False: 599]
  ------------------
  694|    101|    state->handler = declClose;
  695|    101|    state->role_none = XML_ROLE_NOTATION_NONE;
  696|    101|    return XML_ROLE_NOTATION_SYSTEM_ID;
  697|    411|  case XML_TOK_DECL_CLOSE:
  ------------------
  |  |   84|    411|#  define XML_TOK_DECL_CLOSE 17 /* > */
  ------------------
  |  Branch (697:3): [True: 411, False: 289]
  ------------------
  698|    411|    setTopLevel(state);
  ------------------
  |  |  118|    411|    ((state)->handler                                                          \
  |  |  119|    411|     = ((state)->documentEntity ? internalSubset : externalSubset1))
  |  |  ------------------
  |  |  |  Branch (119:9): [True: 411, False: 0]
  |  |  ------------------
  ------------------
  699|    411|    return XML_ROLE_NOTATION_NO_SYSTEM_ID;
  700|    700|  }
  701|      1|  return common(state, tok);
  702|    700|}
xmlrole.c:doctype5:
  320|  1.54k|         const ENCODING *enc) {
  321|  1.54k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  1.54k|#    define UNUSED_P(p) (void)p
  ------------------
  322|  1.54k|  UNUSED_P(end);
  ------------------
  |  |  101|  1.54k|#    define UNUSED_P(p) (void)p
  ------------------
  323|  1.54k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.54k|#    define UNUSED_P(p) (void)p
  ------------------
  324|  1.54k|  switch (tok) {
  ------------------
  |  Branch (324:11): [True: 1.54k, False: 6]
  ------------------
  325|      9|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|      9|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (325:3): [True: 9, False: 1.53k]
  ------------------
  326|      9|    return XML_ROLE_DOCTYPE_NONE;
  327|  1.53k|  case XML_TOK_DECL_CLOSE:
  ------------------
  |  |   84|  1.53k|#  define XML_TOK_DECL_CLOSE 17 /* > */
  ------------------
  |  Branch (327:3): [True: 1.53k, False: 15]
  ------------------
  328|  1.53k|    state->handler = prolog2;
  329|  1.53k|    return XML_ROLE_DOCTYPE_CLOSE;
  330|  1.54k|  }
  331|      6|  return common(state, tok);
  332|  1.54k|}
xmlrole.c:prolog2:
  206|  4.88k|        const ENCODING *enc) {
  207|  4.88k|  UNUSED_P(ptr);
  ------------------
  |  |  101|  4.88k|#    define UNUSED_P(p) (void)p
  ------------------
  208|  4.88k|  UNUSED_P(end);
  ------------------
  |  |  101|  4.88k|#    define UNUSED_P(p) (void)p
  ------------------
  209|  4.88k|  UNUSED_P(enc);
  ------------------
  |  |  101|  4.88k|#    define UNUSED_P(p) (void)p
  ------------------
  210|  4.88k|  switch (tok) {
  ------------------
  |  Branch (210:11): [True: 4.87k, False: 15]
  ------------------
  211|    282|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    282|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (211:3): [True: 282, False: 4.60k]
  ------------------
  212|    282|    return XML_ROLE_NONE;
  213|    572|  case XML_TOK_PI:
  ------------------
  |  |   76|    572|#  define XML_TOK_PI 11       /* processing instruction */
  ------------------
  |  Branch (213:3): [True: 572, False: 4.31k]
  ------------------
  214|    572|    return XML_ROLE_PI;
  215|    203|  case XML_TOK_COMMENT:
  ------------------
  |  |   78|    203|#  define XML_TOK_COMMENT 13
  ------------------
  |  Branch (215:3): [True: 203, False: 4.68k]
  ------------------
  216|    203|    return XML_ROLE_COMMENT;
  217|  3.81k|  case XML_TOK_INSTANCE_START:
  ------------------
  |  |   96|  3.81k|#  define XML_TOK_INSTANCE_START 29
  ------------------
  |  Branch (217:3): [True: 3.81k, False: 1.07k]
  ------------------
  218|  3.81k|    state->handler = error;
  219|  3.81k|    return XML_ROLE_INSTANCE_START;
  220|  4.88k|  }
  221|     15|  return common(state, tok);
  222|  4.88k|}
xmlrole.c:doctype3:
  285|    560|         const ENCODING *enc) {
  286|    560|  UNUSED_P(ptr);
  ------------------
  |  |  101|    560|#    define UNUSED_P(p) (void)p
  ------------------
  287|    560|  UNUSED_P(end);
  ------------------
  |  |  101|    560|#    define UNUSED_P(p) (void)p
  ------------------
  288|    560|  UNUSED_P(enc);
  ------------------
  |  |  101|    560|#    define UNUSED_P(p) (void)p
  ------------------
  289|    560|  switch (tok) {
  ------------------
  |  Branch (289:11): [True: 361, False: 199]
  ------------------
  290|    183|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    183|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (290:3): [True: 183, False: 377]
  ------------------
  291|    183|    return XML_ROLE_DOCTYPE_NONE;
  292|    178|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|    178|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (292:3): [True: 178, False: 382]
  ------------------
  293|    178|    state->handler = doctype4;
  294|    178|    return XML_ROLE_DOCTYPE_SYSTEM_ID;
  295|    560|  }
  296|    199|  return common(state, tok);
  297|    560|}
xmlrole.c:doctype4:
  301|    261|         const ENCODING *enc) {
  302|    261|  UNUSED_P(ptr);
  ------------------
  |  |  101|    261|#    define UNUSED_P(p) (void)p
  ------------------
  303|    261|  UNUSED_P(end);
  ------------------
  |  |  101|    261|#    define UNUSED_P(p) (void)p
  ------------------
  304|    261|  UNUSED_P(enc);
  ------------------
  |  |  101|    261|#    define UNUSED_P(p) (void)p
  ------------------
  305|    261|  switch (tok) {
  ------------------
  |  Branch (305:11): [True: 255, False: 6]
  ------------------
  306|     84|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|     84|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (306:3): [True: 84, False: 177]
  ------------------
  307|     84|    return XML_ROLE_DOCTYPE_NONE;
  308|     85|  case XML_TOK_OPEN_BRACKET:
  ------------------
  |  |   92|     85|#  define XML_TOK_OPEN_BRACKET 25
  ------------------
  |  Branch (308:3): [True: 85, False: 176]
  ------------------
  309|     85|    state->handler = internalSubset;
  310|     85|    return XML_ROLE_DOCTYPE_INTERNAL_SUBSET;
  311|     86|  case XML_TOK_DECL_CLOSE:
  ------------------
  |  |   84|     86|#  define XML_TOK_DECL_CLOSE 17 /* > */
  ------------------
  |  Branch (311:3): [True: 86, False: 175]
  ------------------
  312|     86|    state->handler = prolog2;
  313|     86|    return XML_ROLE_DOCTYPE_CLOSE;
  314|    261|  }
  315|      6|  return common(state, tok);
  316|    261|}
xmlrole.c:doctype2:
  269|    510|         const ENCODING *enc) {
  270|    510|  UNUSED_P(ptr);
  ------------------
  |  |  101|    510|#    define UNUSED_P(p) (void)p
  ------------------
  271|    510|  UNUSED_P(end);
  ------------------
  |  |  101|    510|#    define UNUSED_P(p) (void)p
  ------------------
  272|    510|  UNUSED_P(enc);
  ------------------
  |  |  101|    510|#    define UNUSED_P(p) (void)p
  ------------------
  273|    510|  switch (tok) {
  ------------------
  |  Branch (273:11): [True: 508, False: 2]
  ------------------
  274|    256|  case XML_TOK_PROLOG_S:
  ------------------
  |  |   82|    256|#  define XML_TOK_PROLOG_S 15
  ------------------
  |  Branch (274:3): [True: 256, False: 254]
  ------------------
  275|    256|    return XML_ROLE_DOCTYPE_NONE;
  276|    252|  case XML_TOK_LITERAL:
  ------------------
  |  |   94|    252|#  define XML_TOK_LITERAL 27
  ------------------
  |  Branch (276:3): [True: 252, False: 258]
  ------------------
  277|    252|    state->handler = doctype3;
  278|    252|    return XML_ROLE_DOCTYPE_PUBLIC_ID;
  279|    510|  }
  280|      2|  return common(state, tok);
  281|    510|}
xmlrole.c:common:
 1226|  1.52k|common(PROLOG_STATE *state, int tok) {
 1227|  1.52k|#ifdef XML_DTD
 1228|  1.52k|  if (! state->documentEntity && tok == XML_TOK_PARAM_ENTITY_REF)
  ------------------
  |  |   95|      0|#  define XML_TOK_PARAM_ENTITY_REF 28
  ------------------
  |  Branch (1228:7): [True: 0, False: 1.52k]
  |  Branch (1228:34): [True: 0, False: 0]
  ------------------
 1229|      0|    return XML_ROLE_INNER_PARAM_ENTITY_REF;
 1230|       |#else
 1231|       |  UNUSED_P(tok);
 1232|       |#endif
 1233|  1.52k|  state->handler = error;
 1234|  1.52k|  return XML_ROLE_ERROR;
 1235|  1.52k|}

_INTERNAL_trim_to_complete_utf8_characters:
  272|  4.17M|                                           const char **fromLimRef) {
  273|  4.17M|  const char *fromLim = *fromLimRef;
  274|  4.17M|  size_t walked = 0;
  275|  4.18M|  for (; fromLim > from; fromLim--, walked++) {
  ------------------
  |  Branch (275:10): [True: 4.16M, False: 23.4k]
  ------------------
  276|  4.16M|    const unsigned char prev = (unsigned char)fromLim[-1];
  277|  4.16M|    if ((prev & 0xf8u)
  ------------------
  |  Branch (277:9): [True: 2.26k, False: 4.16M]
  ------------------
  278|  4.16M|        == 0xf0u) { /* 4-byte character, lead by 0b11110xxx byte */
  279|  2.26k|      if (walked + 1 >= 4) {
  ------------------
  |  Branch (279:11): [True: 2.18k, False: 85]
  ------------------
  280|  2.18k|        fromLim += 4 - 1;
  281|  2.18k|        break;
  282|  2.18k|      } else {
  283|     85|        walked = 0;
  284|     85|      }
  285|  4.16M|    } else if ((prev & 0xf0u)
  ------------------
  |  Branch (285:16): [True: 2.45k, False: 4.16M]
  ------------------
  286|  4.16M|               == 0xe0u) { /* 3-byte character, lead by 0b1110xxxx byte */
  287|  2.45k|      if (walked + 1 >= 3) {
  ------------------
  |  Branch (287:11): [True: 2.35k, False: 97]
  ------------------
  288|  2.35k|        fromLim += 3 - 1;
  289|  2.35k|        break;
  290|  2.35k|      } else {
  291|     97|        walked = 0;
  292|     97|      }
  293|  4.16M|    } else if ((prev & 0xe0u)
  ------------------
  |  Branch (293:16): [True: 3.79k, False: 4.15M]
  ------------------
  294|  4.16M|               == 0xc0u) { /* 2-byte character, lead by 0b110xxxxx byte */
  295|  3.79k|      if (walked + 1 >= 2) {
  ------------------
  |  Branch (295:11): [True: 3.66k, False: 132]
  ------------------
  296|  3.66k|        fromLim += 2 - 1;
  297|  3.66k|        break;
  298|  3.66k|      } else {
  299|    132|        walked = 0;
  300|    132|      }
  301|  4.15M|    } else if ((prev & 0x80u)
  ------------------
  |  Branch (301:16): [True: 4.14M, False: 15.0k]
  ------------------
  302|  4.15M|               == 0x00u) { /* 1-byte character, matching 0b0xxxxxxx */
  303|  4.14M|      break;
  304|  4.14M|    }
  305|  4.16M|  }
  306|  4.17M|  *fromLimRef = fromLim;
  307|  4.17M|}
XmlUtf8Encode:
 1181|  3.09k|XmlUtf8Encode(int c, char *buf) {
 1182|  3.09k|  enum {
 1183|       |    /* minN is minimum legal resulting value for N byte sequence */
 1184|  3.09k|    min2 = 0x80,
 1185|  3.09k|    min3 = 0x800,
 1186|  3.09k|    min4 = 0x10000
 1187|  3.09k|  };
 1188|       |
 1189|  3.09k|  if (c < 0)
  ------------------
  |  Branch (1189:7): [True: 0, False: 3.09k]
  ------------------
 1190|      0|    return 0; /* LCOV_EXCL_LINE: this case is always eliminated beforehand */
 1191|  3.09k|  if (c < min2) {
  ------------------
  |  Branch (1191:7): [True: 1.18k, False: 1.90k]
  ------------------
 1192|  1.18k|    buf[0] = (char)(c | UTF8_cval1);
 1193|  1.18k|    return 1;
 1194|  1.18k|  }
 1195|  1.90k|  if (c < min3) {
  ------------------
  |  Branch (1195:7): [True: 547, False: 1.36k]
  ------------------
 1196|    547|    buf[0] = (char)((c >> 6) | UTF8_cval2);
 1197|    547|    buf[1] = (char)((c & 0x3f) | 0x80);
 1198|    547|    return 2;
 1199|    547|  }
 1200|  1.36k|  if (c < min4) {
  ------------------
  |  Branch (1200:7): [True: 841, False: 520]
  ------------------
 1201|    841|    buf[0] = (char)((c >> 12) | UTF8_cval3);
 1202|    841|    buf[1] = (char)(((c >> 6) & 0x3f) | 0x80);
 1203|    841|    buf[2] = (char)((c & 0x3f) | 0x80);
 1204|    841|    return 3;
 1205|    841|  }
 1206|    520|  if (c < 0x110000) {
  ------------------
  |  Branch (1206:7): [True: 520, False: 0]
  ------------------
 1207|    520|    buf[0] = (char)((c >> 18) | UTF8_cval4);
 1208|    520|    buf[1] = (char)(((c >> 12) & 0x3f) | 0x80);
 1209|    520|    buf[2] = (char)(((c >> 6) & 0x3f) | 0x80);
 1210|    520|    buf[3] = (char)((c & 0x3f) | 0x80);
 1211|    520|    return 4;
 1212|    520|  }
 1213|      0|  return 0; /* LCOV_EXCL_LINE: this case too is eliminated before calling */
 1214|    520|}
xmltok.c:latin1_toUtf8:
  448|  57.0k|              char **toP, const char *toLim) {
  449|  57.0k|  UNUSED_P(enc);
  ------------------
  |  |  101|  57.0k|#    define UNUSED_P(p) (void)p
  ------------------
  450|   213k|  for (;;) {
  451|   213k|    unsigned char c;
  452|   213k|    if (*fromP == fromLim)
  ------------------
  |  Branch (452:9): [True: 52.3k, False: 160k]
  ------------------
  453|  52.3k|      return XML_CONVERT_COMPLETED;
  454|   160k|    c = (unsigned char)**fromP;
  455|   160k|    if (c & 0x80) {
  ------------------
  |  Branch (455:9): [True: 8.82k, False: 152k]
  ------------------
  456|  8.82k|      if (toLim - *toP < 2)
  ------------------
  |  Branch (456:11): [True: 96, False: 8.72k]
  ------------------
  457|     96|        return XML_CONVERT_OUTPUT_EXHAUSTED;
  458|  8.72k|      *(*toP)++ = (char)((c >> 6) | UTF8_cval2);
  459|  8.72k|      *(*toP)++ = (char)((c & 0x3f) | 0x80);
  460|  8.72k|      (*fromP)++;
  461|   152k|    } else {
  462|   152k|      if (*toP == toLim)
  ------------------
  |  Branch (462:11): [True: 4.70k, False: 147k]
  ------------------
  463|  4.70k|        return XML_CONVERT_OUTPUT_EXHAUSTED;
  464|   147k|      *(*toP)++ = *(*fromP)++;
  465|   147k|    }
  466|   160k|  }
  467|  57.0k|}
xmltok.c:checkCharRefNumber:
 1157|  5.81k|checkCharRefNumber(int result) {
 1158|  5.81k|  switch (result >> 8) {
  ------------------
  |  Branch (1158:11): [True: 2.86k, False: 2.95k]
  ------------------
 1159|      2|  case 0xD8:
  ------------------
  |  Branch (1159:3): [True: 2, False: 5.81k]
  ------------------
 1160|      4|  case 0xD9:
  ------------------
  |  Branch (1160:3): [True: 2, False: 5.81k]
  ------------------
 1161|      6|  case 0xDA:
  ------------------
  |  Branch (1161:3): [True: 2, False: 5.81k]
  ------------------
 1162|      8|  case 0xDB:
  ------------------
  |  Branch (1162:3): [True: 2, False: 5.81k]
  ------------------
 1163|     10|  case 0xDC:
  ------------------
  |  Branch (1163:3): [True: 2, False: 5.81k]
  ------------------
 1164|     16|  case 0xDD:
  ------------------
  |  Branch (1164:3): [True: 6, False: 5.81k]
  ------------------
 1165|     18|  case 0xDE:
  ------------------
  |  Branch (1165:3): [True: 2, False: 5.81k]
  ------------------
 1166|     20|  case 0xDF:
  ------------------
  |  Branch (1166:3): [True: 2, False: 5.81k]
  ------------------
 1167|     20|    return -1;
 1168|  2.43k|  case 0:
  ------------------
  |  Branch (1168:3): [True: 2.43k, False: 3.38k]
  ------------------
 1169|  2.43k|    if (latin1_encoding.type[result] == BT_NONXML)
  ------------------
  |  Branch (1169:9): [True: 70, False: 2.36k]
  ------------------
 1170|     70|      return -1;
 1171|  2.36k|    break;
 1172|  2.36k|  case 0xFF:
  ------------------
  |  Branch (1172:3): [True: 408, False: 5.41k]
  ------------------
 1173|    408|    if (result == 0xFFFE || result == 0xFFFF)
  ------------------
  |  Branch (1173:9): [True: 2, False: 406]
  |  Branch (1173:29): [True: 6, False: 400]
  ------------------
 1174|      8|      return -1;
 1175|    400|    break;
 1176|  5.81k|  }
 1177|  5.72k|  return result;
 1178|  5.81k|}
xmltok.c:utf8_toUtf8:
  311|  4.17M|            char **toP, const char *toLim) {
  312|  4.17M|  bool input_incomplete = false;
  313|  4.17M|  bool output_exhausted = false;
  314|       |
  315|       |  /* Avoid copying partial characters (due to limited space). */
  316|  4.17M|  const ptrdiff_t bytesAvailable = fromLim - *fromP;
  317|  4.17M|  const ptrdiff_t bytesStorable = toLim - *toP;
  318|  4.17M|  UNUSED_P(enc);
  ------------------
  |  |  101|  4.17M|#    define UNUSED_P(p) (void)p
  ------------------
  319|  4.17M|  if (bytesAvailable > bytesStorable) {
  ------------------
  |  Branch (319:7): [True: 10.8k, False: 4.16M]
  ------------------
  320|  10.8k|    fromLim = *fromP + bytesStorable;
  321|  10.8k|    output_exhausted = true;
  322|  10.8k|  }
  323|       |
  324|       |  /* Avoid copying partial characters (from incomplete input). */
  325|  4.17M|  {
  326|  4.17M|    const char *const fromLimBefore = fromLim;
  327|  4.17M|    _INTERNAL_trim_to_complete_utf8_characters(*fromP, &fromLim);
  328|  4.17M|    if (fromLim < fromLimBefore) {
  ------------------
  |  Branch (328:9): [True: 314, False: 4.17M]
  ------------------
  329|    314|      input_incomplete = true;
  330|    314|    }
  331|  4.17M|  }
  332|       |
  333|  4.17M|  {
  334|  4.17M|    const ptrdiff_t bytesToCopy = fromLim - *fromP;
  335|  4.17M|    memcpy(*toP, *fromP, bytesToCopy);
  336|  4.17M|    *fromP += bytesToCopy;
  337|  4.17M|    *toP += bytesToCopy;
  338|  4.17M|  }
  339|       |
  340|  4.17M|  if (output_exhausted) /* needs to go first */
  ------------------
  |  Branch (340:7): [True: 10.8k, False: 4.16M]
  ------------------
  341|  10.8k|    return XML_CONVERT_OUTPUT_EXHAUSTED;
  342|  4.16M|  else if (input_incomplete)
  ------------------
  |  Branch (342:12): [True: 0, False: 4.16M]
  ------------------
  343|      0|    return XML_CONVERT_INPUT_INCOMPLETE;
  344|  4.16M|  else
  345|  4.16M|    return XML_CONVERT_COMPLETED;
  346|  4.17M|}
xmltok.c:utf8_isName2:
  148|  26.2k|utf8_isName2(const ENCODING *enc, const char *p) {
  149|  26.2k|  UNUSED_P(enc);
  ------------------
  |  |  101|  26.2k|#    define UNUSED_P(p) (void)p
  ------------------
  150|  26.2k|  return UTF8_GET_NAMING2(namePages, (const unsigned char *)p);
  ------------------
  |  |   94|  26.2k|  (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3)                         \
  |  |   95|  26.2k|                + ((((byte)[0]) & 3) << 1) + ((((byte)[1]) >> 5) & 1)]         \
  |  |   96|  26.2k|   & (1u << (((byte)[1]) & 0x1F)))
  ------------------
  151|  26.2k|}
xmltok.c:utf8_isName3:
  154|  1.26k|utf8_isName3(const ENCODING *enc, const char *p) {
  155|  1.26k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.26k|#    define UNUSED_P(p) (void)p
  ------------------
  156|  1.26k|  return UTF8_GET_NAMING3(namePages, (const unsigned char *)p);
  ------------------
  |  |  104|  1.26k|  (namingBitmap                                                                \
  |  |  105|  1.26k|       [((pages)[((((byte)[0]) & 0xF) << 4) + ((((byte)[1]) >> 2) & 0xF)]      \
  |  |  106|  1.26k|         << 3)                                                                 \
  |  |  107|  1.26k|        + ((((byte)[1]) & 3) << 1) + ((((byte)[2]) >> 5) & 1)]                 \
  |  |  108|  1.26k|   & (1u << (((byte)[2]) & 0x1F)))
  ------------------
  157|  1.26k|}
xmltok.c:isNever:
  141|     21|isNever(const ENCODING *enc, const char *p) {
  142|     21|  UNUSED_P(enc);
  ------------------
  |  |  101|     21|#    define UNUSED_P(p) (void)p
  ------------------
  143|     21|  UNUSED_P(p);
  ------------------
  |  |  101|     21|#    define UNUSED_P(p) (void)p
  ------------------
  144|     21|  return 0;
  145|     21|}
xmltok.c:utf8_isNmstrt2:
  162|  3.03k|utf8_isNmstrt2(const ENCODING *enc, const char *p) {
  163|  3.03k|  UNUSED_P(enc);
  ------------------
  |  |  101|  3.03k|#    define UNUSED_P(p) (void)p
  ------------------
  164|  3.03k|  return UTF8_GET_NAMING2(nmstrtPages, (const unsigned char *)p);
  ------------------
  |  |   94|  3.03k|  (namingBitmap[((pages)[(((byte)[0]) >> 2) & 7] << 3)                         \
  |  |   95|  3.03k|                + ((((byte)[0]) & 3) << 1) + ((((byte)[1]) >> 5) & 1)]         \
  |  |   96|  3.03k|   & (1u << (((byte)[1]) & 0x1F)))
  ------------------
  165|  3.03k|}
xmltok.c:utf8_isNmstrt3:
  168|  1.80k|utf8_isNmstrt3(const ENCODING *enc, const char *p) {
  169|  1.80k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.80k|#    define UNUSED_P(p) (void)p
  ------------------
  170|  1.80k|  return UTF8_GET_NAMING3(nmstrtPages, (const unsigned char *)p);
  ------------------
  |  |  104|  1.80k|  (namingBitmap                                                                \
  |  |  105|  1.80k|       [((pages)[((((byte)[0]) & 0xF) << 4) + ((((byte)[1]) >> 2) & 0xF)]      \
  |  |  106|  1.80k|         << 3)                                                                 \
  |  |  107|  1.80k|        + ((((byte)[1]) & 3) << 1) + ((((byte)[2]) >> 5) & 1)]                 \
  |  |  108|  1.80k|   & (1u << (((byte)[2]) & 0x1F)))
  ------------------
  171|  1.80k|}
xmltok.c:utf8_isInvalid2:
  176|  36.8k|utf8_isInvalid2(const ENCODING *enc, const char *p) {
  177|  36.8k|  UNUSED_P(enc);
  ------------------
  |  |  101|  36.8k|#    define UNUSED_P(p) (void)p
  ------------------
  178|  36.8k|  return UTF8_INVALID2((const unsigned char *)p);
  ------------------
  |  |  121|  36.8k|  ((*p) < 0xC2 || ((p)[1] & 0x80) == 0 || ((p)[1] & 0xC0) == 0xC0)
  |  |  ------------------
  |  |  |  Branch (121:4): [True: 18, False: 36.8k]
  |  |  |  Branch (121:19): [True: 189, False: 36.6k]
  |  |  |  Branch (121:43): [True: 9, False: 36.6k]
  |  |  ------------------
  ------------------
  179|  36.8k|}
xmltok.c:utf8_isInvalid3:
  182|  5.66k|utf8_isInvalid3(const ENCODING *enc, const char *p) {
  183|  5.66k|  UNUSED_P(enc);
  ------------------
  |  |  101|  5.66k|#    define UNUSED_P(p) (void)p
  ------------------
  184|  5.66k|  return UTF8_INVALID3((const unsigned char *)p);
  ------------------
  |  |  124|  5.66k|  (((p)[2] & 0x80) == 0                                                        \
  |  |  ------------------
  |  |  |  Branch (124:4): [True: 183, False: 5.48k]
  |  |  ------------------
  |  |  125|  5.66k|   || ((*p) == 0xEF && (p)[1] == 0xBF ? (p)[2] > 0xBD                          \
  |  |  ------------------
  |  |  |  Branch (125:7): [True: 15, False: 5.46k]
  |  |  |  Branch (125:8): [True: 464, False: 5.01k]
  |  |  |  Branch (125:24): [True: 238, False: 226]
  |  |  ------------------
  |  |  126|  5.48k|                                      : ((p)[2] & 0xC0) == 0xC0)               \
  |  |  127|  5.66k|   || ((*p) == 0xE0                                                            \
  |  |  ------------------
  |  |  |  Branch (127:7): [True: 41, False: 5.42k]
  |  |  |  Branch (127:8): [True: 1.60k, False: 3.85k]
  |  |  ------------------
  |  |  128|  5.46k|           ? (p)[1] < 0xA0 || ((p)[1] & 0xC0) == 0xC0                          \
  |  |  ------------------
  |  |  |  Branch (128:14): [True: 17, False: 1.59k]
  |  |  |  Branch (128:31): [True: 0, False: 1.59k]
  |  |  ------------------
  |  |  129|  5.46k|           : ((p)[1] & 0x80) == 0                                              \
  |  |  ------------------
  |  |  |  Branch (129:14): [True: 16, False: 3.84k]
  |  |  ------------------
  |  |  130|  3.85k|                 || ((*p) == 0xED ? (p)[1] > 0x9F : ((p)[1] & 0xC0) == 0xC0)))
  |  |  ------------------
  |  |  |  Branch (130:21): [True: 8, False: 3.83k]
  |  |  |  Branch (130:22): [True: 807, False: 3.03k]
  |  |  ------------------
  ------------------
  185|  5.66k|}
xmltok.c:utf8_isInvalid4:
  188|  2.16k|utf8_isInvalid4(const ENCODING *enc, const char *p) {
  189|  2.16k|  UNUSED_P(enc);
  ------------------
  |  |  101|  2.16k|#    define UNUSED_P(p) (void)p
  ------------------
  190|  2.16k|  return UTF8_INVALID4((const unsigned char *)p);
  ------------------
  |  |  133|  2.16k|  (((p)[3] & 0x80) == 0 || ((p)[3] & 0xC0) == 0xC0 || ((p)[2] & 0x80) == 0     \
  |  |  ------------------
  |  |  |  Branch (133:4): [True: 148, False: 2.02k]
  |  |  |  Branch (133:28): [True: 9, False: 2.01k]
  |  |  |  Branch (133:55): [True: 8, False: 2.00k]
  |  |  ------------------
  |  |  134|  2.16k|   || ((p)[2] & 0xC0) == 0xC0                                                  \
  |  |  ------------------
  |  |  |  Branch (134:7): [True: 4, False: 1.99k]
  |  |  ------------------
  |  |  135|  2.16k|   || ((*p) == 0xF0                                                            \
  |  |  ------------------
  |  |  |  Branch (135:7): [True: 28, False: 1.97k]
  |  |  |  Branch (135:8): [True: 1.02k, False: 972]
  |  |  ------------------
  |  |  136|  1.99k|           ? (p)[1] < 0x90 || ((p)[1] & 0xC0) == 0xC0                          \
  |  |  ------------------
  |  |  |  Branch (136:14): [True: 11, False: 1.01k]
  |  |  |  Branch (136:31): [True: 1, False: 1.01k]
  |  |  ------------------
  |  |  137|  1.99k|           : ((p)[1] & 0x80) == 0                                              \
  |  |  ------------------
  |  |  |  Branch (137:14): [True: 5, False: 967]
  |  |  ------------------
  |  |  138|    972|                 || ((*p) == 0xF4 ? (p)[1] > 0x8F : ((p)[1] & 0xC0) == 0xC0)))
  |  |  ------------------
  |  |  |  Branch (138:21): [True: 11, False: 956]
  |  |  |  Branch (138:22): [True: 283, False: 684]
  |  |  ------------------
  ------------------
  191|  2.16k|}
xmltok.c:unicode_byte_type:
  540|  97.5k|unicode_byte_type(char hi, char lo) {
  541|  97.5k|  switch ((unsigned char)hi) {
  ------------------
  |  Branch (541:11): [True: 10.2k, False: 87.2k]
  ------------------
  542|       |  /* 0xD800-0xDBFF first 16-bit code unit or high surrogate (W1) */
  543|  2.75k|  case 0xD8:
  ------------------
  |  Branch (543:3): [True: 2.75k, False: 94.8k]
  ------------------
  544|  4.32k|  case 0xD9:
  ------------------
  |  Branch (544:3): [True: 1.57k, False: 95.9k]
  ------------------
  545|  5.66k|  case 0xDA:
  ------------------
  |  Branch (545:3): [True: 1.34k, False: 96.2k]
  ------------------
  546|  6.79k|  case 0xDB:
  ------------------
  |  Branch (546:3): [True: 1.12k, False: 96.4k]
  ------------------
  547|  6.79k|    return BT_LEAD4;
  548|       |  /* 0xDC00-0xDFFF second 16-bit code unit or low surrogate (W2) */
  549|     56|  case 0xDC:
  ------------------
  |  Branch (549:3): [True: 56, False: 97.5k]
  ------------------
  550|    104|  case 0xDD:
  ------------------
  |  Branch (550:3): [True: 48, False: 97.5k]
  ------------------
  551|    162|  case 0xDE:
  ------------------
  |  Branch (551:3): [True: 58, False: 97.5k]
  ------------------
  552|    227|  case 0xDF:
  ------------------
  |  Branch (552:3): [True: 65, False: 97.4k]
  ------------------
  553|    227|    return BT_TRAIL;
  554|  3.25k|  case 0xFF:
  ------------------
  |  Branch (554:3): [True: 3.25k, False: 94.3k]
  ------------------
  555|  3.25k|    switch ((unsigned char)lo) {
  ------------------
  |  Branch (555:13): [True: 58, False: 3.19k]
  ------------------
  556|     57|    case 0xFF: /* noncharacter-FFFF */
  ------------------
  |  Branch (556:5): [True: 57, False: 3.20k]
  ------------------
  557|     58|    case 0xFE: /* noncharacter-FFFE */
  ------------------
  |  Branch (557:5): [True: 1, False: 3.25k]
  ------------------
  558|     58|      return BT_NONXML;
  559|  3.25k|    }
  560|  3.19k|    break;
  561|  97.5k|  }
  562|  90.4k|  return BT_NONASCII;
  563|  97.5k|}
xmltok.c:little2_toUtf8:
  568|  9.02k|      char **toP, const char *toLim) {                                         \
  569|  9.02k|    const char *from = *fromP;                                                 \
  570|  9.02k|    UNUSED_P(enc);                                                             \
  ------------------
  |  |  101|  9.02k|#    define UNUSED_P(p) (void)p
  ------------------
  571|  9.02k|    fromLim = from + (((fromLim - from) >> 1) << 1); /* shrink to even */      \
  572|  34.3k|    for (; from < fromLim; from += 2) {                                        \
  ------------------
  |  Branch (572:12): [True: 25.8k, False: 8.49k]
  ------------------
  573|  25.8k|      int plane;                                                               \
  574|  25.8k|      unsigned char lo2;                                                       \
  575|  25.8k|      unsigned char lo = GET_LO(from);                                         \
  ------------------
  |  |  664|  25.8k|#define GET_LO(ptr) ((unsigned char)(ptr)[0])
  ------------------
  576|  25.8k|      unsigned char hi = GET_HI(from);                                         \
  ------------------
  |  |  665|  25.8k|#define GET_HI(ptr) ((unsigned char)(ptr)[1])
  ------------------
  577|  25.8k|      switch (hi) {                                                            \
  578|  5.63k|      case 0:                                                                  \
  ------------------
  |  Branch (578:7): [True: 5.63k, False: 20.2k]
  ------------------
  579|  5.63k|        if (lo < 0x80) {                                                       \
  ------------------
  |  Branch (579:13): [True: 5.38k, False: 259]
  ------------------
  580|  5.38k|          if (*toP == toLim) {                                                 \
  ------------------
  |  Branch (580:15): [True: 300, False: 5.08k]
  ------------------
  581|    300|            *fromP = from;                                                     \
  582|    300|            return XML_CONVERT_OUTPUT_EXHAUSTED;                               \
  583|    300|          }                                                                    \
  584|  5.38k|          *(*toP)++ = lo;                                                      \
  585|  5.08k|          break;                                                               \
  586|  5.38k|        }                                                                      \
  587|  5.63k|        EXPAT_FALLTHROUGH;                                                     \
  ------------------
  |  |   47|    259|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  588|    541|      case 0x1:                                                                \
  ------------------
  |  Branch (588:7): [True: 282, False: 25.5k]
  ------------------
  589|    746|      case 0x2:                                                                \
  ------------------
  |  Branch (589:7): [True: 205, False: 25.6k]
  ------------------
  590|  1.06k|      case 0x3:                                                                \
  ------------------
  |  Branch (590:7): [True: 321, False: 25.5k]
  ------------------
  591|  1.43k|      case 0x4:                                                                \
  ------------------
  |  Branch (591:7): [True: 366, False: 25.4k]
  ------------------
  592|  1.67k|      case 0x5:                                                                \
  ------------------
  |  Branch (592:7): [True: 239, False: 25.6k]
  ------------------
  593|  1.87k|      case 0x6:                                                                \
  ------------------
  |  Branch (593:7): [True: 202, False: 25.6k]
  ------------------
  594|  2.07k|      case 0x7:                                                                \
  ------------------
  |  Branch (594:7): [True: 196, False: 25.6k]
  ------------------
  595|  2.07k|        if (toLim - *toP < 2) {                                                \
  ------------------
  |  Branch (595:13): [True: 89, False: 1.98k]
  ------------------
  596|     89|          *fromP = from;                                                       \
  597|     89|          return XML_CONVERT_OUTPUT_EXHAUSTED;                                 \
  598|     89|        }                                                                      \
  599|  2.07k|        *(*toP)++ = ((lo >> 6) | (hi << 2) | UTF8_cval2);                      \
  600|  1.98k|        *(*toP)++ = ((lo & 0x3f) | 0x80);                                      \
  601|  1.98k|        break;                                                                 \
  602|  17.4k|      default:                                                                 \
  ------------------
  |  Branch (602:7): [True: 17.4k, False: 8.40k]
  ------------------
  603|  17.4k|        if (toLim - *toP < 3) {                                                \
  ------------------
  |  Branch (603:13): [True: 135, False: 17.3k]
  ------------------
  604|    135|          *fromP = from;                                                       \
  605|    135|          return XML_CONVERT_OUTPUT_EXHAUSTED;                                 \
  606|    135|        }                                                                      \
  607|  17.4k|        /* 16 bits divided 4, 6, 6 amongst 3 bytes */                          \
  608|  17.4k|        *(*toP)++ = ((hi >> 4) | UTF8_cval3);                                  \
  609|  17.3k|        *(*toP)++ = (((hi & 0xf) << 2) | (lo >> 6) | 0x80);                    \
  610|  17.3k|        *(*toP)++ = ((lo & 0x3f) | 0x80);                                      \
  611|  17.3k|        break;                                                                 \
  612|  17.4k|      case 0xD8:                                                               \
  ------------------
  |  Branch (612:7): [True: 452, False: 25.4k]
  ------------------
  613|    622|      case 0xD9:                                                               \
  ------------------
  |  Branch (613:7): [True: 170, False: 25.6k]
  ------------------
  614|    823|      case 0xDA:                                                               \
  ------------------
  |  Branch (614:7): [True: 201, False: 25.6k]
  ------------------
  615|    959|      case 0xDB:                                                               \
  ------------------
  |  Branch (615:7): [True: 136, False: 25.7k]
  ------------------
  616|    959|        if (toLim - *toP < 4) {                                                \
  ------------------
  |  Branch (616:13): [True: 12, False: 947]
  ------------------
  617|     12|          *fromP = from;                                                       \
  618|     12|          return XML_CONVERT_OUTPUT_EXHAUSTED;                                 \
  619|     12|        }                                                                      \
  620|    959|        if (fromLim - from < 4) {                                              \
  ------------------
  |  Branch (620:13): [True: 0, False: 947]
  ------------------
  621|      0|          *fromP = from;                                                       \
  622|      0|          return XML_CONVERT_INPUT_INCOMPLETE;                                 \
  623|      0|        }                                                                      \
  624|    947|        plane = (((hi & 0x3) << 2) | ((lo >> 6) & 0x3)) + 1;                   \
  625|    947|        *(*toP)++ = (char)((plane >> 2) | UTF8_cval4);                         \
  626|    947|        *(*toP)++ = (((lo >> 2) & 0xF) | ((plane & 0x3) << 4) | 0x80);         \
  627|    947|        from += 2;                                                             \
  628|    947|        lo2 = GET_LO(from);                                                    \
  ------------------
  |  |  664|    947|#define GET_LO(ptr) ((unsigned char)(ptr)[0])
  ------------------
  629|    947|        *(*toP)++ = (((lo & 0x3) << 4) | ((GET_HI(from) & 0x3) << 2)           \
  ------------------
  |  |  665|    947|#define GET_HI(ptr) ((unsigned char)(ptr)[1])
  ------------------
  630|    947|                     | (lo2 >> 6) | 0x80);                                     \
  631|    947|        *(*toP)++ = ((lo2 & 0x3f) | 0x80);                                     \
  632|    947|        break;                                                                 \
  633|  25.8k|      }                                                                        \
  634|  25.8k|    }                                                                          \
  635|  9.02k|    *fromP = from;                                                             \
  636|  8.49k|    if (from < fromLim)                                                        \
  ------------------
  |  Branch (636:9): [True: 0, False: 8.49k]
  ------------------
  637|  8.49k|      return XML_CONVERT_INPUT_INCOMPLETE;                                     \
  638|  8.49k|    else                                                                       \
  639|  8.49k|      return XML_CONVERT_COMPLETED;                                            \
  640|  8.49k|  }
xmltok.c:getEncodingIndex:
 1428|  24.2k|getEncodingIndex(const char *name) {
 1429|  24.2k|  static const char *const encodingNames[] = {
 1430|  24.2k|      KW_ISO_8859_1, KW_US_ASCII, KW_UTF_8, KW_UTF_16, KW_UTF_16BE, KW_UTF_16LE,
 1431|  24.2k|  };
 1432|  24.2k|  int i;
 1433|  24.2k|  if (name == NULL)
  ------------------
  |  Branch (1433:7): [True: 12.0k, False: 12.1k]
  ------------------
 1434|  12.0k|    return NO_ENC;
 1435|  33.8k|  for (i = 0; i < (int)(sizeof(encodingNames) / sizeof(encodingNames[0])); i++)
  ------------------
  |  Branch (1435:15): [True: 33.8k, False: 61]
  ------------------
 1436|  33.8k|    if (streqci(name, encodingNames[i]))
  ------------------
  |  Branch (1436:9): [True: 12.0k, False: 21.7k]
  ------------------
 1437|  12.0k|      return i;
 1438|     61|  return UNKNOWN_ENC;
 1439|  12.1k|}
xmltok.c:streqci:
  887|  33.8k|streqci(const char *s1, const char *s2) {
  888|   140k|  for (;;) {
  889|   140k|    char c1 = *s1++;
  890|   140k|    char c2 = *s2++;
  891|   140k|    if (ASCII_a <= c1 && c1 <= ASCII_z)
  ------------------
  |  |   65|   140k|#define ASCII_a 0x61
  ------------------
                  if (ASCII_a <= c1 && c1 <= ASCII_z)
  ------------------
  |  |   90|    279|#define ASCII_z 0x7A
  ------------------
  |  Branch (891:9): [True: 279, False: 140k]
  |  Branch (891:26): [True: 279, False: 0]
  ------------------
  892|    279|      c1 += ASCII_A - ASCII_a;
  ------------------
  |  |   38|    279|#define ASCII_A 0x41
  ------------------
                    c1 += ASCII_A - ASCII_a;
  ------------------
  |  |   65|    279|#define ASCII_a 0x61
  ------------------
  893|   140k|    if (ASCII_a <= c2 && c2 <= ASCII_z)
  ------------------
  |  |   65|   140k|#define ASCII_a 0x61
  ------------------
                  if (ASCII_a <= c2 && c2 <= ASCII_z)
  ------------------
  |  |   90|      0|#define ASCII_z 0x7A
  ------------------
  |  Branch (893:9): [True: 0, False: 140k]
  |  Branch (893:26): [True: 0, False: 0]
  ------------------
  894|       |      /* The following line will never get executed.  streqci() is
  895|       |       * only called from two places, both of which guarantee to put
  896|       |       * upper-case strings into s2.
  897|       |       */
  898|      0|      c2 += ASCII_A - ASCII_a; /* LCOV_EXCL_LINE */
  ------------------
  |  |   38|      0|#define ASCII_A 0x41
  ------------------
                    c2 += ASCII_A - ASCII_a; /* LCOV_EXCL_LINE */
  ------------------
  |  |   65|      0|#define ASCII_a 0x61
  ------------------
  899|   140k|    if (c1 != c2)
  ------------------
  |  Branch (899:9): [True: 21.8k, False: 118k]
  ------------------
  900|  21.8k|      return 0;
  901|   118k|    if (! c1)
  ------------------
  |  Branch (901:9): [True: 12.0k, False: 106k]
  ------------------
  902|  12.0k|      break;
  903|   118k|  }
  904|  12.0k|  return 1;
  905|  33.8k|}
xmltok.c:initScan:
 1457|  12.0k|         int state, const char *ptr, const char *end, const char **nextTokPtr) {
 1458|  12.0k|  const ENCODING **encPtr;
 1459|       |
 1460|  12.0k|  if (ptr >= end)
  ------------------
  |  Branch (1460:7): [True: 0, False: 12.0k]
  ------------------
 1461|      0|    return XML_TOK_NONE;
  ------------------
  |  |   51|      0|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
 1462|  12.0k|  encPtr = enc->encPtr;
 1463|  12.0k|  if (ptr + 1 == end) {
  ------------------
  |  Branch (1463:7): [True: 0, False: 12.0k]
  ------------------
 1464|       |    /* only a single byte available for auto-detection */
 1465|       |#ifndef XML_DTD /* FIXME */
 1466|       |    /* a well-formed document entity must have more than one byte */
 1467|       |    if (state != XML_CONTENT_STATE)
 1468|       |      return XML_TOK_PARTIAL;
 1469|       |#endif
 1470|       |    /* so we're parsing an external text entity... */
 1471|       |    /* if UTF-16 was externally specified, then we need at least 2 bytes */
 1472|      0|    switch (INIT_ENC_INDEX(enc)) {
  ------------------
  |  | 1445|      0|#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16)
  |  |  ------------------
  |  |  |  Branch (1445:29): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1473|      0|    case UTF_16_ENC:
  ------------------
  |  Branch (1473:5): [True: 0, False: 0]
  ------------------
 1474|      0|    case UTF_16LE_ENC:
  ------------------
  |  Branch (1474:5): [True: 0, False: 0]
  ------------------
 1475|      0|    case UTF_16BE_ENC:
  ------------------
  |  Branch (1475:5): [True: 0, False: 0]
  ------------------
 1476|      0|      return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
 1477|      0|    }
 1478|      0|    switch ((unsigned char)*ptr) {
  ------------------
  |  Branch (1478:13): [True: 0, False: 0]
  ------------------
 1479|      0|    case 0xFE:
  ------------------
  |  Branch (1479:5): [True: 0, False: 0]
  ------------------
 1480|      0|    case 0xFF:
  ------------------
  |  Branch (1480:5): [True: 0, False: 0]
  ------------------
 1481|      0|    case 0xEF: /* possibly first byte of UTF-8 BOM */
  ------------------
  |  Branch (1481:5): [True: 0, False: 0]
  ------------------
 1482|      0|      if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE)
  ------------------
  |  | 1445|      0|#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16)
  ------------------
                    if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE)
  ------------------
  |  |  131|      0|#  define XML_CONTENT_STATE 1
  ------------------
  |  Branch (1482:11): [True: 0, False: 0]
  |  Branch (1482:52): [True: 0, False: 0]
  ------------------
 1483|      0|        break;
 1484|      0|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1485|      0|    case 0x00:
  ------------------
  |  Branch (1485:5): [True: 0, False: 0]
  ------------------
 1486|      0|    case 0x3C:
  ------------------
  |  Branch (1486:5): [True: 0, False: 0]
  ------------------
 1487|      0|      return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
 1488|      0|    }
 1489|  12.0k|  } else {
 1490|  12.0k|    switch (((unsigned char)ptr[0] << 8) | (unsigned char)ptr[1]) {
 1491|      0|    case 0xFEFF:
  ------------------
  |  Branch (1491:5): [True: 0, False: 12.0k]
  ------------------
 1492|      0|      if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE)
  ------------------
  |  | 1445|      0|#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16)
  ------------------
                    if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE)
  ------------------
  |  |  131|      0|#  define XML_CONTENT_STATE 1
  ------------------
  |  Branch (1492:11): [True: 0, False: 0]
  |  Branch (1492:52): [True: 0, False: 0]
  ------------------
 1493|      0|        break;
 1494|      0|      *nextTokPtr = ptr + 2;
 1495|      0|      *encPtr = encodingTable[UTF_16BE_ENC];
 1496|      0|      return XML_TOK_BOM;
  ------------------
  |  |   79|      0|#  define XML_TOK_BOM 14 /* Byte order mark */
  ------------------
 1497|       |    /* 00 3C is handled in the default case */
 1498|  3.75k|    case 0x3C00:
  ------------------
  |  Branch (1498:5): [True: 3.75k, False: 8.31k]
  ------------------
 1499|  3.75k|      if ((INIT_ENC_INDEX(enc) == UTF_16BE_ENC
  ------------------
  |  | 1445|  3.75k|#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16)
  ------------------
  |  Branch (1499:12): [True: 1, False: 3.75k]
  ------------------
 1500|  3.75k|           || INIT_ENC_INDEX(enc) == UTF_16_ENC)
  ------------------
  |  | 1445|  3.75k|#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16)
  ------------------
  |  Branch (1500:15): [True: 3.62k, False: 128]
  ------------------
 1501|  3.62k|          && state == XML_CONTENT_STATE)
  ------------------
  |  |  131|  3.62k|#  define XML_CONTENT_STATE 1
  ------------------
  |  Branch (1501:14): [True: 0, False: 3.62k]
  ------------------
 1502|      0|        break;
 1503|  3.75k|      *encPtr = encodingTable[UTF_16LE_ENC];
 1504|  3.75k|      return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
  ------------------
  |  |  223|  3.75k|    (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
  ------------------
 1505|      0|    case 0xFFFE:
  ------------------
  |  Branch (1505:5): [True: 0, False: 12.0k]
  ------------------
 1506|      0|      if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE)
  ------------------
  |  | 1445|      0|#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16)
  ------------------
                    if (INIT_ENC_INDEX(enc) == ISO_8859_1_ENC && state == XML_CONTENT_STATE)
  ------------------
  |  |  131|      0|#  define XML_CONTENT_STATE 1
  ------------------
  |  Branch (1506:11): [True: 0, False: 0]
  |  Branch (1506:52): [True: 0, False: 0]
  ------------------
 1507|      0|        break;
 1508|      0|      *nextTokPtr = ptr + 2;
 1509|      0|      *encPtr = encodingTable[UTF_16LE_ENC];
 1510|      0|      return XML_TOK_BOM;
  ------------------
  |  |   79|      0|#  define XML_TOK_BOM 14 /* Byte order mark */
  ------------------
 1511|      0|    case 0xEFBB:
  ------------------
  |  Branch (1511:5): [True: 0, False: 12.0k]
  ------------------
 1512|       |      /* Maybe a UTF-8 BOM (EF BB BF) */
 1513|       |      /* If there's an explicitly specified (external) encoding
 1514|       |         of ISO-8859-1 or some flavour of UTF-16
 1515|       |         and this is an external text entity,
 1516|       |         don't look for the BOM,
 1517|       |         because it might be a legal data.
 1518|       |      */
 1519|      0|      if (state == XML_CONTENT_STATE) {
  ------------------
  |  |  131|      0|#  define XML_CONTENT_STATE 1
  ------------------
  |  Branch (1519:11): [True: 0, False: 0]
  ------------------
 1520|      0|        int e = INIT_ENC_INDEX(enc);
  ------------------
  |  | 1445|      0|#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16)
  ------------------
 1521|      0|        if (e == ISO_8859_1_ENC || e == UTF_16BE_ENC || e == UTF_16LE_ENC
  ------------------
  |  Branch (1521:13): [True: 0, False: 0]
  |  Branch (1521:36): [True: 0, False: 0]
  |  Branch (1521:57): [True: 0, False: 0]
  ------------------
 1522|      0|            || e == UTF_16_ENC)
  ------------------
  |  Branch (1522:16): [True: 0, False: 0]
  ------------------
 1523|      0|          break;
 1524|      0|      }
 1525|      0|      if (ptr + 2 == end)
  ------------------
  |  Branch (1525:11): [True: 0, False: 0]
  ------------------
 1526|      0|        return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
 1527|      0|      if ((unsigned char)ptr[2] == 0xBF) {
  ------------------
  |  Branch (1527:11): [True: 0, False: 0]
  ------------------
 1528|      0|        *nextTokPtr = ptr + 3;
 1529|      0|        *encPtr = encodingTable[UTF_8_ENC];
 1530|      0|        return XML_TOK_BOM;
  ------------------
  |  |   79|      0|#  define XML_TOK_BOM 14 /* Byte order mark */
  ------------------
 1531|      0|      }
 1532|      0|      break;
 1533|  8.31k|    default:
  ------------------
  |  Branch (1533:5): [True: 8.31k, False: 3.75k]
  ------------------
 1534|  8.31k|      if (ptr[0] == '\0') {
  ------------------
  |  Branch (1534:11): [True: 0, False: 8.31k]
  ------------------
 1535|       |        /* 0 isn't a legal data character. Furthermore a document
 1536|       |           entity can only start with ASCII characters.  So the only
 1537|       |           way this can fail to be big-endian UTF-16 if it it's an
 1538|       |           external parsed general entity that's labelled as
 1539|       |           UTF-16LE.
 1540|       |        */
 1541|      0|        if (state == XML_CONTENT_STATE && INIT_ENC_INDEX(enc) == UTF_16LE_ENC)
  ------------------
  |  |  131|      0|#  define XML_CONTENT_STATE 1
  ------------------
                      if (state == XML_CONTENT_STATE && INIT_ENC_INDEX(enc) == UTF_16LE_ENC)
  ------------------
  |  | 1445|      0|#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16)
  ------------------
  |  Branch (1541:13): [True: 0, False: 0]
  |  Branch (1541:43): [True: 0, False: 0]
  ------------------
 1542|      0|          break;
 1543|      0|        *encPtr = encodingTable[UTF_16BE_ENC];
 1544|      0|        return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
  ------------------
  |  |  223|      0|    (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
  ------------------
 1545|  8.31k|      } else if (ptr[1] == '\0') {
  ------------------
  |  Branch (1545:18): [True: 0, False: 8.31k]
  ------------------
 1546|       |        /* We could recover here in the case:
 1547|       |            - parsing an external entity
 1548|       |            - second byte is 0
 1549|       |            - no externally specified encoding
 1550|       |            - no encoding declaration
 1551|       |           by assuming UTF-16LE.  But we don't, because this would mean when
 1552|       |           presented just with a single byte, we couldn't reliably determine
 1553|       |           whether we needed further bytes.
 1554|       |        */
 1555|      0|        if (state == XML_CONTENT_STATE)
  ------------------
  |  |  131|      0|#  define XML_CONTENT_STATE 1
  ------------------
  |  Branch (1555:13): [True: 0, False: 0]
  ------------------
 1556|      0|          break;
 1557|      0|        *encPtr = encodingTable[UTF_16LE_ENC];
 1558|      0|        return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
  ------------------
  |  |  223|      0|    (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
  ------------------
 1559|      0|      }
 1560|  8.31k|      break;
 1561|  12.0k|    }
 1562|  12.0k|  }
 1563|  8.31k|  *encPtr = encodingTable[INIT_ENC_INDEX(enc)];
  ------------------
  |  | 1445|  8.31k|#define INIT_ENC_INDEX(enc) ((int)(enc)->initEnc.isUtf16)
  ------------------
 1564|  8.31k|  return XmlTok(*encPtr, state, ptr, end, nextTokPtr);
  ------------------
  |  |  223|  8.31k|    (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
  ------------------
 1565|  12.0k|}
xmltok.c:ascii_toUtf8:
  506|  16.0k|             char **toP, const char *toLim) {
  507|  16.0k|  UNUSED_P(enc);
  ------------------
  |  |  101|  16.0k|#    define UNUSED_P(p) (void)p
  ------------------
  508|  54.4k|  while (*fromP < fromLim && *toP < toLim)
  ------------------
  |  Branch (508:10): [True: 40.5k, False: 13.8k]
  |  Branch (508:30): [True: 38.4k, False: 2.14k]
  ------------------
  509|  38.4k|    *(*toP)++ = *(*fromP)++;
  510|       |
  511|  16.0k|  if ((*toP == toLim) && (*fromP < fromLim))
  ------------------
  |  Branch (511:7): [True: 2.36k, False: 13.6k]
  |  Branch (511:26): [True: 2.14k, False: 224]
  ------------------
  512|  2.14k|    return XML_CONVERT_OUTPUT_EXHAUSTED;
  513|  13.8k|  else
  514|  13.8k|    return XML_CONVERT_COMPLETED;
  515|  16.0k|}
xmltok.c:doParseXmlDecl:
 1065|    481|               const ENCODING **encoding, int *standalone) {
 1066|    481|  const char *val = NULL;
 1067|    481|  const char *name = NULL;
 1068|    481|  const char *nameEnd = NULL;
 1069|    481|  ptr += 5 * enc->minBytesPerChar;
 1070|    481|  end -= 2 * enc->minBytesPerChar;
 1071|    481|  if (! parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)
  ------------------
  |  Branch (1071:7): [True: 131, False: 350]
  ------------------
 1072|    350|      || ! name) {
  ------------------
  |  Branch (1072:10): [True: 9, False: 341]
  ------------------
 1073|    140|    *badPtr = ptr;
 1074|    140|    return 0;
 1075|    140|  }
 1076|    341|  if (! XmlNameMatchesAscii(enc, name, nameEnd, KW_version)) {
  ------------------
  |  |  254|    341|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  ------------------
  |  Branch (1076:7): [True: 2, False: 339]
  ------------------
 1077|      2|    if (! isGeneralTextEntity) {
  ------------------
  |  Branch (1077:9): [True: 2, False: 0]
  ------------------
 1078|      2|      *badPtr = name;
 1079|      2|      return 0;
 1080|      2|    }
 1081|    339|  } else {
 1082|    339|    if (versionPtr)
  ------------------
  |  Branch (1082:9): [True: 339, False: 0]
  ------------------
 1083|    339|      *versionPtr = val;
 1084|    339|    if (versionEndPtr)
  ------------------
  |  Branch (1084:9): [True: 339, False: 0]
  ------------------
 1085|    339|      *versionEndPtr = ptr;
 1086|       |    /* The version number must not be empty; VersionNum requires at least
 1087|       |       one character.  The encoding and standalone pseudo-attributes below
 1088|       |       already reject an empty value, so keep version consistent. */
 1089|    339|    if (val == ptr - enc->minBytesPerChar) {
  ------------------
  |  Branch (1089:9): [True: 19, False: 320]
  ------------------
 1090|     19|      *badPtr = val;
 1091|     19|      return 0;
 1092|     19|    }
 1093|       |    /* Expat implements XML 1.0 only, so any version outside the "1.0"/"1.x"
 1094|       |       family is rejected. Following the Fifth Edition's VersionNum
 1095|       |       production (rather than the Fourth Edition's exact "1.0") avoids
 1096|       |       rejecting "1.1" now only to have to revert that once Expat tracks
 1097|       |       the newer edition. */
 1098|    320|    if (! checkXmlDeclVersionNum(enc, val, ptr - enc->minBytesPerChar)) {
  ------------------
  |  Branch (1098:9): [True: 82, False: 238]
  ------------------
 1099|     82|      *badPtr = val;
 1100|     82|      return 0;
 1101|     82|    }
 1102|    238|    if (! parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) {
  ------------------
  |  Branch (1102:9): [True: 87, False: 151]
  ------------------
 1103|     87|      *badPtr = ptr;
 1104|     87|      return 0;
 1105|     87|    }
 1106|    151|    if (! name) {
  ------------------
  |  Branch (1106:9): [True: 74, False: 77]
  ------------------
 1107|     74|      if (isGeneralTextEntity) {
  ------------------
  |  Branch (1107:11): [True: 0, False: 74]
  ------------------
 1108|       |        /* a TextDecl must have an EncodingDecl */
 1109|      0|        *badPtr = ptr;
 1110|      0|        return 0;
 1111|      0|      }
 1112|     74|      return 1;
 1113|     74|    }
 1114|    151|  }
 1115|     77|  if (XmlNameMatchesAscii(enc, name, nameEnd, KW_encoding)) {
  ------------------
  |  |  254|     77|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 75, False: 2]
  |  |  ------------------
  ------------------
 1116|     75|    int c = toAscii(enc, val, end);
 1117|     75|    if (! (ASCII_a <= c && c <= ASCII_z) && ! (ASCII_A <= c && c <= ASCII_Z)) {
  ------------------
  |  |   65|     75|#define ASCII_a 0x61
  ------------------
                  if (! (ASCII_a <= c && c <= ASCII_z) && ! (ASCII_A <= c && c <= ASCII_Z)) {
  ------------------
  |  |   90|     27|#define ASCII_z 0x7A
  ------------------
                  if (! (ASCII_a <= c && c <= ASCII_z) && ! (ASCII_A <= c && c <= ASCII_Z)) {
  ------------------
  |  |   38|     48|#define ASCII_A 0x41
  ------------------
                  if (! (ASCII_a <= c && c <= ASCII_z) && ! (ASCII_A <= c && c <= ASCII_Z)) {
  ------------------
  |  |   63|     42|#define ASCII_Z 0x5A
  ------------------
  |  Branch (1117:12): [True: 27, False: 48]
  |  Branch (1117:28): [True: 27, False: 0]
  |  Branch (1117:48): [True: 42, False: 6]
  |  Branch (1117:64): [True: 41, False: 1]
  ------------------
 1118|      7|      *badPtr = val;
 1119|      7|      return 0;
 1120|      7|    }
 1121|     68|    if (encodingName)
  ------------------
  |  Branch (1121:9): [True: 68, False: 0]
  ------------------
 1122|     68|      *encodingName = val;
 1123|     68|    if (encoding)
  ------------------
  |  Branch (1123:9): [True: 68, False: 0]
  ------------------
 1124|     68|      *encoding = encodingFinder(enc, val, ptr - enc->minBytesPerChar);
 1125|     68|    if (! parsePseudoAttribute(enc, ptr, end, &name, &nameEnd, &val, &ptr)) {
  ------------------
  |  Branch (1125:9): [True: 4, False: 64]
  ------------------
 1126|      4|      *badPtr = ptr;
 1127|      4|      return 0;
 1128|      4|    }
 1129|     64|    if (! name)
  ------------------
  |  Branch (1129:9): [True: 63, False: 1]
  ------------------
 1130|     63|      return 1;
 1131|     64|  }
 1132|      3|  if (! XmlNameMatchesAscii(enc, name, nameEnd, KW_standalone)
  ------------------
  |  |  254|      6|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  ------------------
  |  Branch (1132:7): [True: 3, False: 0]
  ------------------
 1133|      3|      || isGeneralTextEntity) {
  ------------------
  |  Branch (1133:10): [True: 0, False: 0]
  ------------------
 1134|      3|    *badPtr = name;
 1135|      3|    return 0;
 1136|      3|  }
 1137|      0|  if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_yes)) {
  ------------------
  |  |  254|      0|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1138|      0|    if (standalone)
  ------------------
  |  Branch (1138:9): [True: 0, False: 0]
  ------------------
 1139|      0|      *standalone = 1;
 1140|      0|  } else if (XmlNameMatchesAscii(enc, val, ptr - enc->minBytesPerChar, KW_no)) {
  ------------------
  |  |  254|      0|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  |  |  ------------------
  |  |  |  Branch (254:5): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1141|      0|    if (standalone)
  ------------------
  |  Branch (1141:9): [True: 0, False: 0]
  ------------------
 1142|      0|      *standalone = 0;
 1143|      0|  } else {
 1144|      0|    *badPtr = val;
 1145|      0|    return 0;
 1146|      0|  }
 1147|      0|  while (isSpace(toAscii(enc, ptr, end)))
  ------------------
  |  Branch (1147:10): [True: 0, False: 0]
  ------------------
 1148|      0|    ptr += enc->minBytesPerChar;
 1149|      0|  if (ptr != end) {
  ------------------
  |  Branch (1149:7): [True: 0, False: 0]
  ------------------
 1150|      0|    *badPtr = ptr;
 1151|      0|    return 0;
 1152|      0|  }
 1153|      0|  return 1;
 1154|      0|}
xmltok.c:parsePseudoAttribute:
  943|    787|                     const char **valPtr, const char **nextTokPtr) {
  944|    787|  int c;
  945|    787|  char open;
  946|    787|  if (ptr == end) {
  ------------------
  |  Branch (946:7): [True: 131, False: 656]
  ------------------
  947|    131|    *namePtr = NULL;
  948|    131|    return 1;
  949|    131|  }
  950|    656|  if (! isSpace(toAscii(enc, ptr, end))) {
  ------------------
  |  Branch (950:7): [True: 9, False: 647]
  ------------------
  951|      9|    *nextTokPtr = ptr;
  952|      9|    return 0;
  953|      9|  }
  954|  1.10k|  do {
  955|  1.10k|    ptr += enc->minBytesPerChar;
  956|  1.10k|  } while (isSpace(toAscii(enc, ptr, end)));
  ------------------
  |  Branch (956:12): [True: 459, False: 647]
  ------------------
  957|    647|  if (ptr == end) {
  ------------------
  |  Branch (957:7): [True: 15, False: 632]
  ------------------
  958|     15|    *namePtr = NULL;
  959|     15|    return 1;
  960|     15|  }
  961|    632|  *namePtr = ptr;
  962|  5.18k|  for (;;) {
  963|  5.18k|    c = toAscii(enc, ptr, end);
  964|  5.18k|    if (c == -1) {
  ------------------
  |  Branch (964:9): [True: 50, False: 5.13k]
  ------------------
  965|     50|      *nextTokPtr = ptr;
  966|     50|      return 0;
  967|     50|    }
  968|  5.13k|    if (c == ASCII_EQUALS) {
  ------------------
  |  |  114|  5.13k|#define ASCII_EQUALS 0x3D
  ------------------
  |  Branch (968:9): [True: 549, False: 4.58k]
  ------------------
  969|    549|      *nameEndPtr = ptr;
  970|    549|      break;
  971|    549|    }
  972|  4.58k|    if (isSpace(c)) {
  ------------------
  |  Branch (972:9): [True: 33, False: 4.55k]
  ------------------
  973|     33|      *nameEndPtr = ptr;
  974|    302|      do {
  975|    302|        ptr += enc->minBytesPerChar;
  976|    302|      } while (isSpace(c = toAscii(enc, ptr, end)));
  ------------------
  |  Branch (976:16): [True: 269, False: 33]
  ------------------
  977|     33|      if (c != ASCII_EQUALS) {
  ------------------
  |  |  114|     33|#define ASCII_EQUALS 0x3D
  ------------------
  |  Branch (977:11): [True: 31, False: 2]
  ------------------
  978|     31|        *nextTokPtr = ptr;
  979|     31|        return 0;
  980|     31|      }
  981|      2|      break;
  982|     33|    }
  983|  4.55k|    ptr += enc->minBytesPerChar;
  984|  4.55k|  }
  985|    551|  if (ptr == *namePtr) {
  ------------------
  |  Branch (985:7): [True: 5, False: 546]
  ------------------
  986|      5|    *nextTokPtr = ptr;
  987|      5|    return 0;
  988|      5|  }
  989|    546|  ptr += enc->minBytesPerChar;
  990|    546|  c = toAscii(enc, ptr, end);
  991|    762|  while (isSpace(c)) {
  ------------------
  |  Branch (991:10): [True: 216, False: 546]
  ------------------
  992|    216|    ptr += enc->minBytesPerChar;
  993|    216|    c = toAscii(enc, ptr, end);
  994|    216|  }
  995|    546|  if (c != ASCII_QUOT && c != ASCII_APOS) {
  ------------------
  |  |  106|  1.09k|#define ASCII_QUOT 0x22
  ------------------
                if (c != ASCII_QUOT && c != ASCII_APOS) {
  ------------------
  |  |  108|     96|#define ASCII_APOS 0x27
  ------------------
  |  Branch (995:7): [True: 96, False: 450]
  |  Branch (995:26): [True: 14, False: 82]
  ------------------
  996|     14|    *nextTokPtr = ptr;
  997|     14|    return 0;
  998|     14|  }
  999|    532|  open = (char)c;
 1000|    532|  ptr += enc->minBytesPerChar;
 1001|    532|  *valPtr = ptr;
 1002|  5.76k|  for (;; ptr += enc->minBytesPerChar) {
 1003|  5.76k|    c = toAscii(enc, ptr, end);
 1004|  5.76k|    if (c == open)
  ------------------
  |  Branch (1004:9): [True: 419, False: 5.34k]
  ------------------
 1005|    419|      break;
 1006|  5.34k|    if (! (ASCII_a <= c && c <= ASCII_z) && ! (ASCII_A <= c && c <= ASCII_Z)
  ------------------
  |  |   65|  5.34k|#define ASCII_a 0x61
  ------------------
                  if (! (ASCII_a <= c && c <= ASCII_z) && ! (ASCII_A <= c && c <= ASCII_Z)
  ------------------
  |  |   90|  1.86k|#define ASCII_z 0x7A
  ------------------
                  if (! (ASCII_a <= c && c <= ASCII_z) && ! (ASCII_A <= c && c <= ASCII_Z)
  ------------------
  |  |   38|  3.48k|#define ASCII_A 0x41
  ------------------
                  if (! (ASCII_a <= c && c <= ASCII_z) && ! (ASCII_A <= c && c <= ASCII_Z)
  ------------------
  |  |   63|    903|#define ASCII_Z 0x5A
  ------------------
  |  Branch (1006:12): [True: 1.86k, False: 3.48k]
  |  Branch (1006:28): [True: 1.85k, False: 2]
  |  Branch (1006:48): [True: 903, False: 2.58k]
  |  Branch (1006:64): [True: 444, False: 459]
  ------------------
 1007|  3.04k|        && ! (ASCII_0 <= c && c <= ASCII_9) && c != ASCII_PERIOD
  ------------------
  |  |   92|  3.04k|#define ASCII_0 0x30
  ------------------
                      && ! (ASCII_0 <= c && c <= ASCII_9) && c != ASCII_PERIOD
  ------------------
  |  |  101|  1.98k|#define ASCII_9 0x39
  ------------------
                      && ! (ASCII_0 <= c && c <= ASCII_9) && c != ASCII_PERIOD
  ------------------
  |  |  110|  6.88k|#define ASCII_PERIOD 0x2E
  ------------------
  |  Branch (1007:15): [True: 1.98k, False: 1.05k]
  |  Branch (1007:31): [True: 1.50k, False: 481]
  |  Branch (1007:48): [True: 805, False: 732]
  ------------------
 1008|    805|        && c != ASCII_MINUS && c != ASCII_UNDERSCORE) {
  ------------------
  |  |  109|  6.14k|#define ASCII_MINUS 0x2D
  ------------------
                      && c != ASCII_MINUS && c != ASCII_UNDERSCORE) {
  ------------------
  |  |  118|    565|#define ASCII_UNDERSCORE 0x5F
  ------------------
  |  Branch (1008:12): [True: 565, False: 240]
  |  Branch (1008:32): [True: 113, False: 452]
  ------------------
 1009|    113|      *nextTokPtr = ptr;
 1010|    113|      return 0;
 1011|    113|    }
 1012|  5.34k|  }
 1013|    419|  *nextTokPtr = ptr + enc->minBytesPerChar;
 1014|    419|  return 1;
 1015|    532|}
xmltok.c:checkXmlDeclVersionNum:
 1043|    320|                       const char *valEnd) {
 1044|    320|  if (valEnd - val < 2 * enc->minBytesPerChar
  ------------------
  |  Branch (1044:7): [True: 11, False: 309]
  ------------------
 1045|    309|      || ! XmlNameMatchesAscii(enc, val, val + 2 * enc->minBytesPerChar,
  ------------------
  |  |  254|    309|    (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
  ------------------
  |  Branch (1045:10): [True: 60, False: 249]
  ------------------
 1046|    320|                               KW_1_dot))
 1047|     71|    return false;
 1048|    249|  val += 2 * enc->minBytesPerChar;
 1049|    249|  if (val == valEnd)
  ------------------
  |  Branch (1049:7): [True: 1, False: 248]
  ------------------
 1050|      1|    return false;
 1051|  1.27k|  for (; val != valEnd; val += enc->minBytesPerChar) {
  ------------------
  |  Branch (1051:10): [True: 1.03k, False: 238]
  ------------------
 1052|  1.03k|    int c = toAscii(enc, val, valEnd);
 1053|  1.03k|    if (c < ASCII_0 || c > ASCII_9)
  ------------------
  |  |   92|  2.06k|#define ASCII_0 0x30
  ------------------
                  if (c < ASCII_0 || c > ASCII_9)
  ------------------
  |  |  101|  1.03k|#define ASCII_9 0x39
  ------------------
  |  Branch (1053:9): [True: 2, False: 1.03k]
  |  Branch (1053:24): [True: 8, False: 1.02k]
  ------------------
 1054|     10|      return false;
 1055|  1.03k|  }
 1056|    238|  return true;
 1057|    248|}
xmltok.c:toAscii:
  915|  14.8k|toAscii(const ENCODING *enc, const char *ptr, const char *end) {
  916|  14.8k|  char buf[1];
  917|  14.8k|  char *p = buf;
  918|  14.8k|  XmlUtf8Convert(enc, &ptr, end, &p, p + 1);
  ------------------
  |  |  275|  14.8k|    (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim))
  ------------------
  919|  14.8k|  if (p == buf)
  ------------------
  |  Branch (919:7): [True: 161, False: 14.7k]
  ------------------
  920|    161|    return -1;
  921|  14.7k|  else
  922|  14.7k|    return buf[0];
  923|  14.8k|}
xmltok.c:isSpace:
  926|  7.41k|isSpace(int c) {
  927|  7.41k|  switch (c) {
  ------------------
  |  Branch (927:11): [True: 1.62k, False: 5.78k]
  ------------------
  928|  1.55k|  case 0x20:
  ------------------
  |  Branch (928:3): [True: 1.55k, False: 5.86k]
  ------------------
  929|  1.58k|  case 0xD:
  ------------------
  |  Branch (929:3): [True: 31, False: 7.38k]
  ------------------
  930|  1.60k|  case 0xA:
  ------------------
  |  Branch (930:3): [True: 21, False: 7.39k]
  ------------------
  931|  1.62k|  case 0x9:
  ------------------
  |  Branch (931:3): [True: 20, False: 7.39k]
  ------------------
  932|  1.62k|    return 1;
  933|  7.41k|  }
  934|  5.78k|  return 0;
  935|  7.41k|}

xmltok.c:normal_prologTok:
 1018|   160k|                  const char **nextTokPtr) {
 1019|   160k|  int tok;
 1020|   160k|  if (ptr >= end)
  ------------------
  |  Branch (1020:7): [True: 255, False: 159k]
  ------------------
 1021|    255|    return XML_TOK_NONE;
  ------------------
  |  |   51|    255|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
 1022|   159k|  if (MINBPC(enc) > 1) {
  ------------------
  |  |  228|   159k|#define MINBPC(enc) 1
  ------------------
  |  Branch (1022:7): [Folded, False: 159k]
  ------------------
 1023|      0|    size_t n = end - ptr;
 1024|      0|    if (n & (MINBPC(enc) - 1)) {
  ------------------
  |  |  228|      0|#define MINBPC(enc) 1
  ------------------
  |  Branch (1024:9): [True: 0, False: 0]
  ------------------
 1025|      0|      n &= ~(MINBPC(enc) - 1);
  ------------------
  |  |  228|      0|#define MINBPC(enc) 1
  ------------------
 1026|      0|      if (n == 0)
  ------------------
  |  Branch (1026:11): [True: 0, False: 0]
  ------------------
 1027|      0|        return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
 1028|      0|      end = ptr + n;
 1029|      0|    }
 1030|      0|  }
 1031|   159k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|   159k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|   159k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
 1032|  1.12k|  case BT_QUOT:
  ------------------
  |  Branch (1032:3): [True: 1.12k, False: 158k]
  ------------------
 1033|  1.12k|    return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  1.12k|#define PREFIX(ident) normal_##ident
  ------------------
                  return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  1.12k|#define MINBPC(enc) 1
  ------------------
 1034|  8.68k|  case BT_APOS:
  ------------------
  |  Branch (1034:3): [True: 8.68k, False: 151k]
  ------------------
 1035|  8.68k|    return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  8.68k|#define PREFIX(ident) normal_##ident
  ------------------
                  return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  8.68k|#define MINBPC(enc) 1
  ------------------
 1036|  25.7k|  case BT_LT: {
  ------------------
  |  Branch (1036:3): [True: 25.7k, False: 133k]
  ------------------
 1037|  25.7k|    ptr += MINBPC(enc);
  ------------------
  |  |  228|  25.7k|#define MINBPC(enc) 1
  ------------------
 1038|  25.7k|    REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  25.7k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  25.7k|    {                                                                          \
  |  |  |  |  135|  25.7k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  25.7k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  25.7k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 0, False: 25.7k]
  |  |  |  |  ------------------
  |  |  |  |  136|      0|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      0|      }                                                                        \
  |  |  |  |  138|  25.7k|    }
  |  |  ------------------
  ------------------
 1039|  25.7k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  25.7k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  25.7k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:3): [True: 24.9k, False: 831]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1040|  16.7k|    case BT_EXCL:
  ------------------
  |  Branch (1040:5): [True: 16.7k, False: 8.98k]
  ------------------
 1041|  16.7k|      return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  16.7k|#define PREFIX(ident) normal_##ident
  ------------------
                    return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  16.7k|#define MINBPC(enc) 1
  ------------------
 1042|  3.54k|    case BT_QUEST:
  ------------------
  |  Branch (1042:5): [True: 3.54k, False: 22.2k]
  ------------------
 1043|  3.54k|      return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  3.54k|#define PREFIX(ident) normal_##ident
  ------------------
                    return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  3.54k|#define MINBPC(enc) 1
  ------------------
 1044|  4.02k|    case BT_NMSTRT:
  ------------------
  |  Branch (1044:5): [True: 4.02k, False: 21.7k]
  ------------------
 1045|  4.57k|    case BT_HEX:
  ------------------
  |  Branch (1045:5): [True: 550, False: 25.2k]
  ------------------
 1046|  4.57k|    case BT_NONASCII:
  ------------------
  |  Branch (1046:5): [True: 0, False: 25.7k]
  ------------------
 1047|  4.59k|    case BT_LEAD2:
  ------------------
  |  Branch (1047:5): [True: 25, False: 25.7k]
  ------------------
 1048|  4.61k|    case BT_LEAD3:
  ------------------
  |  Branch (1048:5): [True: 19, False: 25.7k]
  ------------------
 1049|  4.61k|    case BT_LEAD4:
  ------------------
  |  Branch (1049:5): [True: 3, False: 25.7k]
  ------------------
 1050|  4.61k|      *nextTokPtr = ptr - MINBPC(enc);
  ------------------
  |  |  228|  4.61k|#define MINBPC(enc) 1
  ------------------
 1051|  4.61k|      return XML_TOK_INSTANCE_START;
  ------------------
  |  |   96|  4.61k|#  define XML_TOK_INSTANCE_START 29
  ------------------
 1052|  25.7k|    }
 1053|    831|    *nextTokPtr = ptr;
 1054|    831|    return XML_TOK_INVALID;
  ------------------
  |  |   57|    831|#  define XML_TOK_INVALID 0
  ------------------
 1055|  25.7k|  }
 1056|    668|  case BT_CR:
  ------------------
  |  Branch (1056:3): [True: 668, False: 159k]
  ------------------
 1057|    668|    if (ptr + MINBPC(enc) == end) {
  ------------------
  |  |  228|    668|#define MINBPC(enc) 1
  ------------------
  |  Branch (1057:9): [True: 0, False: 668]
  ------------------
 1058|      0|      *nextTokPtr = end;
 1059|       |      /* indicate that this might be part of a CR/LF pair */
 1060|      0|      return -XML_TOK_PROLOG_S;
  ------------------
  |  |   82|      0|#  define XML_TOK_PROLOG_S 15
  ------------------
 1061|      0|    }
 1062|    668|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|    668|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1063|  46.2k|  case BT_S:
  ------------------
  |  Branch (1063:3): [True: 45.5k, False: 114k]
  ------------------
 1064|  46.9k|  case BT_LF:
  ------------------
  |  Branch (1064:3): [True: 688, False: 159k]
  ------------------
 1065|  47.7k|    for (;;) {
 1066|  47.7k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  47.7k|#define MINBPC(enc) 1
  ------------------
 1067|  47.7k|      if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|  47.7k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  47.7k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  47.7k|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1067:11): [True: 0, False: 47.7k]
  ------------------
 1068|      0|        break;
 1069|  47.7k|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  47.7k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  47.7k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
 1070|    469|      case BT_S:
  ------------------
  |  Branch (1070:7): [True: 469, False: 47.3k]
  ------------------
 1071|    667|      case BT_LF:
  ------------------
  |  Branch (1071:7): [True: 198, False: 47.5k]
  ------------------
 1072|    667|        break;
 1073|    197|      case BT_CR:
  ------------------
  |  Branch (1073:7): [True: 197, False: 47.5k]
  ------------------
 1074|       |        /* don't split CR/LF pair */
 1075|    197|        if (ptr + MINBPC(enc) != end)
  ------------------
  |  |  228|    197|#define MINBPC(enc) 1
  ------------------
  |  Branch (1075:13): [True: 197, False: 0]
  ------------------
 1076|    197|          break;
 1077|      0|        EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1078|  46.9k|      default:
  ------------------
  |  Branch (1078:7): [True: 46.9k, False: 864]
  ------------------
 1079|  46.9k|        *nextTokPtr = ptr;
 1080|  46.9k|        return XML_TOK_PROLOG_S;
  ------------------
  |  |   82|  46.9k|#  define XML_TOK_PROLOG_S 15
  ------------------
 1081|  47.7k|      }
 1082|  47.7k|    }
 1083|      0|    *nextTokPtr = ptr;
 1084|      0|    return XML_TOK_PROLOG_S;
  ------------------
  |  |   82|      0|#  define XML_TOK_PROLOG_S 15
  ------------------
 1085|  1.95k|  case BT_PERCNT:
  ------------------
  |  Branch (1085:3): [True: 1.95k, False: 157k]
  ------------------
 1086|  1.95k|    return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  1.95k|#define PREFIX(ident) normal_##ident
  ------------------
                  return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  1.95k|#define MINBPC(enc) 1
  ------------------
 1087|  1.64k|  case BT_COMMA:
  ------------------
  |  Branch (1087:3): [True: 1.64k, False: 158k]
  ------------------
 1088|  1.64k|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  1.64k|#define MINBPC(enc) 1
  ------------------
 1089|  1.64k|    return XML_TOK_COMMA;
  ------------------
  |  |  107|  1.64k|#  define XML_TOK_COMMA 38
  ------------------
 1090|  3.35k|  case BT_LSQB:
  ------------------
  |  Branch (1090:3): [True: 3.35k, False: 156k]
  ------------------
 1091|  3.35k|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  3.35k|#define MINBPC(enc) 1
  ------------------
 1092|  3.35k|    return XML_TOK_OPEN_BRACKET;
  ------------------
  |  |   92|  3.35k|#  define XML_TOK_OPEN_BRACKET 25
  ------------------
 1093|  1.65k|  case BT_RSQB:
  ------------------
  |  Branch (1093:3): [True: 1.65k, False: 158k]
  ------------------
 1094|  1.65k|    ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.65k|#define MINBPC(enc) 1
  ------------------
 1095|  1.65k|    if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|  1.65k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  1.65k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  1.65k|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [True: 0, False: 1.65k]
  ------------------
 1096|      0|      return -XML_TOK_CLOSE_BRACKET;
  ------------------
  |  |   93|      0|#  define XML_TOK_CLOSE_BRACKET 26
  ------------------
 1097|  1.65k|    if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
  ------------------
  |  |  246|  1.65k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 19, False: 1.64k]
  |  |  ------------------
  ------------------
 1098|     19|      REQUIRE_CHARS(enc, ptr, end, 2);
  ------------------
  |  |  134|     19|    {                                                                          \
  |  |  135|     19|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  ------------------
  |  |  |  |  129|     19|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|     19|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (135:11): [True: 0, False: 19]
  |  |  ------------------
  |  |  136|      0|        return XML_TOK_PARTIAL;                                                \
  |  |  ------------------
  |  |  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  ------------------
  |  |  137|      0|      }                                                                        \
  |  |  138|     19|    }
  ------------------
 1099|     19|      if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) {
  ------------------
  |  |  246|     19|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 1, False: 18]
  |  |  ------------------
  ------------------
 1100|      1|        *nextTokPtr = ptr + 2 * MINBPC(enc);
  ------------------
  |  |  228|      1|#define MINBPC(enc) 1
  ------------------
 1101|      1|        return XML_TOK_COND_SECT_CLOSE;
  ------------------
  |  |  103|      1|#  define XML_TOK_COND_SECT_CLOSE 34      /* ]]> */
  ------------------
 1102|      1|      }
 1103|     19|    }
 1104|  1.65k|    *nextTokPtr = ptr;
 1105|  1.65k|    return XML_TOK_CLOSE_BRACKET;
  ------------------
  |  |   93|  1.65k|#  define XML_TOK_CLOSE_BRACKET 26
  ------------------
 1106|  9.16k|  case BT_LPAR:
  ------------------
  |  Branch (1106:3): [True: 9.16k, False: 150k]
  ------------------
 1107|  9.16k|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  9.16k|#define MINBPC(enc) 1
  ------------------
 1108|  9.16k|    return XML_TOK_OPEN_PAREN;
  ------------------
  |  |   90|  9.16k|#  define XML_TOK_OPEN_PAREN 23
  ------------------
 1109|  3.39k|  case BT_RPAR:
  ------------------
  |  Branch (1109:3): [True: 3.39k, False: 156k]
  ------------------
 1110|  3.39k|    ptr += MINBPC(enc);
  ------------------
  |  |  228|  3.39k|#define MINBPC(enc) 1
  ------------------
 1111|  3.39k|    if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|  3.39k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  3.39k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  3.39k|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1111:9): [True: 0, False: 3.39k]
  ------------------
 1112|      0|      return -XML_TOK_CLOSE_PAREN;
  ------------------
  |  |   91|      0|#  define XML_TOK_CLOSE_PAREN 24
  ------------------
 1113|  3.39k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  3.39k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  3.39k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:3): [True: 3.38k, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1114|    285|    case BT_AST:
  ------------------
  |  Branch (1114:5): [True: 285, False: 3.10k]
  ------------------
 1115|    285|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|    285|#define MINBPC(enc) 1
  ------------------
 1116|    285|      return XML_TOK_CLOSE_PAREN_ASTERISK;
  ------------------
  |  |  105|    285|#  define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */
  ------------------
 1117|    258|    case BT_QUEST:
  ------------------
  |  Branch (1117:5): [True: 258, False: 3.13k]
  ------------------
 1118|    258|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|    258|#define MINBPC(enc) 1
  ------------------
 1119|    258|      return XML_TOK_CLOSE_PAREN_QUESTION;
  ------------------
  |  |  104|    258|#  define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */
  ------------------
 1120|    331|    case BT_PLUS:
  ------------------
  |  Branch (1120:5): [True: 331, False: 3.06k]
  ------------------
 1121|    331|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|    331|#define MINBPC(enc) 1
  ------------------
 1122|    331|      return XML_TOK_CLOSE_PAREN_PLUS;
  ------------------
  |  |  106|    331|#  define XML_TOK_CLOSE_PAREN_PLUS 37     /* )+ */
  ------------------
 1123|     66|    case BT_CR:
  ------------------
  |  Branch (1123:5): [True: 66, False: 3.32k]
  ------------------
 1124|    132|    case BT_LF:
  ------------------
  |  Branch (1124:5): [True: 66, False: 3.32k]
  ------------------
 1125|    813|    case BT_S:
  ------------------
  |  Branch (1125:5): [True: 681, False: 2.71k]
  ------------------
 1126|  1.44k|    case BT_GT:
  ------------------
  |  Branch (1126:5): [True: 627, False: 2.76k]
  ------------------
 1127|  1.64k|    case BT_COMMA:
  ------------------
  |  Branch (1127:5): [True: 206, False: 3.18k]
  ------------------
 1128|  1.85k|    case BT_VERBAR:
  ------------------
  |  Branch (1128:5): [True: 211, False: 3.18k]
  ------------------
 1129|  2.51k|    case BT_RPAR:
  ------------------
  |  Branch (1129:5): [True: 653, False: 2.73k]
  ------------------
 1130|  2.51k|      *nextTokPtr = ptr;
 1131|  2.51k|      return XML_TOK_CLOSE_PAREN;
  ------------------
  |  |   91|  2.51k|#  define XML_TOK_CLOSE_PAREN 24
  ------------------
 1132|  3.39k|    }
 1133|      8|    *nextTokPtr = ptr;
 1134|      8|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      8|#  define XML_TOK_INVALID 0
  ------------------
 1135|  6.64k|  case BT_VERBAR:
  ------------------
  |  Branch (1135:3): [True: 6.64k, False: 153k]
  ------------------
 1136|  6.64k|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  6.64k|#define MINBPC(enc) 1
  ------------------
 1137|  6.64k|    return XML_TOK_OR;
  ------------------
  |  |   88|  6.64k|#  define XML_TOK_OR 21         /* | */
  ------------------
 1138|  12.7k|  case BT_GT:
  ------------------
  |  Branch (1138:3): [True: 12.7k, False: 147k]
  ------------------
 1139|  12.7k|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  12.7k|#define MINBPC(enc) 1
  ------------------
 1140|  12.7k|    return XML_TOK_DECL_CLOSE;
  ------------------
  |  |   84|  12.7k|#  define XML_TOK_DECL_CLOSE 17 /* > */
  ------------------
 1141|  1.36k|  case BT_NUM:
  ------------------
  |  Branch (1141:3): [True: 1.36k, False: 158k]
  ------------------
 1142|  1.36k|    return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  1.36k|#define PREFIX(ident) normal_##ident
  ------------------
                  return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  1.36k|#define MINBPC(enc) 1
  ------------------
 1143|      0|#  define LEAD_CASE(n)                                                         \
 1144|      0|  case BT_LEAD##n:                                                             \
 1145|      0|    if (end - ptr < n)                                                         \
 1146|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
 1147|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
 1148|      0|      *nextTokPtr = ptr;                                                       \
 1149|      0|      return XML_TOK_INVALID;                                                  \
 1150|      0|    }                                                                          \
 1151|      0|    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
 1152|      0|      ptr += n;                                                                \
 1153|      0|      tok = XML_TOK_NAME;                                                      \
 1154|      0|      break;                                                                   \
 1155|      0|    }                                                                          \
 1156|      0|    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
 1157|      0|      ptr += n;                                                                \
 1158|      0|      tok = XML_TOK_NMTOKEN;                                                   \
 1159|      0|      break;                                                                   \
 1160|      0|    }                                                                          \
 1161|      0|    *nextTokPtr = ptr;                                                         \
 1162|      0|    return XML_TOK_INVALID;
 1163|    490|    LEAD_CASE(2)
  ------------------
  |  | 1144|    142|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1144:3): [True: 142, False: 159k]
  |  |  ------------------
  |  | 1145|    142|    if (end - ptr < n)                                                         \
  |  |  ------------------
  |  |  |  Branch (1145:9): [True: 0, False: 142]
  |  |  ------------------
  |  | 1146|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  ------------------
  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  ------------------
  |  | 1147|    142|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  ------------------
  |  |  |  |  240|    142|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    142|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (240:3): [True: 5, False: 137]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1148|      5|      *nextTokPtr = ptr;                                                       \
  |  | 1149|      5|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      5|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  | 1150|      5|    }                                                                          \
  |  | 1151|    142|    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
  |  |  ------------------
  |  |  |  |  238|    137|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    137|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:35): [True: 68, False: 69]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1152|     68|      ptr += n;                                                                \
  |  | 1153|     68|      tok = XML_TOK_NAME;                                                      \
  |  |  ------------------
  |  |  |  |   85|     68|#  define XML_TOK_NAME 18
  |  |  ------------------
  |  | 1154|     68|      break;                                                                   \
  |  | 1155|     68|    }                                                                          \
  |  | 1156|    137|    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
  |  |  ------------------
  |  |  |  |  237|     69|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|     69|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:33): [True: 68, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1157|     68|      ptr += n;                                                                \
  |  | 1158|     68|      tok = XML_TOK_NMTOKEN;                                                   \
  |  |  ------------------
  |  |  |  |   86|     68|#  define XML_TOK_NMTOKEN 19
  |  |  ------------------
  |  | 1159|     68|      break;                                                                   \
  |  | 1160|     68|    }                                                                          \
  |  | 1161|     69|    *nextTokPtr = ptr;                                                         \
  |  | 1162|      1|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      1|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
 1164|    498|    LEAD_CASE(3)
  ------------------
  |  | 1144|    146|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1144:3): [True: 146, False: 159k]
  |  |  ------------------
  |  | 1145|    146|    if (end - ptr < n)                                                         \
  |  |  ------------------
  |  |  |  Branch (1145:9): [True: 0, False: 146]
  |  |  ------------------
  |  | 1146|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  ------------------
  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  ------------------
  |  | 1147|    146|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  ------------------
  |  |  |  |  240|    146|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    146|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (240:3): [True: 10, False: 136]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1148|     10|      *nextTokPtr = ptr;                                                       \
  |  | 1149|     10|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  | 1150|     10|    }                                                                          \
  |  | 1151|    146|    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
  |  |  ------------------
  |  |  |  |  238|    136|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    136|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:35): [True: 66, False: 70]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1152|     66|      ptr += n;                                                                \
  |  | 1153|     66|      tok = XML_TOK_NAME;                                                      \
  |  |  ------------------
  |  |  |  |   85|     66|#  define XML_TOK_NAME 18
  |  |  ------------------
  |  | 1154|     66|      break;                                                                   \
  |  | 1155|     66|    }                                                                          \
  |  | 1156|    136|    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
  |  |  ------------------
  |  |  |  |  237|     70|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|     70|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:33): [True: 69, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1157|     69|      ptr += n;                                                                \
  |  | 1158|     69|      tok = XML_TOK_NMTOKEN;                                                   \
  |  |  ------------------
  |  |  |  |   86|     69|#  define XML_TOK_NMTOKEN 19
  |  |  ------------------
  |  | 1159|     69|      break;                                                                   \
  |  | 1160|     69|    }                                                                          \
  |  | 1161|     70|    *nextTokPtr = ptr;                                                         \
  |  | 1162|      1|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      1|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
 1165|      9|    LEAD_CASE(4)
  ------------------
  |  | 1144|      4|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1144:3): [True: 4, False: 159k]
  |  |  ------------------
  |  | 1145|      4|    if (end - ptr < n)                                                         \
  |  |  ------------------
  |  |  |  Branch (1145:9): [True: 1, False: 3]
  |  |  ------------------
  |  | 1146|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  ------------------
  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  ------------------
  |  | 1147|      3|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  ------------------
  |  |  |  |  240|      3|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      3|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (240:3): [True: 2, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1148|      2|      *nextTokPtr = ptr;                                                       \
  |  | 1149|      2|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  | 1150|      2|    }                                                                          \
  |  | 1151|      3|    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
  |  |  ------------------
  |  |  |  |  238|      1|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (238:35): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1152|      0|      ptr += n;                                                                \
  |  | 1153|      0|      tok = XML_TOK_NAME;                                                      \
  |  |  ------------------
  |  |  |  |   85|      0|#  define XML_TOK_NAME 18
  |  |  ------------------
  |  | 1154|      0|      break;                                                                   \
  |  | 1155|      0|    }                                                                          \
  |  | 1156|      1|    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
  |  |  ------------------
  |  |  |  |  237|      1|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (237:33): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1157|      0|      ptr += n;                                                                \
  |  | 1158|      0|      tok = XML_TOK_NMTOKEN;                                                   \
  |  |  ------------------
  |  |  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  |  |  ------------------
  |  | 1159|      0|      break;                                                                   \
  |  | 1160|      0|    }                                                                          \
  |  | 1161|      1|    *nextTokPtr = ptr;                                                         \
  |  | 1162|      1|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      1|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
 1166|      0|#  undef LEAD_CASE
 1167|  27.0k|  case BT_NMSTRT:
  ------------------
  |  Branch (1167:3): [True: 27.0k, False: 132k]
  ------------------
 1168|  33.6k|  case BT_HEX:
  ------------------
  |  Branch (1168:3): [True: 6.65k, False: 153k]
  ------------------
 1169|  33.6k|    tok = XML_TOK_NAME;
  ------------------
  |  |   85|  33.6k|#  define XML_TOK_NAME 18
  ------------------
 1170|  33.6k|    ptr += MINBPC(enc);
  ------------------
  |  |  228|  33.6k|#define MINBPC(enc) 1
  ------------------
 1171|  33.6k|    break;
 1172|    271|  case BT_DIGIT:
  ------------------
  |  Branch (1172:3): [True: 271, False: 159k]
  ------------------
 1173|    478|  case BT_NAME:
  ------------------
  |  Branch (1173:3): [True: 207, False: 159k]
  ------------------
 1174|    916|  case BT_MINUS:
  ------------------
  |  Branch (1174:3): [True: 438, False: 159k]
  ------------------
 1175|    916|#  ifdef XML_NS
 1176|  1.33k|  case BT_COLON:
  ------------------
  |  Branch (1176:3): [True: 417, False: 159k]
  ------------------
 1177|  1.33k|#  endif
 1178|  1.33k|    tok = XML_TOK_NMTOKEN;
  ------------------
  |  |   86|  1.33k|#  define XML_TOK_NMTOKEN 19
  ------------------
 1179|  1.33k|    ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.33k|#define MINBPC(enc) 1
  ------------------
 1180|  1.33k|    break;
 1181|      0|  case BT_NONASCII:
  ------------------
  |  Branch (1181:3): [True: 0, False: 159k]
  ------------------
 1182|      0|    if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {
  ------------------
  |  |  243|      0|#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (243:39): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1183|      0|      ptr += MINBPC(enc);
  ------------------
  |  |  228|      0|#define MINBPC(enc) 1
  ------------------
 1184|      0|      tok = XML_TOK_NAME;
  ------------------
  |  |   85|      0|#  define XML_TOK_NAME 18
  ------------------
 1185|      0|      break;
 1186|      0|    }
 1187|      0|    if (IS_NAME_CHAR_MINBPC(enc, ptr)) {
  ------------------
  |  |  242|      0|#define IS_NAME_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (242:37): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1188|      0|      ptr += MINBPC(enc);
  ------------------
  |  |  228|      0|#define MINBPC(enc) 1
  ------------------
 1189|      0|      tok = XML_TOK_NMTOKEN;
  ------------------
  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  ------------------
 1190|      0|      break;
 1191|      0|    }
 1192|      0|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1193|     42|  default:
  ------------------
  |  Branch (1193:3): [True: 42, False: 159k]
  ------------------
 1194|     42|    *nextTokPtr = ptr;
 1195|     42|    return XML_TOK_INVALID;
  ------------------
  |  |   57|     42|#  define XML_TOK_INVALID 0
  ------------------
 1196|   159k|  }
 1197|  65.0k|  while (HAS_CHAR(enc, ptr, end)) {
 1198|  65.0k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  65.0k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  65.0k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
 1199|  94.8k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  26.6k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 65.0k]
  |  |  ------------------
  |  |   82|  26.6k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  242|      0|#define IS_NAME_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, Folded]
  |  |  ------------------
  |  |   83|      0|      *nextTokPtr = ptr;                                                       \
  |  |   84|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|      0|    }                                                                          \
  |  |   86|  26.6k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|  16.1k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 16.1k, False: 48.9k]
  |  |  ------------------
  |  |   88|  25.7k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 9.64k, False: 55.3k]
  |  |  ------------------
  |  |   89|  26.2k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 418, False: 64.6k]
  |  |  ------------------
  |  |   90|  26.4k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 212, False: 64.8k]
  |  |  ------------------
  |  |   91|  26.6k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 282, False: 64.7k]
  |  |  ------------------
  |  |   92|  26.6k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  26.6k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |   93|  26.6k|    break;                                                                     \
  |  |   94|  26.6k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|     83|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 83, False: 64.9k]
  |  |  |  |  ------------------
  |  |  |  |   71|     83|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 83]
  |  |  |  |  ------------------
  |  |  |  |   72|     75|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     83|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    166|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     83|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 7, False: 76]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|     76|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     76|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 75]
  |  |  |  |  ------------------
  |  |  |  |   74|      8|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      8|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      8|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      8|    }                                                                          \
  |  |  |  |   77|     83|    ptr += n;                                                                  \
  |  |  |  |   78|     75|    break;
  |  |  ------------------
  |  |   95|     78|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|     78|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 78, False: 64.9k]
  |  |  |  |  ------------------
  |  |  |  |   71|     78|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 78]
  |  |  |  |  ------------------
  |  |  |  |   72|     72|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     78|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    156|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     78|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 5, False: 73]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|     73|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     73|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 72]
  |  |  |  |  ------------------
  |  |  |  |   74|      6|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      6|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      6|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      6|    }                                                                          \
  |  |  |  |   77|     78|    ptr += n;                                                                  \
  |  |  |  |   78|     72|    break;
  |  |  ------------------
  |  |   96|     72|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|      5|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 5, False: 65.0k]
  |  |  |  |  ------------------
  |  |  |  |   71|      5|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 4]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      4|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|      8|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      4|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 3, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      1|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   74|      4|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      4|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      4|    }                                                                          \
  |  |  |  |   77|      4|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
 1200|  3.49k|    case BT_GT:
  ------------------
  |  Branch (1200:5): [True: 3.49k, False: 61.5k]
  ------------------
 1201|  5.23k|    case BT_RPAR:
  ------------------
  |  Branch (1201:5): [True: 1.74k, False: 63.3k]
  ------------------
 1202|  5.80k|    case BT_COMMA:
  ------------------
  |  Branch (1202:5): [True: 573, False: 64.4k]
  ------------------
 1203|  10.5k|    case BT_VERBAR:
  ------------------
  |  Branch (1203:5): [True: 4.76k, False: 60.2k]
  ------------------
 1204|  12.2k|    case BT_LSQB:
  ------------------
  |  Branch (1204:5): [True: 1.66k, False: 63.3k]
  ------------------
 1205|  12.2k|    case BT_PERCNT:
  ------------------
  |  Branch (1205:5): [True: 10, False: 65.0k]
  ------------------
 1206|  33.7k|    case BT_S:
  ------------------
  |  Branch (1206:5): [True: 21.5k, False: 43.5k]
  ------------------
 1207|  33.9k|    case BT_CR:
  ------------------
  |  Branch (1207:5): [True: 220, False: 64.8k]
  ------------------
 1208|  34.2k|    case BT_LF:
  ------------------
  |  Branch (1208:5): [True: 288, False: 64.7k]
  ------------------
 1209|  34.2k|      *nextTokPtr = ptr;
 1210|  34.2k|      return tok;
 1211|      0|#  ifdef XML_NS
 1212|  2.95k|    case BT_COLON:
  ------------------
  |  Branch (1212:5): [True: 2.95k, False: 62.0k]
  ------------------
 1213|  2.95k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  2.95k|#define MINBPC(enc) 1
  ------------------
 1214|  2.95k|      switch (tok) {
  ------------------
  |  Branch (1214:15): [True: 2.69k, False: 266]
  ------------------
 1215|  2.38k|      case XML_TOK_NAME:
  ------------------
  |  |   85|  2.38k|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (1215:7): [True: 2.38k, False: 568]
  ------------------
 1216|  2.38k|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  2.38k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  2.38k|    {                                                                          \
  |  |  |  |  135|  2.38k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  2.38k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  2.38k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 0, False: 2.38k]
  |  |  |  |  ------------------
  |  |  |  |  136|      0|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      0|      }                                                                        \
  |  |  |  |  138|  2.38k|    }
  |  |  ------------------
  ------------------
 1217|  2.38k|        tok = XML_TOK_PREFIXED_NAME;
  ------------------
  |  |  118|  2.38k|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
 1218|  2.38k|        switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  2.38k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  2.38k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
 1219|  5.44k|          CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  2.02k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 2.38k]
  |  |  ------------------
  |  |   82|  2.02k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  242|      0|#define IS_NAME_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, Folded]
  |  |  ------------------
  |  |   83|      0|      *nextTokPtr = ptr;                                                       \
  |  |   84|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|      0|    }                                                                          \
  |  |   86|  2.02k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|    714|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 714, False: 1.67k]
  |  |  ------------------
  |  |   88|  1.13k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 417, False: 1.97k]
  |  |  ------------------
  |  |   89|  1.46k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 338, False: 2.05k]
  |  |  ------------------
  |  |   90|  1.79k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 325, False: 2.06k]
  |  |  ------------------
  |  |   91|  2.02k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 227, False: 2.16k]
  |  |  ------------------
  |  |   92|  2.02k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  2.02k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |   93|  2.02k|    break;                                                                     \
  |  |   94|  2.02k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|     77|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 77, False: 2.31k]
  |  |  |  |  ------------------
  |  |  |  |   71|     77|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 77]
  |  |  |  |  ------------------
  |  |  |  |   72|     66|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     77|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    154|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     77|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 10, False: 67]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|     67|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     67|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 66]
  |  |  |  |  ------------------
  |  |  |  |   74|     11|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     11|    }                                                                          \
  |  |  |  |   77|     77|    ptr += n;                                                                  \
  |  |  |  |   78|     66|    break;
  |  |  ------------------
  |  |   95|     78|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|     78|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 78, False: 2.31k]
  |  |  |  |  ------------------
  |  |  |  |   71|     78|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 78]
  |  |  |  |  ------------------
  |  |  |  |   72|     66|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     78|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    156|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     78|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 11, False: 67]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|     67|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     67|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 66]
  |  |  |  |  ------------------
  |  |  |  |   74|     12|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     12|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     12|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     12|    }                                                                          \
  |  |  |  |   77|     78|    ptr += n;                                                                  \
  |  |  |  |   78|     66|    break;
  |  |  ------------------
  |  |   96|     66|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|     12|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 12, False: 2.37k]
  |  |  |  |  ------------------
  |  |  |  |   71|     12|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 11]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     11|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     22|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     11|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 10, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      1|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   74|     11|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     11|    }                                                                          \
  |  |  |  |   77|     11|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
 1220|    200|        default:
  ------------------
  |  Branch (1220:9): [True: 200, False: 2.18k]
  ------------------
 1221|    200|          tok = XML_TOK_NMTOKEN;
  ------------------
  |  |   86|    200|#  define XML_TOK_NMTOKEN 19
  ------------------
 1222|    200|          break;
 1223|  2.38k|        }
 1224|  2.35k|        break;
 1225|  2.35k|      case XML_TOK_PREFIXED_NAME:
  ------------------
  |  |  118|    302|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
  |  Branch (1225:7): [True: 302, False: 2.65k]
  ------------------
 1226|    302|        tok = XML_TOK_NMTOKEN;
  ------------------
  |  |   86|    302|#  define XML_TOK_NMTOKEN 19
  ------------------
 1227|    302|        break;
 1228|  2.95k|      }
 1229|  2.92k|      break;
 1230|  2.92k|#  endif
 1231|  2.92k|    case BT_PLUS:
  ------------------
  |  Branch (1231:5): [True: 339, False: 64.7k]
  ------------------
 1232|    339|      if (tok == XML_TOK_NMTOKEN) {
  ------------------
  |  |   86|    339|#  define XML_TOK_NMTOKEN 19
  ------------------
  |  Branch (1232:11): [True: 1, False: 338]
  ------------------
 1233|      1|        *nextTokPtr = ptr;
 1234|      1|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
 1235|      1|      }
 1236|    338|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|    338|#define MINBPC(enc) 1
  ------------------
 1237|    338|      return XML_TOK_NAME_PLUS;
  ------------------
  |  |  101|    338|#  define XML_TOK_NAME_PLUS 32            /* name+ */
  ------------------
 1238|    303|    case BT_AST:
  ------------------
  |  Branch (1238:5): [True: 303, False: 64.7k]
  ------------------
 1239|    303|      if (tok == XML_TOK_NMTOKEN) {
  ------------------
  |  |   86|    303|#  define XML_TOK_NMTOKEN 19
  ------------------
  |  Branch (1239:11): [True: 1, False: 302]
  ------------------
 1240|      1|        *nextTokPtr = ptr;
 1241|      1|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
 1242|      1|      }
 1243|    302|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|    302|#define MINBPC(enc) 1
  ------------------
 1244|    302|      return XML_TOK_NAME_ASTERISK;
  ------------------
  |  |  100|    302|#  define XML_TOK_NAME_ASTERISK 31        /* name* */
  ------------------
 1245|    285|    case BT_QUEST:
  ------------------
  |  Branch (1245:5): [True: 285, False: 64.7k]
  ------------------
 1246|    285|      if (tok == XML_TOK_NMTOKEN) {
  ------------------
  |  |   86|    285|#  define XML_TOK_NMTOKEN 19
  ------------------
  |  Branch (1246:11): [True: 2, False: 283]
  ------------------
 1247|      2|        *nextTokPtr = ptr;
 1248|      2|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      2|#  define XML_TOK_INVALID 0
  ------------------
 1249|      2|      }
 1250|    283|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|    283|#define MINBPC(enc) 1
  ------------------
 1251|    283|      return XML_TOK_NAME_QUESTION;
  ------------------
  |  |   99|    283|#  define XML_TOK_NAME_QUESTION 30        /* name? */
  ------------------
 1252|     24|    default:
  ------------------
  |  Branch (1252:5): [True: 24, False: 65.0k]
  ------------------
 1253|     24|      *nextTokPtr = ptr;
 1254|     24|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     24|#  define XML_TOK_INVALID 0
  ------------------
 1255|  65.0k|    }
 1256|  65.0k|  }
 1257|      0|  return -tok;
 1258|  35.2k|}
xmltok.c:normal_scanLit:
  984|  9.80k|                const char **nextTokPtr) {
  985|   196k|  while (HAS_CHAR(enc, ptr, end)) {
  986|   196k|    int t = BYTE_TYPE(enc, ptr);
  ------------------
  |  |  233|   196k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|   196k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  987|   196k|    switch (t) {
  988|  1.90k|      INVALID_CASES(ptr, nextTokPtr)
  ------------------
  |  |   60|    394|    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    394|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 394, False: 195k]
  |  |  |  |  ------------------
  |  |  |  |   50|    394|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 394]
  |  |  |  |  ------------------
  |  |  |  |   51|    392|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    394|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    394|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    394|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 2, False: 392]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      2|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      2|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      2|    }                                                                          \
  |  |  |  |   56|    394|    ptr += n;                                                                  \
  |  |  |  |   57|    392|    break;
  |  |  ------------------
  |  |   61|    410|    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    410|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 410, False: 195k]
  |  |  |  |  ------------------
  |  |  |  |   50|    410|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 410]
  |  |  |  |  ------------------
  |  |  |  |   51|    408|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    410|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    410|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    410|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 2, False: 408]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      2|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      2|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      2|    }                                                                          \
  |  |  |  |   56|    410|    ptr += n;                                                                  \
  |  |  |  |   57|    408|    break;
  |  |  ------------------
  |  |   62|    408|    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    147|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 147, False: 195k]
  |  |  |  |  ------------------
  |  |  |  |   50|    147|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 1, False: 146]
  |  |  |  |  ------------------
  |  |  |  |   51|    137|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    146|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    146|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    146|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 9, False: 137]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      9|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      9|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      9|    }                                                                          \
  |  |  |  |   56|    146|    ptr += n;                                                                  \
  |  |  |  |   57|    137|    break;
  |  |  ------------------
  |  |   63|    137|  case BT_NONXML:                                                              \
  |  |  ------------------
  |  |  |  Branch (63:3): [True: 1, False: 196k]
  |  |  ------------------
  |  |   64|      2|  case BT_MALFORM:                                                             \
  |  |  ------------------
  |  |  |  Branch (64:3): [True: 1, False: 196k]
  |  |  ------------------
  |  |   65|      3|  case BT_TRAIL:                                                               \
  |  |  ------------------
  |  |  |  Branch (65:3): [True: 1, False: 196k]
  |  |  ------------------
  |  |   66|      3|    *(nextTokPtr) = (ptr);                                                     \
  |  |   67|      3|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      3|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
  989|  1.93k|    case BT_QUOT:
  ------------------
  |  Branch (989:5): [True: 1.93k, False: 194k]
  ------------------
  990|  10.8k|    case BT_APOS:
  ------------------
  |  Branch (990:5): [True: 8.89k, False: 187k]
  ------------------
  991|  10.8k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  10.8k|#define MINBPC(enc) 1
  ------------------
  992|  10.8k|      if (t != open)
  ------------------
  |  Branch (992:11): [True: 1.21k, False: 9.60k]
  ------------------
  993|  1.21k|        break;
  994|  9.60k|      if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|  9.60k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  9.60k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  9.60k|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (994:11): [True: 0, False: 9.60k]
  ------------------
  995|      0|        return -XML_TOK_LITERAL;
  ------------------
  |  |   94|      0|#  define XML_TOK_LITERAL 27
  ------------------
  996|  9.60k|      *nextTokPtr = ptr;
  997|  9.60k|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  9.60k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  9.60k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  998|  3.54k|      case BT_S:
  ------------------
  |  Branch (998:7): [True: 3.54k, False: 6.05k]
  ------------------
  999|  3.61k|      case BT_CR:
  ------------------
  |  Branch (999:7): [True: 69, False: 9.53k]
  ------------------
 1000|  3.68k|      case BT_LF:
  ------------------
  |  Branch (1000:7): [True: 68, False: 9.53k]
  ------------------
 1001|  9.53k|      case BT_GT:
  ------------------
  |  Branch (1001:7): [True: 5.84k, False: 3.75k]
  ------------------
 1002|  9.59k|      case BT_PERCNT:
  ------------------
  |  Branch (1002:7): [True: 59, False: 9.54k]
  ------------------
 1003|  9.60k|      case BT_LSQB:
  ------------------
  |  Branch (1003:7): [True: 13, False: 9.59k]
  ------------------
 1004|  9.60k|        return XML_TOK_LITERAL;
  ------------------
  |  |   94|  9.60k|#  define XML_TOK_LITERAL 27
  ------------------
 1005|      1|      default:
  ------------------
  |  Branch (1005:7): [True: 1, False: 9.60k]
  ------------------
 1006|      1|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
 1007|  9.60k|      }
 1008|   184k|    default:
  ------------------
  |  Branch (1008:5): [True: 184k, False: 11.7k]
  ------------------
 1009|   184k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|   184k|#define MINBPC(enc) 1
  ------------------
 1010|   184k|      break;
 1011|   196k|    }
 1012|   196k|  }
 1013|    184|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|    184|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
 1014|  9.80k|}
xmltok.c:normal_scanDecl:
  183|  16.7k|                 const char **nextTokPtr) {
  184|  16.7k|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  16.7k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  16.7k|    {                                                                          \
  |  |  |  |  135|  16.7k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  16.7k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  16.7k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 0, False: 16.7k]
  |  |  |  |  ------------------
  |  |  |  |  136|      0|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      0|      }                                                                        \
  |  |  |  |  138|  16.7k|    }
  |  |  ------------------
  ------------------
  185|  16.7k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  16.7k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  16.7k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  186|    967|  case BT_MINUS:
  ------------------
  |  Branch (186:3): [True: 967, False: 15.8k]
  ------------------
  187|    967|    return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|    967|#define PREFIX(ident) normal_##ident
  ------------------
                  return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|    967|#define MINBPC(enc) 1
  ------------------
  188|      3|  case BT_LSQB:
  ------------------
  |  Branch (188:3): [True: 3, False: 16.7k]
  ------------------
  189|      3|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|      3|#define MINBPC(enc) 1
  ------------------
  190|      3|    return XML_TOK_COND_SECT_OPEN;
  ------------------
  |  |  102|      3|#  define XML_TOK_COND_SECT_OPEN 33       /* <![ */
  ------------------
  191|    893|  case BT_NMSTRT:
  ------------------
  |  Branch (191:3): [True: 893, False: 15.8k]
  ------------------
  192|  15.8k|  case BT_HEX:
  ------------------
  |  Branch (192:3): [True: 14.9k, False: 1.86k]
  ------------------
  193|  15.8k|    ptr += MINBPC(enc);
  ------------------
  |  |  228|  15.8k|#define MINBPC(enc) 1
  ------------------
  194|  15.8k|    break;
  195|      4|  default:
  ------------------
  |  Branch (195:3): [True: 4, False: 16.7k]
  ------------------
  196|      4|    *nextTokPtr = ptr;
  197|      4|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      4|#  define XML_TOK_INVALID 0
  ------------------
  198|  16.7k|  }
  199|   106k|  while (HAS_CHAR(enc, ptr, end)) {
  200|   106k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|   106k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|   106k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  201|     14|    case BT_PERCNT:
  ------------------
  |  Branch (201:5): [True: 14, False: 106k]
  ------------------
  202|     14|      REQUIRE_CHARS(enc, ptr, end, 2);
  ------------------
  |  |  134|     14|    {                                                                          \
  |  |  135|     14|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  ------------------
  |  |  |  |  129|     14|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|     14|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (135:11): [True: 0, False: 14]
  |  |  ------------------
  |  |  136|      0|        return XML_TOK_PARTIAL;                                                \
  |  |  ------------------
  |  |  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  ------------------
  |  |  137|      0|      }                                                                        \
  |  |  138|     14|    }
  ------------------
  203|       |      /* don't allow <!ENTITY% foo "whatever"> */
  204|     14|      switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) {
  ------------------
  |  |  233|     14|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|     14|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:3): [True: 4, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|      1|      case BT_S:
  ------------------
  |  Branch (205:7): [True: 1, False: 13]
  ------------------
  206|      2|      case BT_CR:
  ------------------
  |  Branch (206:7): [True: 1, False: 13]
  ------------------
  207|      3|      case BT_LF:
  ------------------
  |  Branch (207:7): [True: 1, False: 13]
  ------------------
  208|      4|      case BT_PERCNT:
  ------------------
  |  Branch (208:7): [True: 1, False: 13]
  ------------------
  209|      4|        *nextTokPtr = ptr;
  210|      4|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      4|#  define XML_TOK_INVALID 0
  ------------------
  211|     14|      }
  212|     10|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|     10|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  213|  15.6k|    case BT_S:
  ------------------
  |  Branch (213:5): [True: 15.6k, False: 91.2k]
  ------------------
  214|  15.7k|    case BT_CR:
  ------------------
  |  Branch (214:5): [True: 71, False: 106k]
  ------------------
  215|  15.7k|    case BT_LF:
  ------------------
  |  Branch (215:5): [True: 68, False: 106k]
  ------------------
  216|  15.7k|      *nextTokPtr = ptr;
  217|  15.7k|      return XML_TOK_DECL_OPEN;
  ------------------
  |  |   83|  15.7k|#  define XML_TOK_DECL_OPEN 16  /* <!foo */
  ------------------
  218|  73.2k|    case BT_NMSTRT:
  ------------------
  |  Branch (218:5): [True: 73.2k, False: 33.5k]
  ------------------
  219|  91.0k|    case BT_HEX:
  ------------------
  |  Branch (219:5): [True: 17.7k, False: 89.0k]
  ------------------
  220|  91.0k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  91.0k|#define MINBPC(enc) 1
  ------------------
  221|  91.0k|      break;
  222|     24|    default:
  ------------------
  |  Branch (222:5): [True: 24, False: 106k]
  ------------------
  223|     24|      *nextTokPtr = ptr;
  224|     24|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     24|#  define XML_TOK_INVALID 0
  ------------------
  225|   106k|    }
  226|   106k|  }
  227|      0|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  228|  15.8k|}
xmltok.c:normal_scanComment:
  146|  1.42k|                    const char **nextTokPtr) {
  147|  1.42k|  if (HAS_CHAR(enc, ptr, end)) {
  ------------------
  |  |  131|  1.42k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  1.42k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  1.42k|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (129:5): [True: 1.42k, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|  1.42k|    if (! CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
  ------------------
  |  |  246|  1.42k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (148:9): [True: 18, False: 1.40k]
  ------------------
  149|     18|      *nextTokPtr = ptr;
  150|     18|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     18|#  define XML_TOK_INVALID 0
  ------------------
  151|     18|    }
  152|  1.40k|    ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.40k|#define MINBPC(enc) 1
  ------------------
  153|  2.75k|    while (HAS_CHAR(enc, ptr, end)) {
  154|  2.75k|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  2.75k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  2.75k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  155|  1.21k|        INVALID_CASES(ptr, nextTokPtr)
  ------------------
  |  |   60|    198|    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    198|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 198, False: 2.55k]
  |  |  |  |  ------------------
  |  |  |  |   50|    198|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 198]
  |  |  |  |  ------------------
  |  |  |  |   51|    197|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    198|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    198|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    198|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 1, False: 197]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      1|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      1|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      1|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      1|    }                                                                          \
  |  |  |  |   56|    198|    ptr += n;                                                                  \
  |  |  |  |   57|    197|    break;
  |  |  ------------------
  |  |   61|    201|    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    201|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 201, False: 2.55k]
  |  |  |  |  ------------------
  |  |  |  |   50|    201|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 201]
  |  |  |  |  ------------------
  |  |  |  |   51|    198|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    201|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    201|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    201|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 3, False: 198]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      3|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      3|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      3|    }                                                                          \
  |  |  |  |   56|    201|    ptr += n;                                                                  \
  |  |  |  |   57|    198|    break;
  |  |  ------------------
  |  |   62|    208|    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    208|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 208, False: 2.54k]
  |  |  |  |  ------------------
  |  |  |  |   50|    208|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 1, False: 207]
  |  |  |  |  ------------------
  |  |  |  |   51|    199|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    207|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    207|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    207|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 8, False: 199]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      8|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      8|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      8|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      8|    }                                                                          \
  |  |  |  |   56|    207|    ptr += n;                                                                  \
  |  |  |  |   57|    199|    break;
  |  |  ------------------
  |  |   63|    199|  case BT_NONXML:                                                              \
  |  |  ------------------
  |  |  |  Branch (63:3): [True: 2, False: 2.75k]
  |  |  ------------------
  |  |   64|      3|  case BT_MALFORM:                                                             \
  |  |  ------------------
  |  |  |  Branch (64:3): [True: 1, False: 2.75k]
  |  |  ------------------
  |  |   65|      4|  case BT_TRAIL:                                                               \
  |  |  ------------------
  |  |  |  Branch (65:3): [True: 1, False: 2.75k]
  |  |  ------------------
  |  |   66|      4|    *(nextTokPtr) = (ptr);                                                     \
  |  |   67|      4|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      4|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
  156|  1.59k|      case BT_MINUS:
  ------------------
  |  Branch (156:7): [True: 1.59k, False: 1.16k]
  ------------------
  157|  1.59k|        ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.59k|#define MINBPC(enc) 1
  ------------------
  158|  1.59k|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  1.59k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  1.59k|    {                                                                          \
  |  |  |  |  135|  1.59k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  1.59k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  1.59k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 1.59k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  1.59k|    }
  |  |  ------------------
  ------------------
  159|  1.59k|        if (CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
  ------------------
  |  |  246|  1.59k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 1.36k, False: 222]
  |  |  ------------------
  ------------------
  160|  1.36k|          ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.36k|#define MINBPC(enc) 1
  ------------------
  161|  1.36k|          REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  1.36k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  1.36k|    {                                                                          \
  |  |  |  |  135|  1.36k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  1.36k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  1.36k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 1.36k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  1.36k|    }
  |  |  ------------------
  ------------------
  162|  1.36k|          if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  246|  1.36k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (162:15): [True: 6, False: 1.36k]
  ------------------
  163|      6|            *nextTokPtr = ptr;
  164|      6|            return XML_TOK_INVALID;
  ------------------
  |  |   57|      6|#  define XML_TOK_INVALID 0
  ------------------
  165|      6|          }
  166|  1.36k|          *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  1.36k|#define MINBPC(enc) 1
  ------------------
  167|  1.36k|          return XML_TOK_COMMENT;
  ------------------
  |  |   78|  1.36k|#  define XML_TOK_COMMENT 13
  ------------------
  168|  1.36k|        }
  169|    222|        break;
  170|    551|      default:
  ------------------
  |  Branch (170:7): [True: 551, False: 2.20k]
  ------------------
  171|    551|        ptr += MINBPC(enc);
  ------------------
  |  |  228|    551|#define MINBPC(enc) 1
  ------------------
  172|    551|        break;
  173|  2.75k|      }
  174|  2.75k|    }
  175|  1.40k|  }
  176|     17|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|     17|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  177|  1.42k|}
xmltok.c:normal_scanPi:
  277|  6.67k|               const char **nextTokPtr) {
  278|  6.67k|  int tok;
  279|  6.67k|  const char *target = ptr;
  280|  6.67k|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  6.67k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  6.67k|    {                                                                          \
  |  |  |  |  135|  6.67k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  6.67k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  6.67k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 6.67k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  6.67k|    }
  |  |  ------------------
  ------------------
  281|  6.67k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  6.67k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  6.67k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  282|  6.14k|    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|  6.23k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 6.67k]
  |  |  ------------------
  |  |  111|  6.23k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  243|      0|#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 0, Folded]
  |  |  ------------------
  |  |  112|      0|      *nextTokPtr = ptr;                                                       \
  |  |  113|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      0|    }                                                                          \
  |  |  115|  6.23k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|  5.29k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 5.29k, False: 1.37k]
  |  |  ------------------
  |  |  117|  6.23k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 939, False: 5.73k]
  |  |  ------------------
  |  |  118|  6.23k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  6.23k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |  119|  6.23k|    break;                                                                     \
  |  |  120|  6.23k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    209|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 209, False: 6.46k]
  |  |  |  |  ------------------
  |  |  |  |  100|    209|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 209]
  |  |  |  |  ------------------
  |  |  |  |  101|    205|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    209|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    418|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    209|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 3, False: 206]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    206|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    206|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 205]
  |  |  |  |  ------------------
  |  |  |  |  103|      4|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      4|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      4|    }                                                                          \
  |  |  |  |  106|    209|    ptr += n;                                                                  \
  |  |  |  |  107|    205|    break;
  |  |  ------------------
  |  |  121|    206|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    206|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 206, False: 6.46k]
  |  |  |  |  ------------------
  |  |  |  |  100|    206|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 206]
  |  |  |  |  ------------------
  |  |  |  |  101|    194|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    206|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    412|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    206|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 11, False: 195]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    195|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    195|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 194]
  |  |  |  |  ------------------
  |  |  |  |  103|     12|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     12|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     12|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     12|    }                                                                          \
  |  |  |  |  106|    206|    ptr += n;                                                                  \
  |  |  |  |  107|    194|    break;
  |  |  ------------------
  |  |  122|    194|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|     10|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 10, False: 6.66k]
  |  |  |  |  ------------------
  |  |  |  |  100|     10|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 9]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      9|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     18|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      9|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 8, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      1|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  103|      9|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      9|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      9|    }                                                                          \
  |  |  |  |  106|      9|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  283|     12|  default:
  ------------------
  |  Branch (283:3): [True: 12, False: 6.66k]
  ------------------
  284|     12|    *nextTokPtr = ptr;
  285|     12|    return XML_TOK_INVALID;
  ------------------
  |  |   57|     12|#  define XML_TOK_INVALID 0
  ------------------
  286|  6.67k|  }
  287|  14.4k|  while (HAS_CHAR(enc, ptr, end)) {
  288|  14.4k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  14.4k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  14.4k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  289|  26.8k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  7.40k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 14.4k]
  |  |  ------------------
  |  |   82|  7.40k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  242|      0|#define IS_NAME_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, Folded]
  |  |  ------------------
  |  |   83|      0|      *nextTokPtr = ptr;                                                       \
  |  |   84|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|      0|    }                                                                          \
  |  |   86|  7.40k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|  5.38k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 5.38k, False: 9.07k]
  |  |  ------------------
  |  |   88|  6.53k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 1.15k, False: 13.3k]
  |  |  ------------------
  |  |   89|  6.83k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 293, False: 14.1k]
  |  |  ------------------
  |  |   90|  7.20k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 373, False: 14.0k]
  |  |  ------------------
  |  |   91|  7.40k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 197, False: 14.2k]
  |  |  ------------------
  |  |   92|  7.40k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  7.40k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |   93|  7.40k|    break;                                                                     \
  |  |   94|  7.40k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|    247|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 247, False: 14.2k]
  |  |  |  |  ------------------
  |  |  |  |   71|    247|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 247]
  |  |  |  |  ------------------
  |  |  |  |   72|    236|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|    247|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    494|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    247|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 10, False: 237]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|    237|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    237|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 236]
  |  |  |  |  ------------------
  |  |  |  |   74|     11|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     11|    }                                                                          \
  |  |  |  |   77|    247|    ptr += n;                                                                  \
  |  |  |  |   78|    236|    break;
  |  |  ------------------
  |  |   95|    236|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|    204|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 204, False: 14.2k]
  |  |  |  |  ------------------
  |  |  |  |   71|    204|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 204]
  |  |  |  |  ------------------
  |  |  |  |   72|    194|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|    204|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    408|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    204|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 9, False: 195]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|    195|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    195|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 194]
  |  |  |  |  ------------------
  |  |  |  |   74|     10|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     10|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     10|    }                                                                          \
  |  |  |  |   77|    204|    ptr += n;                                                                  \
  |  |  |  |   78|    194|    break;
  |  |  ------------------
  |  |   96|    194|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|     12|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 12, False: 14.4k]
  |  |  |  |  ------------------
  |  |  |  |   71|     12|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 11]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     11|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     22|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     11|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 10, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      1|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   74|     11|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     11|    }                                                                          \
  |  |  |  |   77|     11|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  290|  2.15k|    case BT_S:
  ------------------
  |  Branch (290:5): [True: 2.15k, False: 12.3k]
  ------------------
  291|  2.35k|    case BT_CR:
  ------------------
  |  Branch (291:5): [True: 197, False: 14.2k]
  ------------------
  292|  2.55k|    case BT_LF:
  ------------------
  |  Branch (292:5): [True: 196, False: 14.2k]
  ------------------
  293|  2.55k|      if (! PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
  ------------------
  |  |  248|  2.55k|#define PREFIX(ident) normal_##ident
  ------------------
  |  Branch (293:11): [True: 3, False: 2.54k]
  ------------------
  294|      3|        *nextTokPtr = ptr;
  295|      3|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      3|#  define XML_TOK_INVALID 0
  ------------------
  296|      3|      }
  297|  2.54k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  2.54k|#define MINBPC(enc) 1
  ------------------
  298|  21.2k|      while (HAS_CHAR(enc, ptr, end)) {
  299|  21.2k|        switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  21.2k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  21.2k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  300|  1.69k|          INVALID_CASES(ptr, nextTokPtr)
  ------------------
  |  |   60|    229|    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    229|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 229, False: 20.9k]
  |  |  |  |  ------------------
  |  |  |  |   50|    229|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 229]
  |  |  |  |  ------------------
  |  |  |  |   51|    206|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    229|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    229|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    229|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 23, False: 206]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     23|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     23|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     23|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     23|    }                                                                          \
  |  |  |  |   56|    229|    ptr += n;                                                                  \
  |  |  |  |   57|    206|    break;
  |  |  ------------------
  |  |   61|    329|    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    329|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 329, False: 20.8k]
  |  |  |  |  ------------------
  |  |  |  |   50|    329|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 329]
  |  |  |  |  ------------------
  |  |  |  |   51|    274|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    329|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    329|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    329|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 55, False: 274]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     55|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     55|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     55|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     55|    }                                                                          \
  |  |  |  |   56|    329|    ptr += n;                                                                  \
  |  |  |  |   57|    274|    break;
  |  |  ------------------
  |  |   62|    285|    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    285|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 285, False: 20.9k]
  |  |  |  |  ------------------
  |  |  |  |   50|    285|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 1, False: 284]
  |  |  |  |  ------------------
  |  |  |  |   51|    239|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    284|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    284|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    284|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 45, False: 239]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     45|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     45|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     45|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     45|    }                                                                          \
  |  |  |  |   56|    284|    ptr += n;                                                                  \
  |  |  |  |   57|    239|    break;
  |  |  ------------------
  |  |   63|    239|  case BT_NONXML:                                                              \
  |  |  ------------------
  |  |  |  Branch (63:3): [True: 2, False: 21.2k]
  |  |  ------------------
  |  |   64|      4|  case BT_MALFORM:                                                             \
  |  |  ------------------
  |  |  |  Branch (64:3): [True: 2, False: 21.2k]
  |  |  ------------------
  |  |   65|      9|  case BT_TRAIL:                                                               \
  |  |  ------------------
  |  |  |  Branch (65:3): [True: 5, False: 21.2k]
  |  |  ------------------
  |  |   66|      9|    *(nextTokPtr) = (ptr);                                                     \
  |  |   67|      9|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
  301|  2.64k|        case BT_QUEST:
  ------------------
  |  Branch (301:9): [True: 2.64k, False: 18.5k]
  ------------------
  302|  2.64k|          ptr += MINBPC(enc);
  ------------------
  |  |  228|  2.64k|#define MINBPC(enc) 1
  ------------------
  303|  2.64k|          REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  2.64k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  2.64k|    {                                                                          \
  |  |  |  |  135|  2.64k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  2.64k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  2.64k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 2.64k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  2.64k|    }
  |  |  ------------------
  ------------------
  304|  2.64k|          if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  246|  2.64k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 2.34k, False: 301]
  |  |  ------------------
  ------------------
  305|  2.34k|            *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  2.34k|#define MINBPC(enc) 1
  ------------------
  306|  2.34k|            return tok;
  307|  2.34k|          }
  308|    301|          break;
  309|  17.7k|        default:
  ------------------
  |  Branch (309:9): [True: 17.7k, False: 3.49k]
  ------------------
  310|  17.7k|          ptr += MINBPC(enc);
  ------------------
  |  |  228|  17.7k|#define MINBPC(enc) 1
  ------------------
  311|  17.7k|          break;
  312|  21.2k|        }
  313|  21.2k|      }
  314|     73|      return XML_TOK_PARTIAL;
  ------------------
  |  |   56|     73|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  315|  4.00k|    case BT_QUEST:
  ------------------
  |  Branch (315:5): [True: 4.00k, False: 10.4k]
  ------------------
  316|  4.00k|      if (! PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
  ------------------
  |  |  248|  4.00k|#define PREFIX(ident) normal_##ident
  ------------------
  |  Branch (316:11): [True: 3, False: 4.00k]
  ------------------
  317|      3|        *nextTokPtr = ptr;
  318|      3|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      3|#  define XML_TOK_INVALID 0
  ------------------
  319|      3|      }
  320|  4.00k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  4.00k|#define MINBPC(enc) 1
  ------------------
  321|  4.00k|      REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  4.00k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  4.00k|    {                                                                          \
  |  |  |  |  135|  4.00k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  4.00k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  4.00k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 4.00k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  4.00k|    }
  |  |  ------------------
  ------------------
  322|  4.00k|      if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  246|  4.00k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 3.98k, False: 15]
  |  |  ------------------
  ------------------
  323|  3.98k|        *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  3.98k|#define MINBPC(enc) 1
  ------------------
  324|  3.98k|        return tok;
  325|  3.98k|      }
  326|     15|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|     15|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  327|     60|    default:
  ------------------
  |  Branch (327:5): [True: 45, False: 14.4k]
  ------------------
  328|     60|      *nextTokPtr = ptr;
  329|     60|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     60|#  define XML_TOK_INVALID 0
  ------------------
  330|  14.4k|    }
  331|  14.4k|  }
  332|      2|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  333|  6.63k|}
xmltok.c:normal_checkPiTarget:
  232|  6.55k|                      int *tokPtr) {
  233|  6.55k|  int upper = 0;
  234|  6.55k|  UNUSED_P(enc);
  ------------------
  |  |  101|  6.55k|#    define UNUSED_P(p) (void)p
  ------------------
  235|  6.55k|  *tokPtr = XML_TOK_PI;
  ------------------
  |  |   76|  6.55k|#  define XML_TOK_PI 11       /* processing instruction */
  ------------------
  236|  6.55k|  if (end - ptr != MINBPC(enc) * 3)
  ------------------
  |  |  228|  6.55k|#define MINBPC(enc) 1
  ------------------
  |  Branch (236:7): [True: 4.15k, False: 2.40k]
  ------------------
  237|  4.15k|    return 1;
  238|  2.40k|  switch (BYTE_TO_ASCII(enc, ptr)) {
  ------------------
  |  |  235|  2.40k|#define BYTE_TO_ASCII(enc, p) (*(p))
  ------------------
  239|  1.29k|  case ASCII_x:
  ------------------
  |  |   88|  1.29k|#define ASCII_x 0x78
  ------------------
  |  Branch (239:3): [True: 1.29k, False: 1.10k]
  ------------------
  240|  1.29k|    break;
  241|    517|  case ASCII_X:
  ------------------
  |  |   61|    517|#define ASCII_X 0x58
  ------------------
  |  Branch (241:3): [True: 517, False: 1.88k]
  ------------------
  242|    517|    upper = 1;
  243|    517|    break;
  244|    591|  default:
  ------------------
  |  Branch (244:3): [True: 591, False: 1.81k]
  ------------------
  245|    591|    return 1;
  246|  2.40k|  }
  247|  1.81k|  ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.81k|#define MINBPC(enc) 1
  ------------------
  248|  1.81k|  switch (BYTE_TO_ASCII(enc, ptr)) {
  ------------------
  |  |  235|  1.81k|#define BYTE_TO_ASCII(enc, p) (*(p))
  ------------------
  249|    992|  case ASCII_m:
  ------------------
  |  |   77|    992|#define ASCII_m 0x6D
  ------------------
  |  Branch (249:3): [True: 992, False: 821]
  ------------------
  250|    992|    break;
  251|    395|  case ASCII_M:
  ------------------
  |  |   50|    395|#define ASCII_M 0x4D
  ------------------
  |  Branch (251:3): [True: 395, False: 1.41k]
  ------------------
  252|    395|    upper = 1;
  253|    395|    break;
  254|    426|  default:
  ------------------
  |  Branch (254:3): [True: 426, False: 1.38k]
  ------------------
  255|    426|    return 1;
  256|  1.81k|  }
  257|  1.38k|  ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.38k|#define MINBPC(enc) 1
  ------------------
  258|  1.38k|  switch (BYTE_TO_ASCII(enc, ptr)) {
  ------------------
  |  |  235|  1.38k|#define BYTE_TO_ASCII(enc, p) (*(p))
  ------------------
  259|    594|  case ASCII_l:
  ------------------
  |  |   76|    594|#define ASCII_l 0x6C
  ------------------
  |  Branch (259:3): [True: 594, False: 793]
  ------------------
  260|    594|    break;
  261|      4|  case ASCII_L:
  ------------------
  |  |   49|      4|#define ASCII_L 0x4C
  ------------------
  |  Branch (261:3): [True: 4, False: 1.38k]
  ------------------
  262|      4|    upper = 1;
  263|      4|    break;
  264|    789|  default:
  ------------------
  |  Branch (264:3): [True: 789, False: 598]
  ------------------
  265|    789|    return 1;
  266|  1.38k|  }
  267|    598|  if (upper)
  ------------------
  |  Branch (267:7): [True: 6, False: 592]
  ------------------
  268|      6|    return 0;
  269|    592|  *tokPtr = XML_TOK_XML_DECL;
  ------------------
  |  |   77|    592|#  define XML_TOK_XML_DECL 12 /* XML decl or text decl */
  ------------------
  270|    592|  return 1;
  271|    598|}
xmltok.c:normal_scanPercent:
  924|  1.96k|                    const char **nextTokPtr) {
  925|  1.96k|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  1.96k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  1.96k|    {                                                                          \
  |  |  |  |  135|  1.96k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  1.96k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  1.96k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 1.96k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  1.96k|    }
  |  |  ------------------
  ------------------
  926|  1.96k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  1.96k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  1.96k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  927|    601|    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|    812|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 1.96k]
  |  |  ------------------
  |  |  111|    812|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  243|      0|#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 0, Folded]
  |  |  ------------------
  |  |  112|      0|      *nextTokPtr = ptr;                                                       \
  |  |  113|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      0|    }                                                                          \
  |  |  115|    812|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|    292|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 292, False: 1.66k]
  |  |  ------------------
  |  |  117|    812|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 520, False: 1.44k]
  |  |  ------------------
  |  |  118|    812|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|    812|#define MINBPC(enc) 1
  |  |  ------------------
  |  |  119|    812|    break;                                                                     \
  |  |  120|    812|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|     73|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 73, False: 1.88k]
  |  |  |  |  ------------------
  |  |  |  |  100|     73|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 73]
  |  |  |  |  ------------------
  |  |  |  |  101|     66|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|     73|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    146|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     73|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 6, False: 67]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|     67|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     67|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 66]
  |  |  |  |  ------------------
  |  |  |  |  103|      7|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      7|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      7|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      7|    }                                                                          \
  |  |  |  |  106|     73|    ptr += n;                                                                  \
  |  |  |  |  107|     66|    break;
  |  |  ------------------
  |  |  121|     76|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|     76|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 76, False: 1.88k]
  |  |  |  |  ------------------
  |  |  |  |  100|     76|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 76]
  |  |  |  |  ------------------
  |  |  |  |  101|     66|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|     76|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    152|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     76|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 9, False: 67]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|     67|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     67|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 66]
  |  |  |  |  ------------------
  |  |  |  |  103|     10|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     10|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     10|    }                                                                          \
  |  |  |  |  106|     76|    ptr += n;                                                                  \
  |  |  |  |  107|     66|    break;
  |  |  ------------------
  |  |  122|     66|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      6|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 6, False: 1.95k]
  |  |  |  |  ------------------
  |  |  |  |  100|      6|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 5]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      5|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     10|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      5|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 4, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      1|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  103|      5|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      5|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      5|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      5|    }                                                                          \
  |  |  |  |  106|      5|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  928|    799|  case BT_S:
  ------------------
  |  Branch (928:3): [True: 799, False: 1.16k]
  ------------------
  929|    865|  case BT_LF:
  ------------------
  |  Branch (929:3): [True: 66, False: 1.89k]
  ------------------
  930|    932|  case BT_CR:
  ------------------
  |  Branch (930:3): [True: 67, False: 1.89k]
  ------------------
  931|    938|  case BT_PERCNT:
  ------------------
  |  Branch (931:3): [True: 6, False: 1.95k]
  ------------------
  932|    938|    *nextTokPtr = ptr;
  933|    938|    return XML_TOK_PERCENT;
  ------------------
  |  |   89|    938|#  define XML_TOK_PERCENT 22
  ------------------
  934|     55|  default:
  ------------------
  |  Branch (934:3): [True: 55, False: 1.90k]
  ------------------
  935|     55|    *nextTokPtr = ptr;
  936|     55|    return XML_TOK_INVALID;
  ------------------
  |  |   57|     55|#  define XML_TOK_INVALID 0
  ------------------
  937|  1.96k|  }
  938|  2.14k|  while (HAS_CHAR(enc, ptr, end)) {
  939|  2.14k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  2.14k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  2.14k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  940|  2.54k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  1.07k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 2.14k]
  |  |  ------------------
  |  |   82|  1.07k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  242|      0|#define IS_NAME_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, Folded]
  |  |  ------------------
  |  |   83|      0|      *nextTokPtr = ptr;                                                       \
  |  |   84|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|      0|    }                                                                          \
  |  |   86|  1.07k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|    231|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 231, False: 1.91k]
  |  |  ------------------
  |  |   88|    465|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 234, False: 1.90k]
  |  |  ------------------
  |  |   89|    671|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 206, False: 1.93k]
  |  |  ------------------
  |  |   90|    871|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 200, False: 1.94k]
  |  |  ------------------
  |  |   91|  1.07k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 199, False: 1.94k]
  |  |  ------------------
  |  |   92|  1.07k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  1.07k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |   93|  1.07k|    break;                                                                     \
  |  |   94|  1.07k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|     75|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 75, False: 2.06k]
  |  |  |  |  ------------------
  |  |  |  |   71|     75|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 75]
  |  |  |  |  ------------------
  |  |  |  |   72|     66|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     75|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    150|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     75|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 8, False: 67]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|     67|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     67|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 66]
  |  |  |  |  ------------------
  |  |  |  |   74|      9|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      9|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      9|    }                                                                          \
  |  |  |  |   77|     75|    ptr += n;                                                                  \
  |  |  |  |   78|     66|    break;
  |  |  ------------------
  |  |   95|     73|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|     73|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 73, False: 2.07k]
  |  |  |  |  ------------------
  |  |  |  |   71|     73|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 73]
  |  |  |  |  ------------------
  |  |  |  |   72|     66|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     73|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    146|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     73|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 6, False: 67]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|     67|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     67|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 66]
  |  |  |  |  ------------------
  |  |  |  |   74|      7|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      7|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      7|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      7|    }                                                                          \
  |  |  |  |   77|     73|    ptr += n;                                                                  \
  |  |  |  |   78|     66|    break;
  |  |  ------------------
  |  |   96|     66|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|      4|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 4, False: 2.13k]
  |  |  |  |  ------------------
  |  |  |  |   71|      4|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 3]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      3|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|      6|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      3|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 2, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      1|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   74|      3|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      3|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      3|    }                                                                          \
  |  |  |  |   77|      3|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  941|    831|    case BT_SEMI:
  ------------------
  |  Branch (941:5): [True: 831, False: 1.31k]
  ------------------
  942|    831|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|    831|#define MINBPC(enc) 1
  ------------------
  943|    831|      return XML_TOK_PARAM_ENTITY_REF;
  ------------------
  |  |   95|    831|#  define XML_TOK_PARAM_ENTITY_REF 28
  ------------------
  944|     90|    default:
  ------------------
  |  Branch (944:5): [True: 90, False: 2.05k]
  ------------------
  945|     90|      *nextTokPtr = ptr;
  946|     90|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     90|#  define XML_TOK_INVALID 0
  ------------------
  947|  2.14k|    }
  948|  2.14k|  }
  949|      3|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      3|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  950|    944|}
xmltok.c:normal_scanPoundName:
  954|  1.36k|                      const char **nextTokPtr) {
  955|  1.36k|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  1.36k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  1.36k|    {                                                                          \
  |  |  |  |  135|  1.36k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  1.36k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  1.36k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 0, False: 1.36k]
  |  |  |  |  ------------------
  |  |  |  |  136|      0|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      0|      }                                                                        \
  |  |  |  |  138|  1.36k|    }
  |  |  ------------------
  ------------------
  956|  1.36k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  1.36k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  1.36k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  957|  1.18k|    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|  1.34k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 1.36k]
  |  |  ------------------
  |  |  111|  1.34k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  243|      0|#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 0, Folded]
  |  |  ------------------
  |  |  112|      0|      *nextTokPtr = ptr;                                                       \
  |  |  113|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      0|    }                                                                          \
  |  |  115|  1.34k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|  1.15k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 1.15k, False: 205]
  |  |  ------------------
  |  |  117|  1.34k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 187, False: 1.17k]
  |  |  ------------------
  |  |  118|  1.34k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  1.34k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |  119|  1.34k|    break;                                                                     \
  |  |  120|  1.34k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      5|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 5, False: 1.35k]
  |  |  |  |  ------------------
  |  |  |  |  100|      5|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      5|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     10|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      5|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 3, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      2|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      2|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  103|      4|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      4|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      4|    }                                                                          \
  |  |  |  |  106|      5|    ptr += n;                                                                  \
  |  |  |  |  107|      1|    break;
  |  |  ------------------
  |  |  121|      6|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      6|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 6, False: 1.35k]
  |  |  |  |  ------------------
  |  |  |  |  100|      6|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      6|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     12|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      6|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 4, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      2|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      2|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  103|      5|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      5|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      5|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      5|    }                                                                          \
  |  |  |  |  106|      6|    ptr += n;                                                                  \
  |  |  |  |  107|      1|    break;
  |  |  ------------------
  |  |  122|      3|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      3|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 3, False: 1.36k]
  |  |  |  |  ------------------
  |  |  |  |  100|      3|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      2|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|      4|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      2|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 1, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      1|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  103|      2|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      2|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      2|    }                                                                          \
  |  |  |  |  106|      2|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  958|      4|  default:
  ------------------
  |  Branch (958:3): [True: 4, False: 1.36k]
  ------------------
  959|      4|    *nextTokPtr = ptr;
  960|      4|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      4|#  define XML_TOK_INVALID 0
  ------------------
  961|  1.36k|  }
  962|  9.45k|  while (HAS_CHAR(enc, ptr, end)) {
  963|  9.45k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  9.45k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  9.45k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  964|  26.8k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  7.97k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 9.45k]
  |  |  ------------------
  |  |   82|  7.97k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  242|      0|#define IS_NAME_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, Folded]
  |  |  ------------------
  |  |   83|      0|      *nextTokPtr = ptr;                                                       \
  |  |   84|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|      0|    }                                                                          \
  |  |   86|  7.97k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|  3.92k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 3.92k, False: 5.53k]
  |  |  ------------------
  |  |   88|  7.29k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 3.37k, False: 6.08k]
  |  |  ------------------
  |  |   89|  7.56k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 264, False: 9.19k]
  |  |  ------------------
  |  |   90|  7.75k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 198, False: 9.25k]
  |  |  ------------------
  |  |   91|  7.97k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 218, False: 9.23k]
  |  |  ------------------
  |  |   92|  7.97k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  7.97k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |   93|  7.97k|    break;                                                                     \
  |  |   94|  7.97k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|     68|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 68, False: 9.38k]
  |  |  |  |  ------------------
  |  |  |  |   71|     68|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 68]
  |  |  |  |  ------------------
  |  |  |  |   72|     66|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     68|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    136|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     68|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 1, False: 67]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|     67|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     67|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 66]
  |  |  |  |  ------------------
  |  |  |  |   74|      2|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      2|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      2|    }                                                                          \
  |  |  |  |   77|     68|    ptr += n;                                                                  \
  |  |  |  |   78|     66|    break;
  |  |  ------------------
  |  |   95|     69|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|     69|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 69, False: 9.38k]
  |  |  |  |  ------------------
  |  |  |  |   71|     69|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 69]
  |  |  |  |  ------------------
  |  |  |  |   72|     66|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     69|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    138|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     69|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 2, False: 67]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|     67|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     67|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 66]
  |  |  |  |  ------------------
  |  |  |  |   74|      3|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      3|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      3|    }                                                                          \
  |  |  |  |   77|     69|    ptr += n;                                                                  \
  |  |  |  |   78|     66|    break;
  |  |  ------------------
  |  |   96|     66|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|      7|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 7, False: 9.45k]
  |  |  |  |  ------------------
  |  |  |  |   71|      7|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 6]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      6|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     12|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      6|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 5, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      1|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   74|      6|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      6|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      6|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      6|    }                                                                          \
  |  |  |  |   77|      6|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  965|     18|    case BT_CR:
  ------------------
  |  Branch (965:5): [True: 18, False: 9.43k]
  ------------------
  966|     84|    case BT_LF:
  ------------------
  |  Branch (966:5): [True: 66, False: 9.39k]
  ------------------
  967|    854|    case BT_S:
  ------------------
  |  Branch (967:5): [True: 770, False: 8.68k]
  ------------------
  968|    966|    case BT_RPAR:
  ------------------
  |  Branch (968:5): [True: 112, False: 9.34k]
  ------------------
  969|  1.21k|    case BT_GT:
  ------------------
  |  Branch (969:5): [True: 251, False: 9.20k]
  ------------------
  970|  1.22k|    case BT_PERCNT:
  ------------------
  |  Branch (970:5): [True: 3, False: 9.45k]
  ------------------
  971|  1.33k|    case BT_VERBAR:
  ------------------
  |  Branch (971:5): [True: 112, False: 9.34k]
  ------------------
  972|  1.33k|      *nextTokPtr = ptr;
  973|  1.33k|      return XML_TOK_POUND_NAME;
  ------------------
  |  |   87|  1.33k|#  define XML_TOK_POUND_NAME 20 /* #name */
  ------------------
  974|      4|    default:
  ------------------
  |  Branch (974:5): [True: 4, False: 9.45k]
  ------------------
  975|      4|      *nextTokPtr = ptr;
  976|      4|      return XML_TOK_INVALID;
  ------------------
  |  |   57|      4|#  define XML_TOK_INVALID 0
  ------------------
  977|  9.45k|    }
  978|  9.45k|  }
  979|      0|  return -XML_TOK_POUND_NAME;
  ------------------
  |  |   87|      0|#  define XML_TOK_POUND_NAME 20 /* #name */
  ------------------
  980|  1.34k|}
xmltok.c:normal_contentTok:
  824|   463k|                   const char **nextTokPtr) {
  825|   463k|  if (ptr >= end)
  ------------------
  |  Branch (825:7): [True: 102k, False: 361k]
  ------------------
  826|   102k|    return XML_TOK_NONE;
  ------------------
  |  |   51|   102k|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
  827|   361k|  if (MINBPC(enc) > 1) {
  ------------------
  |  |  228|   361k|#define MINBPC(enc) 1
  ------------------
  |  Branch (827:7): [Folded, False: 361k]
  ------------------
  828|      0|    size_t n = end - ptr;
  829|      0|    if (n & (MINBPC(enc) - 1)) {
  ------------------
  |  |  228|      0|#define MINBPC(enc) 1
  ------------------
  |  Branch (829:9): [True: 0, False: 0]
  ------------------
  830|      0|      n &= ~(MINBPC(enc) - 1);
  ------------------
  |  |  228|      0|#define MINBPC(enc) 1
  ------------------
  831|      0|      if (n == 0)
  ------------------
  |  Branch (831:11): [True: 0, False: 0]
  ------------------
  832|      0|        return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  833|      0|      end = ptr + n;
  834|      0|    }
  835|      0|  }
  836|   361k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|   361k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|   361k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  837|  66.7k|  case BT_LT:
  ------------------
  |  Branch (837:3): [True: 66.7k, False: 294k]
  ------------------
  838|  66.7k|    return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  66.7k|#define PREFIX(ident) normal_##ident
  ------------------
                  return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  66.7k|#define MINBPC(enc) 1
  ------------------
  839|   146k|  case BT_AMP:
  ------------------
  |  Branch (839:3): [True: 146k, False: 214k]
  ------------------
  840|   146k|    return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|   146k|#define PREFIX(ident) normal_##ident
  ------------------
                  return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|   146k|#define MINBPC(enc) 1
  ------------------
  841|    614|  case BT_CR:
  ------------------
  |  Branch (841:3): [True: 614, False: 360k]
  ------------------
  842|    614|    ptr += MINBPC(enc);
  ------------------
  |  |  228|    614|#define MINBPC(enc) 1
  ------------------
  843|    614|    if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|    614|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|    614|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|    614|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (843:9): [True: 0, False: 614]
  ------------------
  844|      0|      return XML_TOK_TRAILING_CR;
  ------------------
  |  |   53|      0|    -3                            /* A CR at the end of the scan;              \
  ------------------
  845|    614|    if (BYTE_TYPE(enc, ptr) == BT_LF)
  ------------------
  |  |  233|    614|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|    614|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  |  Branch (845:9): [True: 194, False: 420]
  ------------------
  846|    194|      ptr += MINBPC(enc);
  ------------------
  |  |  228|    194|#define MINBPC(enc) 1
  ------------------
  847|    614|    *nextTokPtr = ptr;
  848|    614|    return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|    614|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
  849|    515|  case BT_LF:
  ------------------
  |  Branch (849:3): [True: 515, False: 360k]
  ------------------
  850|    515|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|    515|#define MINBPC(enc) 1
  ------------------
  851|    515|    return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|    515|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
  852|  1.94k|  case BT_RSQB:
  ------------------
  |  Branch (852:3): [True: 1.94k, False: 359k]
  ------------------
  853|  1.94k|    ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.94k|#define MINBPC(enc) 1
  ------------------
  854|  1.94k|    if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|  1.94k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  1.94k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  1.94k|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (854:9): [True: 293, False: 1.65k]
  ------------------
  855|    293|      return XML_TOK_TRAILING_RSQB;
  ------------------
  |  |   46|    293|    -5 /* ] or ]] at the end of the scan; might be                             \
  ------------------
  856|  1.65k|    if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB))
  ------------------
  |  |  246|  1.65k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (856:9): [True: 985, False: 665]
  ------------------
  857|    985|      break;
  858|    665|    ptr += MINBPC(enc);
  ------------------
  |  |  228|    665|#define MINBPC(enc) 1
  ------------------
  859|    665|    if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|    665|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|    665|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|    665|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (859:9): [True: 387, False: 278]
  ------------------
  860|    387|      return XML_TOK_TRAILING_RSQB;
  ------------------
  |  |   46|    387|    -5 /* ] or ]] at the end of the scan; might be                             \
  ------------------
  861|    278|    if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  246|    278|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (861:9): [True: 277, False: 1]
  ------------------
  862|    277|      ptr -= MINBPC(enc);
  ------------------
  |  |  228|    277|#define MINBPC(enc) 1
  ------------------
  863|    277|      break;
  864|    277|    }
  865|      1|    *nextTokPtr = ptr;
  866|      1|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
  867|  2.93k|    INVALID_CASES(ptr, nextTokPtr)
  ------------------
  |  |   60|    281|    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    281|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 281, False: 360k]
  |  |  |  |  ------------------
  |  |  |  |   50|    281|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 281]
  |  |  |  |  ------------------
  |  |  |  |   51|    263|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    281|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    281|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    281|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 18, False: 263]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     18|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     18|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     18|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     18|    }                                                                          \
  |  |  |  |   56|    281|    ptr += n;                                                                  \
  |  |  |  |   57|    263|    break;
  |  |  ------------------
  |  |   61|    674|    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    674|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 674, False: 360k]
  |  |  |  |  ------------------
  |  |  |  |   50|    674|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 674]
  |  |  |  |  ------------------
  |  |  |  |   51|    658|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    674|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    674|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    674|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 16, False: 658]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     16|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     16|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     16|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     16|    }                                                                          \
  |  |  |  |   56|    674|    ptr += n;                                                                  \
  |  |  |  |   57|    658|    break;
  |  |  ------------------
  |  |   62|    658|    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    508|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 508, False: 360k]
  |  |  |  |  ------------------
  |  |  |  |   50|    508|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 1, False: 507]
  |  |  |  |  ------------------
  |  |  |  |   51|    490|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    507|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    507|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    507|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 17, False: 490]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     17|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     17|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     17|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     17|    }                                                                          \
  |  |  |  |   56|    507|    ptr += n;                                                                  \
  |  |  |  |   57|    490|    break;
  |  |  ------------------
  |  |   63|    490|  case BT_NONXML:                                                              \
  |  |  ------------------
  |  |  |  Branch (63:3): [True: 4, False: 361k]
  |  |  ------------------
  |  |   64|      7|  case BT_MALFORM:                                                             \
  |  |  ------------------
  |  |  |  Branch (64:3): [True: 3, False: 361k]
  |  |  ------------------
  |  |   65|     12|  case BT_TRAIL:                                                               \
  |  |  ------------------
  |  |  |  Branch (65:3): [True: 5, False: 361k]
  |  |  ------------------
  |  |   66|     12|    *(nextTokPtr) = (ptr);                                                     \
  |  |   67|     12|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|     12|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
  868|   143k|  default:
  ------------------
  |  Branch (868:3): [True: 143k, False: 217k]
  ------------------
  869|   143k|    ptr += MINBPC(enc);
  ------------------
  |  |  228|   143k|#define MINBPC(enc) 1
  ------------------
  870|   143k|    break;
  871|   361k|  }
  872|  16.1M|  while (HAS_CHAR(enc, ptr, end)) {
  873|  16.1M|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  16.1M|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  16.1M|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  874|      0|#  define LEAD_CASE(n)                                                         \
  875|      0|  case BT_LEAD##n:                                                             \
  876|      0|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  877|      0|      *nextTokPtr = ptr;                                                       \
  878|      0|      return XML_TOK_DATA_CHARS;                                               \
  879|      0|    }                                                                          \
  880|      0|    ptr += n;                                                                  \
  881|      0|    break;
  882|  5.57k|      LEAD_CASE(2)
  ------------------
  |  |  875|  5.57k|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (875:3): [True: 5.57k, False: 16.1M]
  |  |  ------------------
  |  |  876|  5.57k|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  |  |  ------------------
  |  |  |  |  240|  5.57k|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  5.57k|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (240:3): [True: 11, False: 5.56k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (876:9): [True: 0, False: 5.57k]
  |  |  ------------------
  |  |  877|     11|      *nextTokPtr = ptr;                                                       \
  |  |  878|     11|      return XML_TOK_DATA_CHARS;                                               \
  |  |  ------------------
  |  |  |  |   67|     11|#  define XML_TOK_DATA_CHARS 6
  |  |  ------------------
  |  |  879|     11|    }                                                                          \
  |  |  880|  5.56k|    ptr += n;                                                                  \
  |  |  881|  5.56k|    break;
  ------------------
  883|    303|      LEAD_CASE(3)
  ------------------
  |  |  875|    303|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (875:3): [True: 303, False: 16.1M]
  |  |  ------------------
  |  |  876|    303|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  |  |  ------------------
  |  |  |  |  240|    303|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    303|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (240:3): [True: 13, False: 290]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (876:9): [True: 0, False: 303]
  |  |  ------------------
  |  |  877|     13|      *nextTokPtr = ptr;                                                       \
  |  |  878|     13|      return XML_TOK_DATA_CHARS;                                               \
  |  |  ------------------
  |  |  |  |   67|     13|#  define XML_TOK_DATA_CHARS 6
  |  |  ------------------
  |  |  879|     13|    }                                                                          \
  |  |  880|    290|    ptr += n;                                                                  \
  |  |  881|    290|    break;
  ------------------
  884|    301|      LEAD_CASE(4)
  ------------------
  |  |  875|    301|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (875:3): [True: 301, False: 16.1M]
  |  |  ------------------
  |  |  876|    301|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  |  |  ------------------
  |  |  |  |  240|    300|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    300|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (240:3): [True: 10, False: 290]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (876:9): [True: 1, False: 300]
  |  |  ------------------
  |  |  877|     11|      *nextTokPtr = ptr;                                                       \
  |  |  878|     11|      return XML_TOK_DATA_CHARS;                                               \
  |  |  ------------------
  |  |  |  |   67|     11|#  define XML_TOK_DATA_CHARS 6
  |  |  ------------------
  |  |  879|     11|    }                                                                          \
  |  |  880|    290|    ptr += n;                                                                  \
  |  |  881|    290|    break;
  ------------------
  885|      0|#  undef LEAD_CASE
  886|  3.64k|    case BT_RSQB:
  ------------------
  |  Branch (886:5): [True: 3.64k, False: 16.1M]
  ------------------
  887|  3.64k|      if (HAS_CHARS(enc, ptr, end, 2)) {
  ------------------
  |  |  129|  3.64k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  ------------------
  |  |  |  |  228|  3.64k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |  |  Branch (129:5): [True: 3.44k, False: 202]
  |  |  ------------------
  ------------------
  888|  3.44k|        if (! CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) {
  ------------------
  |  |  246|  3.44k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (888:13): [True: 1.75k, False: 1.68k]
  ------------------
  889|  1.75k|          ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.75k|#define MINBPC(enc) 1
  ------------------
  890|  1.75k|          break;
  891|  1.75k|        }
  892|  1.68k|        if (HAS_CHARS(enc, ptr, end, 3)) {
  ------------------
  |  |  129|  1.68k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  ------------------
  |  |  |  |  228|  1.68k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |  |  Branch (129:5): [True: 1.49k, False: 198]
  |  |  ------------------
  ------------------
  893|  1.49k|          if (! CHAR_MATCHES(enc, ptr + 2 * MINBPC(enc), ASCII_GT)) {
  ------------------
  |  |  246|  1.49k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (893:15): [True: 1.47k, False: 20]
  ------------------
  894|  1.47k|            ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.47k|#define MINBPC(enc) 1
  ------------------
  895|  1.47k|            break;
  896|  1.47k|          }
  897|     20|          *nextTokPtr = ptr + 2 * MINBPC(enc);
  ------------------
  |  |  228|     20|#define MINBPC(enc) 1
  ------------------
  898|     20|          return XML_TOK_INVALID;
  ------------------
  |  |   57|     20|#  define XML_TOK_INVALID 0
  ------------------
  899|  1.49k|        }
  900|  1.68k|      }
  901|    400|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|    400|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  902|  57.2k|    case BT_AMP:
  ------------------
  |  Branch (902:5): [True: 56.8k, False: 16.0M]
  ------------------
  903|  61.7k|    case BT_LT:
  ------------------
  |  Branch (903:5): [True: 4.55k, False: 16.1M]
  ------------------
  904|  61.7k|    case BT_NONXML:
  ------------------
  |  Branch (904:5): [True: 1, False: 16.1M]
  ------------------
  905|  61.7k|    case BT_MALFORM:
  ------------------
  |  Branch (905:5): [True: 3, False: 16.1M]
  ------------------
  906|  61.7k|    case BT_TRAIL:
  ------------------
  |  Branch (906:5): [True: 2, False: 16.1M]
  ------------------
  907|  61.9k|    case BT_CR:
  ------------------
  |  Branch (907:5): [True: 229, False: 16.1M]
  ------------------
  908|  62.3k|    case BT_LF:
  ------------------
  |  Branch (908:5): [True: 315, False: 16.1M]
  ------------------
  909|  62.3k|      *nextTokPtr = ptr;
  910|  62.3k|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|  62.3k|#  define XML_TOK_DATA_CHARS 6
  ------------------
  911|  16.0M|    default:
  ------------------
  |  Branch (911:5): [True: 16.0M, False: 71.7k]
  ------------------
  912|  16.0M|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  16.0M|#define MINBPC(enc) 1
  ------------------
  913|  16.0M|      break;
  914|  16.1M|    }
  915|  16.1M|  }
  916|  83.5k|  *nextTokPtr = ptr;
  917|  83.5k|  return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|  83.5k|#  define XML_TOK_DATA_CHARS 6
  ------------------
  918|   145k|}
xmltok.c:normal_scanLt:
  726|  66.7k|               const char **nextTokPtr) {
  727|  66.7k|#  ifdef XML_NS
  728|  66.7k|  int hadColon;
  729|  66.7k|#  endif
  730|  66.7k|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  66.7k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  66.7k|    {                                                                          \
  |  |  |  |  135|  66.7k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  66.7k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  66.7k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 6, False: 66.7k]
  |  |  |  |  ------------------
  |  |  |  |  136|      6|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      6|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      6|      }                                                                        \
  |  |  |  |  138|  66.7k|    }
  |  |  ------------------
  ------------------
  731|  66.7k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  66.7k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  66.7k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  732|  49.9k|    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|  54.6k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 66.7k]
  |  |  ------------------
  |  |  111|  54.6k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  243|      0|#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 0, Folded]
  |  |  ------------------
  |  |  112|      0|      *nextTokPtr = ptr;                                                       \
  |  |  113|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      0|    }                                                                          \
  |  |  115|  54.6k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|  47.9k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 47.9k, False: 18.8k]
  |  |  ------------------
  |  |  117|  54.6k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 6.69k, False: 60.0k]
  |  |  ------------------
  |  |  118|  54.6k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  54.6k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |  119|  54.6k|    break;                                                                     \
  |  |  120|  54.6k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    691|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 691, False: 66.0k]
  |  |  |  |  ------------------
  |  |  |  |  100|    691|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 691]
  |  |  |  |  ------------------
  |  |  |  |  101|    680|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    691|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|  1.38k|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    691|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 9, False: 682]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    682|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    682|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 2, False: 680]
  |  |  |  |  ------------------
  |  |  |  |  103|     11|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     11|    }                                                                          \
  |  |  |  |  106|    691|    ptr += n;                                                                  \
  |  |  |  |  107|    680|    break;
  |  |  ------------------
  |  |  121|    680|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    296|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 296, False: 66.4k]
  |  |  |  |  ------------------
  |  |  |  |  100|    296|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 296]
  |  |  |  |  ------------------
  |  |  |  |  101|    286|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    296|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    592|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    296|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 9, False: 287]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    287|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    287|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 286]
  |  |  |  |  ------------------
  |  |  |  |  103|     10|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     10|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     10|    }                                                                          \
  |  |  |  |  106|    296|    ptr += n;                                                                  \
  |  |  |  |  107|    286|    break;
  |  |  ------------------
  |  |  122|    286|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      3|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 3, False: 66.7k]
  |  |  |  |  ------------------
  |  |  |  |  100|      3|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      2|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|      4|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      2|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 1, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      1|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  103|      2|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      2|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      2|    }                                                                          \
  |  |  |  |  106|      2|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  733|  1.55k|  case BT_EXCL:
  ------------------
  |  Branch (733:3): [True: 1.55k, False: 65.2k]
  ------------------
  734|  1.55k|    ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.55k|#define MINBPC(enc) 1
  ------------------
  735|  1.55k|    REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  1.55k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  1.55k|    {                                                                          \
  |  |  |  |  135|  1.55k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  1.55k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  1.55k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 1.54k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  1.55k|    }
  |  |  ------------------
  ------------------
  736|  1.54k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  1.54k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  1.54k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:3): [True: 1.54k, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  737|    455|    case BT_MINUS:
  ------------------
  |  Branch (737:5): [True: 455, False: 1.09k]
  ------------------
  738|    455|      return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|    455|#define PREFIX(ident) normal_##ident
  ------------------
                    return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|    455|#define MINBPC(enc) 1
  ------------------
  739|  1.09k|    case BT_LSQB:
  ------------------
  |  Branch (739:5): [True: 1.09k, False: 457]
  ------------------
  740|  1.09k|      return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  1.09k|#define PREFIX(ident) normal_##ident
  ------------------
                    return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  1.09k|#define MINBPC(enc) 1
  ------------------
  741|  1.54k|    }
  742|      2|    *nextTokPtr = ptr;
  743|      2|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      2|#  define XML_TOK_INVALID 0
  ------------------
  744|  3.13k|  case BT_QUEST:
  ------------------
  |  Branch (744:3): [True: 3.13k, False: 63.6k]
  ------------------
  745|  3.13k|    return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  3.13k|#define PREFIX(ident) normal_##ident
  ------------------
                  return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  3.13k|#define MINBPC(enc) 1
  ------------------
  746|  6.43k|  case BT_SOL:
  ------------------
  |  Branch (746:3): [True: 6.43k, False: 60.3k]
  ------------------
  747|  6.43k|    return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  6.43k|#define PREFIX(ident) normal_##ident
  ------------------
                  return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  6.43k|#define MINBPC(enc) 1
  ------------------
  748|      7|  default:
  ------------------
  |  Branch (748:3): [True: 7, False: 66.7k]
  ------------------
  749|      7|    *nextTokPtr = ptr;
  750|      7|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      7|#  define XML_TOK_INVALID 0
  ------------------
  751|  66.7k|  }
  752|  55.6k|#  ifdef XML_NS
  753|  55.6k|  hadColon = 0;
  754|  55.6k|#  endif
  755|       |  /* we have a start-tag */
  756|   115k|  while (HAS_CHAR(enc, ptr, end)) {
  757|   115k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|   115k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|   115k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  758|   167k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  33.5k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 115k]
  |  |  ------------------
  |  |   82|  33.5k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  242|      0|#define IS_NAME_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, Folded]
  |  |  ------------------
  |  |   83|      0|      *nextTokPtr = ptr;                                                       \
  |  |   84|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|      0|    }                                                                          \
  |  |   86|  33.5k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|  22.5k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 22.5k, False: 93.2k]
  |  |  ------------------
  |  |   88|  29.6k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 7.02k, False: 108k]
  |  |  ------------------
  |  |   89|  32.2k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 2.59k, False: 113k]
  |  |  ------------------
  |  |   90|  32.9k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 716, False: 115k]
  |  |  ------------------
  |  |   91|  33.5k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 672, False: 115k]
  |  |  ------------------
  |  |   92|  33.5k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  33.5k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |   93|  33.5k|    break;                                                                     \
  |  |   94|  33.5k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|  24.9k|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 24.9k, False: 90.8k]
  |  |  |  |  ------------------
  |  |  |  |   71|  24.9k|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 24.9k]
  |  |  |  |  ------------------
  |  |  |  |   72|  24.9k|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|  24.9k|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|  49.9k|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|  24.9k|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 9, False: 24.9k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|  24.9k|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|  24.9k|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 24.9k]
  |  |  |  |  ------------------
  |  |  |  |   74|     10|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     10|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     10|    }                                                                          \
  |  |  |  |   77|  24.9k|    ptr += n;                                                                  \
  |  |  |  |   78|  24.9k|    break;
  |  |  ------------------
  |  |   95|  24.9k|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|    275|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 275, False: 115k]
  |  |  |  |  ------------------
  |  |  |  |   71|    275|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 275]
  |  |  |  |  ------------------
  |  |  |  |   72|    266|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|    275|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    550|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    275|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 8, False: 267]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|    267|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    267|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 266]
  |  |  |  |  ------------------
  |  |  |  |   74|      9|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      9|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      9|    }                                                                          \
  |  |  |  |   77|    275|    ptr += n;                                                                  \
  |  |  |  |   78|    266|    break;
  |  |  ------------------
  |  |   96|    266|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|     12|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 12, False: 115k]
  |  |  |  |  ------------------
  |  |  |  |   71|     12|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 11]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     11|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     22|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     11|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 10, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      1|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   74|     11|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     11|    }                                                                          \
  |  |  |  |   77|     11|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  759|      0|#  ifdef XML_NS
  760|  1.44k|    case BT_COLON:
  ------------------
  |  Branch (760:5): [True: 1.44k, False: 114k]
  ------------------
  761|  1.44k|      if (hadColon) {
  ------------------
  |  Branch (761:11): [True: 3, False: 1.44k]
  ------------------
  762|      3|        *nextTokPtr = ptr;
  763|      3|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      3|#  define XML_TOK_INVALID 0
  ------------------
  764|      3|      }
  765|  1.44k|      hadColon = 1;
  766|  1.44k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.44k|#define MINBPC(enc) 1
  ------------------
  767|  1.44k|      REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  1.44k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  1.44k|    {                                                                          \
  |  |  |  |  135|  1.44k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  1.44k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  1.44k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 1.43k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  1.44k|    }
  |  |  ------------------
  ------------------
  768|  1.43k|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  1.43k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  1.43k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  769|  1.52k|        CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|    888|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 1.43k]
  |  |  ------------------
  |  |  111|    888|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  243|      0|#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 0, Folded]
  |  |  ------------------
  |  |  112|      0|      *nextTokPtr = ptr;                                                       \
  |  |  113|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      0|    }                                                                          \
  |  |  115|    888|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|    438|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 438, False: 1.00k]
  |  |  ------------------
  |  |  117|    888|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 450, False: 989]
  |  |  ------------------
  |  |  118|    888|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|    888|#define MINBPC(enc) 1
  |  |  ------------------
  |  |  119|    888|    break;                                                                     \
  |  |  120|    888|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    332|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 332, False: 1.10k]
  |  |  |  |  ------------------
  |  |  |  |  100|    332|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 332]
  |  |  |  |  ------------------
  |  |  |  |  101|    322|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    332|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    664|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    332|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 9, False: 323]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    323|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    323|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 322]
  |  |  |  |  ------------------
  |  |  |  |  103|     10|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     10|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     10|    }                                                                          \
  |  |  |  |  106|    332|    ptr += n;                                                                  \
  |  |  |  |  107|    322|    break;
  |  |  ------------------
  |  |  121|    322|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    203|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 203, False: 1.23k]
  |  |  |  |  ------------------
  |  |  |  |  100|    203|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 203]
  |  |  |  |  ------------------
  |  |  |  |  101|    194|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    203|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    406|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    203|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 8, False: 195]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    195|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    195|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 194]
  |  |  |  |  ------------------
  |  |  |  |  103|      9|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      9|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      9|    }                                                                          \
  |  |  |  |  106|    203|    ptr += n;                                                                  \
  |  |  |  |  107|    194|    break;
  |  |  ------------------
  |  |  122|    194|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|     11|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 11, False: 1.42k]
  |  |  |  |  ------------------
  |  |  |  |  100|     11|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 10]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|     10|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     20|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     10|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 9, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      1|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  103|     10|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     10|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     10|    }                                                                          \
  |  |  |  |  106|     10|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  770|      5|      default:
  ------------------
  |  Branch (770:7): [True: 5, False: 1.43k]
  ------------------
  771|      5|        *nextTokPtr = ptr;
  772|      5|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      5|#  define XML_TOK_INVALID 0
  ------------------
  773|  1.43k|      }
  774|  1.40k|      break;
  775|  1.40k|#  endif
  776|  27.7k|    case BT_S:
  ------------------
  |  Branch (776:5): [True: 27.7k, False: 88.0k]
  ------------------
  777|  28.0k|    case BT_CR:
  ------------------
  |  Branch (777:5): [True: 219, False: 115k]
  ------------------
  778|  28.2k|    case BT_LF: {
  ------------------
  |  Branch (778:5): [True: 209, False: 115k]
  ------------------
  779|  28.2k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  28.2k|#define MINBPC(enc) 1
  ------------------
  780|  29.0k|      while (HAS_CHAR(enc, ptr, end)) {
  781|  29.0k|        switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  29.0k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  29.0k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  782|  24.8k|          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|  26.8k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 29.0k]
  |  |  ------------------
  |  |  111|  26.8k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  243|      0|#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 0, Folded]
  |  |  ------------------
  |  |  112|      0|      *nextTokPtr = ptr;                                                       \
  |  |  113|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      0|    }                                                                          \
  |  |  115|  26.8k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|  23.7k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 23.7k, False: 5.36k]
  |  |  ------------------
  |  |  117|  26.8k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 3.10k, False: 25.9k]
  |  |  ------------------
  |  |  118|  26.8k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  26.8k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |  119|  26.8k|    break;                                                                     \
  |  |  120|  26.8k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    362|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 362, False: 28.7k]
  |  |  |  |  ------------------
  |  |  |  |  100|    362|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 362]
  |  |  |  |  ------------------
  |  |  |  |  101|    351|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    362|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    724|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    362|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 10, False: 352]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    352|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    352|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 351]
  |  |  |  |  ------------------
  |  |  |  |  103|     11|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     11|    }                                                                          \
  |  |  |  |  106|    362|    ptr += n;                                                                  \
  |  |  |  |  107|    351|    break;
  |  |  ------------------
  |  |  121|    351|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    200|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 200, False: 28.8k]
  |  |  |  |  ------------------
  |  |  |  |  100|    200|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 200]
  |  |  |  |  ------------------
  |  |  |  |  101|    198|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    200|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    400|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    200|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 1, False: 199]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    199|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    199|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 198]
  |  |  |  |  ------------------
  |  |  |  |  103|      2|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      2|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      2|    }                                                                          \
  |  |  |  |  106|    200|    ptr += n;                                                                  \
  |  |  |  |  107|    198|    break;
  |  |  ------------------
  |  |  122|    198|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|     13|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 13, False: 29.0k]
  |  |  |  |  ------------------
  |  |  |  |  100|     13|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 12]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|     12|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     24|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     12|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 11, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      1|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  103|     12|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     12|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     12|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     12|    }                                                                          \
  |  |  |  |  106|     12|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  783|    437|        case BT_GT:
  ------------------
  |  Branch (783:9): [True: 437, False: 28.6k]
  ------------------
  784|    437|          goto gt;
  785|    375|        case BT_SOL:
  ------------------
  |  Branch (785:9): [True: 375, False: 28.7k]
  ------------------
  786|    375|          goto sol;
  787|    244|        case BT_S:
  ------------------
  |  Branch (787:9): [True: 244, False: 28.8k]
  ------------------
  788|    497|        case BT_CR:
  ------------------
  |  Branch (788:9): [True: 253, False: 28.8k]
  ------------------
  789|    874|        case BT_LF:
  ------------------
  |  Branch (789:9): [True: 377, False: 28.7k]
  ------------------
  790|    874|          ptr += MINBPC(enc);
  ------------------
  |  |  228|    874|#define MINBPC(enc) 1
  ------------------
  791|    874|          continue;
  792|      2|        default:
  ------------------
  |  Branch (792:9): [True: 2, False: 29.0k]
  ------------------
  793|      2|          *nextTokPtr = ptr;
  794|      2|          return XML_TOK_INVALID;
  ------------------
  |  |   57|      2|#  define XML_TOK_INVALID 0
  ------------------
  795|  29.0k|        }
  796|  27.3k|        return PREFIX(scanAtts)(enc, ptr, end, nextTokPtr);
  ------------------
  |  |  248|  27.3k|#define PREFIX(ident) normal_##ident
  ------------------
  797|  29.0k|      }
  798|      2|      return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  799|  28.2k|    }
  800|  23.9k|    case BT_GT:
  ------------------
  |  Branch (800:5): [True: 23.9k, False: 91.9k]
  ------------------
  801|  24.3k|    gt:
  802|  24.3k|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  24.3k|#define MINBPC(enc) 1
  ------------------
  803|  24.3k|      return XML_TOK_START_TAG_NO_ATTS;
  ------------------
  |  |   63|  24.3k|#  define XML_TOK_START_TAG_NO_ATTS 2
  ------------------
  804|  3.40k|    case BT_SOL:
  ------------------
  |  Branch (804:5): [True: 3.40k, False: 112k]
  ------------------
  805|  3.77k|    sol:
  806|  3.77k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  3.77k|#define MINBPC(enc) 1
  ------------------
  807|  3.77k|      REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  3.77k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  3.77k|    {                                                                          \
  |  |  |  |  135|  3.77k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  3.77k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  3.77k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 3.77k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  3.77k|    }
  |  |  ------------------
  ------------------
  808|  3.77k|      if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  246|  3.77k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (808:11): [True: 5, False: 3.76k]
  ------------------
  809|      5|        *nextTokPtr = ptr;
  810|      5|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      5|#  define XML_TOK_INVALID 0
  ------------------
  811|      5|      }
  812|  3.76k|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  3.76k|#define MINBPC(enc) 1
  ------------------
  813|  3.76k|      return XML_TOK_EMPTY_ELEMENT_NO_ATTS;
  ------------------
  |  |   65|  3.76k|#  define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4
  ------------------
  814|     16|    default:
  ------------------
  |  Branch (814:5): [True: 16, False: 115k]
  ------------------
  815|     16|      *nextTokPtr = ptr;
  816|     16|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     16|#  define XML_TOK_INVALID 0
  ------------------
  817|   115k|    }
  818|   115k|  }
  819|      2|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  820|  55.6k|}
xmltok.c:normal_scanCdataSection:
  337|  1.09k|                         const char **nextTokPtr) {
  338|  1.09k|  static const char CDATA_LSQB[]
  339|  1.09k|      = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
  ------------------
  |  |   40|  1.09k|#define ASCII_C 0x43
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
  ------------------
  |  |   41|  1.09k|#define ASCII_D 0x44
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
  ------------------
  |  |   38|  1.09k|#define ASCII_A 0x41
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
  ------------------
  |  |   57|  1.09k|#define ASCII_T 0x54
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
  ------------------
  |  |   38|  1.09k|#define ASCII_A 0x41
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
  ------------------
  |  |  116|  1.09k|#define ASCII_LSQB 0x5B
  ------------------
  340|  1.09k|  int i;
  341|  1.09k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.09k|#    define UNUSED_P(p) (void)p
  ------------------
  342|       |  /* CDATA[ */
  343|  1.09k|  REQUIRE_CHARS(enc, ptr, end, 6);
  ------------------
  |  |  134|  1.09k|    {                                                                          \
  |  |  135|  1.09k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  ------------------
  |  |  |  |  129|  1.09k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  1.09k|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (135:11): [True: 3, False: 1.08k]
  |  |  ------------------
  |  |  136|      3|        return XML_TOK_PARTIAL;                                                \
  |  |  ------------------
  |  |  |  |   56|      3|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  ------------------
  |  |  137|      3|      }                                                                        \
  |  |  138|  1.09k|    }
  ------------------
  344|  7.57k|  for (i = 0; i < 6; i++, ptr += MINBPC(enc)) {
  ------------------
  |  |  228|  6.49k|#define MINBPC(enc) 1
  ------------------
  |  Branch (344:15): [True: 6.50k, False: 1.07k]
  ------------------
  345|  6.50k|    if (! CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) {
  ------------------
  |  |  246|  6.50k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (345:9): [True: 13, False: 6.49k]
  ------------------
  346|     13|      *nextTokPtr = ptr;
  347|     13|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     13|#  define XML_TOK_INVALID 0
  ------------------
  348|     13|    }
  349|  6.50k|  }
  350|  1.07k|  *nextTokPtr = ptr;
  351|  1.07k|  return XML_TOK_CDATA_SECT_OPEN;
  ------------------
  |  |   69|  1.07k|#  define XML_TOK_CDATA_SECT_OPEN 8
  ------------------
  352|  1.08k|}
xmltok.c:normal_scanEndTag:
  432|  6.43k|                   const char **nextTokPtr) {
  433|  6.43k|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  6.43k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  6.43k|    {                                                                          \
  |  |  |  |  135|  6.43k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  6.43k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  6.43k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 6.43k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  6.43k|    }
  |  |  ------------------
  ------------------
  434|  6.43k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  6.43k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  6.43k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  435|  5.32k|    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|  4.69k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 6.43k]
  |  |  ------------------
  |  |  111|  4.69k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  243|      0|#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 0, Folded]
  |  |  ------------------
  |  |  112|      0|      *nextTokPtr = ptr;                                                       \
  |  |  113|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      0|    }                                                                          \
  |  |  115|  4.69k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|  4.22k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 4.22k, False: 2.20k]
  |  |  ------------------
  |  |  117|  4.69k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 465, False: 5.96k]
  |  |  ------------------
  |  |  118|  4.69k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  4.69k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |  119|  4.69k|    break;                                                                     \
  |  |  120|  4.69k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    476|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 476, False: 5.95k]
  |  |  |  |  ------------------
  |  |  |  |  100|    476|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 476]
  |  |  |  |  ------------------
  |  |  |  |  101|    467|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    476|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    952|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    476|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 8, False: 468]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    468|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    468|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 467]
  |  |  |  |  ------------------
  |  |  |  |  103|      9|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      9|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      9|    }                                                                          \
  |  |  |  |  106|    476|    ptr += n;                                                                  \
  |  |  |  |  107|    467|    break;
  |  |  ------------------
  |  |  121|    467|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|     68|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 68, False: 6.36k]
  |  |  |  |  ------------------
  |  |  |  |  100|     68|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 68]
  |  |  |  |  ------------------
  |  |  |  |  101|     66|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|     68|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    136|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     68|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 1, False: 67]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|     67|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     67|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 66]
  |  |  |  |  ------------------
  |  |  |  |  103|      2|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      2|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      2|    }                                                                          \
  |  |  |  |  106|     68|    ptr += n;                                                                  \
  |  |  |  |  107|     66|    break;
  |  |  ------------------
  |  |  122|     66|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      3|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 3, False: 6.42k]
  |  |  |  |  ------------------
  |  |  |  |  100|      3|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      2|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|      4|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      2|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 1, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      1|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  103|      2|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      2|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      2|    }                                                                          \
  |  |  |  |  106|      2|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  436|  1.19k|  default:
  ------------------
  |  Branch (436:3): [True: 1.19k, False: 5.24k]
  ------------------
  437|  1.19k|    *nextTokPtr = ptr;
  438|  1.19k|    return XML_TOK_INVALID;
  ------------------
  |  |   57|  1.19k|#  define XML_TOK_INVALID 0
  ------------------
  439|  6.43k|  }
  440|  10.0k|  while (HAS_CHAR(enc, ptr, end)) {
  441|  10.0k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  10.0k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  10.0k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  442|  13.4k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  4.18k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 10.0k]
  |  |  ------------------
  |  |   82|  4.18k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  242|      0|#define IS_NAME_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, Folded]
  |  |  ------------------
  |  |   83|      0|      *nextTokPtr = ptr;                                                       \
  |  |   84|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|      0|    }                                                                          \
  |  |   86|  4.18k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|  2.31k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 2.31k, False: 7.74k]
  |  |  ------------------
  |  |   88|  3.12k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 812, False: 9.24k]
  |  |  ------------------
  |  |   89|  3.44k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 321, False: 9.73k]
  |  |  ------------------
  |  |   90|  3.92k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 482, False: 9.57k]
  |  |  ------------------
  |  |   91|  4.18k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 261, False: 9.79k]
  |  |  ------------------
  |  |   92|  4.18k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  4.18k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |   93|  4.18k|    break;                                                                     \
  |  |   94|  4.18k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|    236|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 236, False: 9.82k]
  |  |  |  |  ------------------
  |  |  |  |   71|    236|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 236]
  |  |  |  |  ------------------
  |  |  |  |   72|    226|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|    236|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    472|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    236|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 9, False: 227]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|    227|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    227|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 226]
  |  |  |  |  ------------------
  |  |  |  |   74|     10|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     10|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     10|    }                                                                          \
  |  |  |  |   77|    236|    ptr += n;                                                                  \
  |  |  |  |   78|    226|    break;
  |  |  ------------------
  |  |   95|    226|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|     69|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 69, False: 9.99k]
  |  |  |  |  ------------------
  |  |  |  |   71|     69|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 69]
  |  |  |  |  ------------------
  |  |  |  |   72|     66|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     69|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    138|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     69|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 2, False: 67]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|     67|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|     67|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 66]
  |  |  |  |  ------------------
  |  |  |  |   74|      3|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      3|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      3|    }                                                                          \
  |  |  |  |   77|     69|    ptr += n;                                                                  \
  |  |  |  |   78|     66|    break;
  |  |  ------------------
  |  |   96|     66|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|      6|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 6, False: 10.0k]
  |  |  |  |  ------------------
  |  |  |  |   71|      6|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 5]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      5|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     10|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      5|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 4, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      1|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   74|      5|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      5|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      5|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      5|    }                                                                          \
  |  |  |  |   77|      5|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  443|    359|    case BT_S:
  ------------------
  |  Branch (443:5): [True: 359, False: 9.70k]
  ------------------
  444|    559|    case BT_CR:
  ------------------
  |  Branch (444:5): [True: 200, False: 9.85k]
  ------------------
  445|    756|    case BT_LF:
  ------------------
  |  Branch (445:5): [True: 197, False: 9.86k]
  ------------------
  446|  1.33k|      for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  228|    756|#define MINBPC(enc) 1
  ------------------
                    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  228|    585|#define MINBPC(enc) 1
  ------------------
  447|  1.33k|        switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  1.33k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  1.33k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  448|    195|        case BT_S:
  ------------------
  |  Branch (448:9): [True: 195, False: 1.14k]
  ------------------
  449|    391|        case BT_CR:
  ------------------
  |  Branch (449:9): [True: 196, False: 1.14k]
  ------------------
  450|    585|        case BT_LF:
  ------------------
  |  Branch (450:9): [True: 194, False: 1.14k]
  ------------------
  451|    585|          break;
  452|    700|        case BT_GT:
  ------------------
  |  Branch (452:9): [True: 700, False: 639]
  ------------------
  453|    700|          *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|    700|#define MINBPC(enc) 1
  ------------------
  454|    700|          return XML_TOK_END_TAG;
  ------------------
  |  |   66|    700|#  define XML_TOK_END_TAG 5
  ------------------
  455|     54|        default:
  ------------------
  |  Branch (455:9): [True: 54, False: 1.28k]
  ------------------
  456|     54|          *nextTokPtr = ptr;
  457|     54|          return XML_TOK_INVALID;
  ------------------
  |  |   57|     54|#  define XML_TOK_INVALID 0
  ------------------
  458|  1.33k|        }
  459|  1.33k|      }
  460|      2|      return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  461|      0|#  ifdef XML_NS
  462|    358|    case BT_COLON:
  ------------------
  |  Branch (462:5): [True: 358, False: 9.70k]
  ------------------
  463|       |      /* no need to check qname syntax here,
  464|       |         since end-tag must match exactly */
  465|    358|      ptr += MINBPC(enc);
  ------------------
  |  |  228|    358|#define MINBPC(enc) 1
  ------------------
  466|    358|      break;
  467|      0|#  endif
  468|  4.44k|    case BT_GT:
  ------------------
  |  Branch (468:5): [True: 4.44k, False: 5.61k]
  ------------------
  469|  4.44k|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  4.44k|#define MINBPC(enc) 1
  ------------------
  470|  4.44k|      return XML_TOK_END_TAG;
  ------------------
  |  |   66|  4.44k|#  define XML_TOK_END_TAG 5
  ------------------
  471|      5|    default:
  ------------------
  |  Branch (471:5): [True: 5, False: 10.0k]
  ------------------
  472|      5|      *nextTokPtr = ptr;
  473|      5|      return XML_TOK_INVALID;
  ------------------
  |  |   57|      5|#  define XML_TOK_INVALID 0
  ------------------
  474|  10.0k|    }
  475|  10.0k|  }
  476|      5|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      5|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  477|  5.22k|}
xmltok.c:normal_scanAtts:
  573|  27.3k|                 const char **nextTokPtr) {
  574|  27.3k|#  ifdef XML_NS
  575|  27.3k|  int hadColon = 0;
  576|  27.3k|#  endif
  577|   101k|  while (HAS_CHAR(enc, ptr, end)) {
  578|   101k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|   101k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|   101k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  579|   185k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  47.4k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 101k]
  |  |  ------------------
  |  |   82|  47.4k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  242|      0|#define IS_NAME_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, Folded]
  |  |  ------------------
  |  |   83|      0|      *nextTokPtr = ptr;                                                       \
  |  |   84|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|      0|    }                                                                          \
  |  |   86|  47.4k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|  44.1k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 44.1k, False: 57.6k]
  |  |  ------------------
  |  |   88|  46.4k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 2.32k, False: 99.4k]
  |  |  ------------------
  |  |   89|  46.9k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 537, False: 101k]
  |  |  ------------------
  |  |   90|  47.2k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 226, False: 101k]
  |  |  ------------------
  |  |   91|  47.4k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 247, False: 101k]
  |  |  ------------------
  |  |   92|  47.4k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  47.4k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |   93|  47.4k|    break;                                                                     \
  |  |   94|  47.4k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|    209|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 209, False: 101k]
  |  |  |  |  ------------------
  |  |  |  |   71|    209|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 209]
  |  |  |  |  ------------------
  |  |  |  |   72|    198|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|    209|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    418|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    209|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 10, False: 199]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|    199|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    199|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 198]
  |  |  |  |  ------------------
  |  |  |  |   74|     11|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     11|    }                                                                          \
  |  |  |  |   77|    209|    ptr += n;                                                                  \
  |  |  |  |   78|    198|    break;
  |  |  ------------------
  |  |   95|    200|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|    200|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 200, False: 101k]
  |  |  |  |  ------------------
  |  |  |  |   71|    200|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 200]
  |  |  |  |  ------------------
  |  |  |  |   72|    194|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|    200|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    400|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    200|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 5, False: 195]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|    195|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    195|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 194]
  |  |  |  |  ------------------
  |  |  |  |   74|      6|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      6|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      6|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      6|    }                                                                          \
  |  |  |  |   77|    200|    ptr += n;                                                                  \
  |  |  |  |   78|    194|    break;
  |  |  ------------------
  |  |   96|    194|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|     11|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 11, False: 101k]
  |  |  |  |  ------------------
  |  |  |  |   71|     11|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 2, False: 9]
  |  |  |  |  ------------------
  |  |  |  |   72|      2|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      2|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      9|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     18|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      9|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 8, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      1|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   74|      9|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      9|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      9|    }                                                                          \
  |  |  |  |   77|      9|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  580|      0|#  ifdef XML_NS
  581|  18.7k|    case BT_COLON:
  ------------------
  |  Branch (581:5): [True: 18.7k, False: 82.9k]
  ------------------
  582|  18.7k|      if (hadColon) {
  ------------------
  |  Branch (582:11): [True: 4, False: 18.7k]
  ------------------
  583|      4|        *nextTokPtr = ptr;
  584|      4|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      4|#  define XML_TOK_INVALID 0
  ------------------
  585|      4|      }
  586|  18.7k|      hadColon = 1;
  587|  18.7k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  18.7k|#define MINBPC(enc) 1
  ------------------
  588|  18.7k|      REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  18.7k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  18.7k|    {                                                                          \
  |  |  |  |  135|  18.7k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  18.7k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  18.7k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 18.7k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  18.7k|    }
  |  |  ------------------
  ------------------
  589|  18.7k|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  18.7k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  18.7k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  590|  13.9k|        CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|  18.3k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 18.7k]
  |  |  ------------------
  |  |  111|  18.3k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  243|      0|#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 0, Folded]
  |  |  ------------------
  |  |  112|      0|      *nextTokPtr = ptr;                                                       \
  |  |  113|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      0|    }                                                                          \
  |  |  115|  18.3k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|  13.1k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 13.1k, False: 5.65k]
  |  |  ------------------
  |  |  117|  18.3k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 5.24k, False: 13.5k]
  |  |  ------------------
  |  |  118|  18.3k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  18.3k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |  119|  18.3k|    break;                                                                     \
  |  |  120|  18.3k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    206|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 206, False: 18.5k]
  |  |  |  |  ------------------
  |  |  |  |  100|    206|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 206]
  |  |  |  |  ------------------
  |  |  |  |  101|    195|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    206|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    412|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    206|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 10, False: 196]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    196|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    196|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 195]
  |  |  |  |  ------------------
  |  |  |  |  103|     11|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     11|    }                                                                          \
  |  |  |  |  106|    206|    ptr += n;                                                                  \
  |  |  |  |  107|    195|    break;
  |  |  ------------------
  |  |  121|    201|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    201|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 201, False: 18.5k]
  |  |  |  |  ------------------
  |  |  |  |  100|    201|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 201]
  |  |  |  |  ------------------
  |  |  |  |  101|    194|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    201|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    402|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    201|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 6, False: 195]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    195|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    195|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 194]
  |  |  |  |  ------------------
  |  |  |  |  103|      7|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      7|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      7|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      7|    }                                                                          \
  |  |  |  |  106|    201|    ptr += n;                                                                  \
  |  |  |  |  107|    194|    break;
  |  |  ------------------
  |  |  122|    194|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      3|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 3, False: 18.7k]
  |  |  |  |  ------------------
  |  |  |  |  100|      3|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      2|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|      4|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      2|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 1, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      1|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  103|      2|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      2|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      2|    }                                                                          \
  |  |  |  |  106|      2|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  591|      2|      default:
  ------------------
  |  Branch (591:7): [True: 2, False: 18.7k]
  ------------------
  592|      2|        *nextTokPtr = ptr;
  593|      2|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      2|#  define XML_TOK_INVALID 0
  ------------------
  594|  18.7k|      }
  595|  18.7k|      break;
  596|  18.7k|#  endif
  597|  18.7k|    case BT_S:
  ------------------
  |  Branch (597:5): [True: 406, False: 101k]
  ------------------
  598|    601|    case BT_CR:
  ------------------
  |  Branch (598:5): [True: 195, False: 101k]
  ------------------
  599|    795|    case BT_LF:
  ------------------
  |  Branch (599:5): [True: 194, False: 101k]
  ------------------
  600|  1.39k|      for (;;) {
  601|  1.39k|        int t;
  602|       |
  603|  1.39k|        ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.39k|#define MINBPC(enc) 1
  ------------------
  604|  1.39k|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  1.39k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  1.39k|    {                                                                          \
  |  |  |  |  135|  1.39k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  1.39k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  1.39k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 3, False: 1.39k]
  |  |  |  |  ------------------
  |  |  |  |  136|      3|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      3|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      3|      }                                                                        \
  |  |  |  |  138|  1.39k|    }
  |  |  ------------------
  ------------------
  605|  1.39k|        t = BYTE_TYPE(enc, ptr);
  ------------------
  |  |  233|  1.39k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  1.39k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  606|  1.39k|        if (t == BT_EQUALS)
  ------------------
  |  Branch (606:13): [True: 754, False: 636]
  ------------------
  607|    754|          break;
  608|    636|        switch (t) {
  609|    208|        case BT_S:
  ------------------
  |  Branch (609:9): [True: 208, False: 428]
  ------------------
  610|    402|        case BT_LF:
  ------------------
  |  Branch (610:9): [True: 194, False: 442]
  ------------------
  611|    598|        case BT_CR:
  ------------------
  |  Branch (611:9): [True: 196, False: 440]
  ------------------
  612|    598|          break;
  613|     38|        default:
  ------------------
  |  Branch (613:9): [True: 38, False: 598]
  ------------------
  614|     38|          *nextTokPtr = ptr;
  615|     38|          return XML_TOK_INVALID;
  ------------------
  |  |   57|     38|#  define XML_TOK_INVALID 0
  ------------------
  616|    636|        }
  617|    636|      }
  618|    754|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|    754|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  619|  34.9k|    case BT_EQUALS: {
  ------------------
  |  Branch (619:5): [True: 34.2k, False: 67.5k]
  ------------------
  620|  34.9k|      int open;
  621|  34.9k|#  ifdef XML_NS
  622|  34.9k|      hadColon = 0;
  623|  34.9k|#  endif
  624|  35.6k|      for (;;) {
  625|  35.6k|        ptr += MINBPC(enc);
  ------------------
  |  |  228|  35.6k|#define MINBPC(enc) 1
  ------------------
  626|  35.6k|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  35.6k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  35.6k|    {                                                                          \
  |  |  |  |  135|  35.6k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  35.6k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  35.6k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 2, False: 35.6k]
  |  |  |  |  ------------------
  |  |  |  |  136|      2|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      2|      }                                                                        \
  |  |  |  |  138|  35.6k|    }
  |  |  ------------------
  ------------------
  627|  35.6k|        open = BYTE_TYPE(enc, ptr);
  ------------------
  |  |  233|  35.6k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  35.6k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  628|  35.6k|        if (open == BT_QUOT || open == BT_APOS)
  ------------------
  |  Branch (628:13): [True: 33.5k, False: 2.06k]
  |  Branch (628:32): [True: 1.37k, False: 693]
  ------------------
  629|  34.9k|          break;
  630|    693|        switch (open) {
  631|    256|        case BT_S:
  ------------------
  |  Branch (631:9): [True: 256, False: 437]
  ------------------
  632|    462|        case BT_LF:
  ------------------
  |  Branch (632:9): [True: 206, False: 487]
  ------------------
  633|    656|        case BT_CR:
  ------------------
  |  Branch (633:9): [True: 194, False: 499]
  ------------------
  634|    656|          break;
  635|     37|        default:
  ------------------
  |  Branch (635:9): [True: 37, False: 656]
  ------------------
  636|     37|          *nextTokPtr = ptr;
  637|     37|          return XML_TOK_INVALID;
  ------------------
  |  |   57|     37|#  define XML_TOK_INVALID 0
  ------------------
  638|    693|        }
  639|    693|      }
  640|  34.9k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  34.9k|#define MINBPC(enc) 1
  ------------------
  641|       |      /* in attribute value */
  642|  89.0k|      for (;;) {
  643|  89.0k|        int t;
  644|  89.0k|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  89.0k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  89.0k|    {                                                                          \
  |  |  |  |  135|  89.0k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  89.0k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  89.0k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 89.0k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  89.0k|    }
  |  |  ------------------
  ------------------
  645|  89.0k|        t = BYTE_TYPE(enc, ptr);
  ------------------
  |  |  233|  89.0k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  89.0k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  646|  89.0k|        if (t == open)
  ------------------
  |  Branch (646:13): [True: 34.8k, False: 54.1k]
  ------------------
  647|  34.8k|          break;
  648|  54.1k|        switch (t) {
  649|  1.41k|          INVALID_CASES(ptr, nextTokPtr)
  ------------------
  |  |   60|    279|    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    279|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 279, False: 53.9k]
  |  |  |  |  ------------------
  |  |  |  |   50|    279|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 279]
  |  |  |  |  ------------------
  |  |  |  |   51|    269|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    279|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    279|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    279|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 10, False: 269]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     10|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     10|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     10|    }                                                                          \
  |  |  |  |   56|    279|    ptr += n;                                                                  \
  |  |  |  |   57|    269|    break;
  |  |  ------------------
  |  |   61|    269|    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    215|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 215, False: 53.9k]
  |  |  |  |  ------------------
  |  |  |  |   50|    215|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 215]
  |  |  |  |  ------------------
  |  |  |  |   51|    204|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    215|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    215|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    215|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 11, False: 204]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     11|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     11|    }                                                                          \
  |  |  |  |   56|    215|    ptr += n;                                                                  \
  |  |  |  |   57|    204|    break;
  |  |  ------------------
  |  |   62|    213|    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    213|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 213, False: 53.9k]
  |  |  |  |  ------------------
  |  |  |  |   50|    213|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 1, False: 212]
  |  |  |  |  ------------------
  |  |  |  |   51|    208|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    212|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    212|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    212|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 4, False: 208]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      4|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      4|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      4|    }                                                                          \
  |  |  |  |   56|    212|    ptr += n;                                                                  \
  |  |  |  |   57|    208|    break;
  |  |  ------------------
  |  |   63|    208|  case BT_NONXML:                                                              \
  |  |  ------------------
  |  |  |  Branch (63:3): [True: 1, False: 54.1k]
  |  |  ------------------
  |  |   64|      2|  case BT_MALFORM:                                                             \
  |  |  ------------------
  |  |  |  Branch (64:3): [True: 1, False: 54.1k]
  |  |  ------------------
  |  |   65|      3|  case BT_TRAIL:                                                               \
  |  |  ------------------
  |  |  |  Branch (65:3): [True: 1, False: 54.1k]
  |  |  ------------------
  |  |   66|      3|    *(nextTokPtr) = (ptr);                                                     \
  |  |   67|      3|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      3|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
  650|  21.4k|        case BT_AMP: {
  ------------------
  |  Branch (650:9): [True: 21.4k, False: 32.7k]
  ------------------
  651|  21.4k|          int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr);
  ------------------
  |  |  248|  21.4k|#define PREFIX(ident) normal_##ident
  ------------------
                        int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr);
  ------------------
  |  |  228|  21.4k|#define MINBPC(enc) 1
  ------------------
  652|  21.4k|          if (tok <= 0) {
  ------------------
  |  Branch (652:15): [True: 19, False: 21.4k]
  ------------------
  653|     19|            if (tok == XML_TOK_INVALID)
  ------------------
  |  |   57|     19|#  define XML_TOK_INVALID 0
  ------------------
  |  Branch (653:17): [True: 15, False: 4]
  ------------------
  654|     15|              *nextTokPtr = ptr;
  655|     19|            return tok;
  656|     19|          }
  657|  21.4k|          break;
  658|  21.4k|        }
  659|  21.4k|        case BT_LT:
  ------------------
  |  Branch (659:9): [True: 27, False: 54.1k]
  ------------------
  660|     27|          *nextTokPtr = ptr;
  661|     27|          return XML_TOK_INVALID;
  ------------------
  |  |   57|     27|#  define XML_TOK_INVALID 0
  ------------------
  662|  32.0k|        default:
  ------------------
  |  Branch (662:9): [True: 32.0k, False: 22.1k]
  ------------------
  663|  32.0k|          ptr += MINBPC(enc);
  ------------------
  |  |  228|  32.0k|#define MINBPC(enc) 1
  ------------------
  664|  32.0k|          break;
  665|  54.1k|        }
  666|  54.1k|      }
  667|  34.8k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  34.8k|#define MINBPC(enc) 1
  ------------------
  668|  34.8k|      REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  34.8k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  34.8k|    {                                                                          \
  |  |  |  |  135|  34.8k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  34.8k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  34.8k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 34.8k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  34.8k|    }
  |  |  ------------------
  ------------------
  669|  34.8k|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  34.8k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  34.8k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  670|  8.16k|      case BT_S:
  ------------------
  |  Branch (670:7): [True: 8.16k, False: 26.6k]
  ------------------
  671|  8.36k|      case BT_CR:
  ------------------
  |  Branch (671:7): [True: 196, False: 34.6k]
  ------------------
  672|  8.55k|      case BT_LF:
  ------------------
  |  Branch (672:7): [True: 196, False: 34.6k]
  ------------------
  673|  8.55k|        break;
  674|  21.7k|      case BT_SOL:
  ------------------
  |  Branch (674:7): [True: 21.7k, False: 13.1k]
  ------------------
  675|  21.7k|        goto sol;
  676|  4.58k|      case BT_GT:
  ------------------
  |  Branch (676:7): [True: 4.58k, False: 30.2k]
  ------------------
  677|  4.58k|        goto gt;
  678|      1|      default:
  ------------------
  |  Branch (678:7): [True: 1, False: 34.8k]
  ------------------
  679|      1|        *nextTokPtr = ptr;
  680|      1|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
  681|  34.8k|      }
  682|       |      /* ptr points to closing quote */
  683|  9.20k|      for (;;) {
  684|  9.20k|        ptr += MINBPC(enc);
  ------------------
  |  |  228|  9.20k|#define MINBPC(enc) 1
  ------------------
  685|  9.20k|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  9.20k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  9.20k|    {                                                                          \
  |  |  |  |  135|  9.20k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  9.20k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  9.20k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 2, False: 9.20k]
  |  |  |  |  ------------------
  |  |  |  |  136|      2|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      2|      }                                                                        \
  |  |  |  |  138|  9.20k|    }
  |  |  ------------------
  ------------------
  686|  9.20k|        switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  9.20k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  9.20k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  687|  6.71k|          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|  7.15k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 9.20k]
  |  |  ------------------
  |  |  111|  7.15k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  243|      0|#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 0, Folded]
  |  |  ------------------
  |  |  112|      0|      *nextTokPtr = ptr;                                                       \
  |  |  113|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      0|    }                                                                          \
  |  |  115|  7.15k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|  5.45k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 5.45k, False: 3.74k]
  |  |  ------------------
  |  |  117|  7.15k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 1.70k, False: 7.49k]
  |  |  ------------------
  |  |  118|  7.15k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  7.15k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |  119|  7.15k|    break;                                                                     \
  |  |  120|  7.15k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    355|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 355, False: 8.84k]
  |  |  |  |  ------------------
  |  |  |  |  100|    355|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 355]
  |  |  |  |  ------------------
  |  |  |  |  101|    353|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    355|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    710|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    355|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 1, False: 354]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    354|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    354|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 353]
  |  |  |  |  ------------------
  |  |  |  |  103|      2|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      2|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      2|    }                                                                          \
  |  |  |  |  106|    355|    ptr += n;                                                                  \
  |  |  |  |  107|    353|    break;
  |  |  ------------------
  |  |  121|    353|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    273|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 273, False: 8.92k]
  |  |  |  |  ------------------
  |  |  |  |  100|    273|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 273]
  |  |  |  |  ------------------
  |  |  |  |  101|    263|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    273|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    546|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    273|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 9, False: 264]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    264|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    264|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 263]
  |  |  |  |  ------------------
  |  |  |  |  103|     10|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     10|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     10|    }                                                                          \
  |  |  |  |  106|    273|    ptr += n;                                                                  \
  |  |  |  |  107|    263|    break;
  |  |  ------------------
  |  |  122|    263|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      3|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 3, False: 9.19k]
  |  |  |  |  ------------------
  |  |  |  |  100|      3|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 2]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      2|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|      4|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      2|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 1, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      1|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  103|      2|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      2|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      2|    }                                                                          \
  |  |  |  |  106|      2|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  688|    256|        case BT_S:
  ------------------
  |  Branch (688:9): [True: 256, False: 8.94k]
  ------------------
  689|    454|        case BT_CR:
  ------------------
  |  Branch (689:9): [True: 198, False: 9.00k]
  ------------------
  690|    648|        case BT_LF:
  ------------------
  |  Branch (690:9): [True: 194, False: 9.00k]
  ------------------
  691|    648|          continue;
  692|    322|        case BT_GT:
  ------------------
  |  Branch (692:9): [True: 322, False: 8.88k]
  ------------------
  693|  4.90k|        gt:
  694|  4.90k|          *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  4.90k|#define MINBPC(enc) 1
  ------------------
  695|  4.90k|          return XML_TOK_START_TAG_WITH_ATTS;
  ------------------
  |  |   62|  4.90k|#  define XML_TOK_START_TAG_WITH_ATTS 1
  ------------------
  696|    442|        case BT_SOL:
  ------------------
  |  Branch (696:9): [True: 442, False: 8.76k]
  ------------------
  697|  22.1k|        sol:
  698|  22.1k|          ptr += MINBPC(enc);
  ------------------
  |  |  228|  22.1k|#define MINBPC(enc) 1
  ------------------
  699|  22.1k|          REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  22.1k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  22.1k|    {                                                                          \
  |  |  |  |  135|  22.1k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  22.1k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  22.1k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 22.1k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  22.1k|    }
  |  |  ------------------
  ------------------
  700|  22.1k|          if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  246|  22.1k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (700:15): [True: 9, False: 22.1k]
  ------------------
  701|      9|            *nextTokPtr = ptr;
  702|      9|            return XML_TOK_INVALID;
  ------------------
  |  |   57|      9|#  define XML_TOK_INVALID 0
  ------------------
  703|      9|          }
  704|  22.1k|          *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  22.1k|#define MINBPC(enc) 1
  ------------------
  705|  22.1k|          return XML_TOK_EMPTY_ELEMENT_WITH_ATTS;
  ------------------
  |  |   64|  22.1k|#  define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag <e/> */
  ------------------
  706|      1|        default:
  ------------------
  |  Branch (706:9): [True: 1, False: 9.20k]
  ------------------
  707|      1|          *nextTokPtr = ptr;
  708|      1|          return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
  709|  9.20k|        }
  710|  7.77k|        break;
  711|  9.20k|      }
  712|  7.77k|      break;
  713|  8.55k|    }
  714|  7.77k|    default:
  ------------------
  |  Branch (714:5): [True: 96, False: 101k]
  ------------------
  715|     96|      *nextTokPtr = ptr;
  716|     96|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     96|#  define XML_TOK_INVALID 0
  ------------------
  717|   101k|    }
  718|   101k|  }
  719|      2|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  720|  27.3k|}
xmltok.c:normal_scanRef:
  545|   816k|                const char **nextTokPtr) {
  546|   816k|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|   816k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|   816k|    {                                                                          \
  |  |  |  |  135|   816k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|   816k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|   816k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 14, False: 816k]
  |  |  |  |  ------------------
  |  |  |  |  136|     14|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     14|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|     14|      }                                                                        \
  |  |  |  |  138|   816k|    }
  |  |  ------------------
  ------------------
  547|   816k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|   816k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|   816k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  548|   806k|    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|   808k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 0, False: 816k]
  |  |  ------------------
  |  |  111|   808k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  243|      0|#define IS_NMSTRT_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 0, Folded]
  |  |  ------------------
  |  |  112|      0|      *nextTokPtr = ptr;                                                       \
  |  |  113|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      0|    }                                                                          \
  |  |  115|   808k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|   805k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 805k, False: 10.3k]
  |  |  ------------------
  |  |  117|   808k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 3.06k, False: 812k]
  |  |  ------------------
  |  |  118|   808k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|   808k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |  119|   808k|    break;                                                                     \
  |  |  120|   808k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    257|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 257, False: 815k]
  |  |  |  |  ------------------
  |  |  |  |  100|    257|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 257]
  |  |  |  |  ------------------
  |  |  |  |  101|    244|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    257|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    514|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    257|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 11, False: 246]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    246|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    246|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 2, False: 244]
  |  |  |  |  ------------------
  |  |  |  |  103|     13|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     13|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     13|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     13|    }                                                                          \
  |  |  |  |  106|    257|    ptr += n;                                                                  \
  |  |  |  |  107|    244|    break;
  |  |  ------------------
  |  |  121|    244|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|    203|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 203, False: 815k]
  |  |  |  |  ------------------
  |  |  |  |  100|    203|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 203]
  |  |  |  |  ------------------
  |  |  |  |  101|    197|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|    203|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    406|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    203|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 5, False: 198]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|    198|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    198|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 197]
  |  |  |  |  ------------------
  |  |  |  |  103|      6|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      6|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      6|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      6|    }                                                                          \
  |  |  |  |  106|    203|    ptr += n;                                                                  \
  |  |  |  |  107|    197|    break;
  |  |  ------------------
  |  |  122|    197|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      8|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 8, False: 816k]
  |  |  |  |  ------------------
  |  |  |  |  100|      8|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 7]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      7|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|     14|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      7|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 6, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  238|      1|#define IS_NMSTRT_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isNmstrt##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  103|      7|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      7|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      7|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      7|    }                                                                          \
  |  |  |  |  106|      7|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  549|  6.79k|  case BT_NUM:
  ------------------
  |  Branch (549:3): [True: 6.79k, False: 809k]
  ------------------
  550|  6.79k|    return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  6.79k|#define PREFIX(ident) normal_##ident
  ------------------
                  return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  6.79k|#define MINBPC(enc) 1
  ------------------
  551|     22|  default:
  ------------------
  |  Branch (551:3): [True: 22, False: 816k]
  ------------------
  552|     22|    *nextTokPtr = ptr;
  553|     22|    return XML_TOK_INVALID;
  ------------------
  |  |   57|     22|#  define XML_TOK_INVALID 0
  ------------------
  554|   816k|  }
  555|   883k|  while (HAS_CHAR(enc, ptr, end)) {
  556|   883k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|   883k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|   883k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  557|   292k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  74.3k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 883k]
  |  |  ------------------
  |  |   82|  74.3k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  242|      0|#define IS_NAME_CHAR_MINBPC(enc, p) (0)
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, Folded]
  |  |  ------------------
  |  |   83|      0|      *nextTokPtr = ptr;                                                       \
  |  |   84|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|      0|    }                                                                          \
  |  |   86|  74.3k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|  71.7k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 71.7k, False: 812k]
  |  |  ------------------
  |  |   88|  72.6k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 881, False: 883k]
  |  |  ------------------
  |  |   89|  73.6k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 1.01k, False: 882k]
  |  |  ------------------
  |  |   90|  73.8k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 242, False: 883k]
  |  |  ------------------
  |  |   91|  74.3k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 469, False: 883k]
  |  |  ------------------
  |  |   92|  74.3k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  228|  74.3k|#define MINBPC(enc) 1
  |  |  ------------------
  |  |   93|  74.3k|    break;                                                                     \
  |  |   94|  74.3k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|    282|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 282, False: 883k]
  |  |  |  |  ------------------
  |  |  |  |   71|    282|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 282]
  |  |  |  |  ------------------
  |  |  |  |   72|    271|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|    282|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    564|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    282|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 10, False: 272]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|    272|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    272|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 271]
  |  |  |  |  ------------------
  |  |  |  |   74|     11|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     11|    }                                                                          \
  |  |  |  |   77|    282|    ptr += n;                                                                  \
  |  |  |  |   78|    271|    break;
  |  |  ------------------
  |  |   95|    271|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|    201|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 201, False: 883k]
  |  |  |  |  ------------------
  |  |  |  |   71|    201|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 201]
  |  |  |  |  ------------------
  |  |  |  |   72|    196|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|    201|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    402|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    201|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 4, False: 197]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|    197|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    197|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 196]
  |  |  |  |  ------------------
  |  |  |  |   74|      5|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      5|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      5|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      5|    }                                                                          \
  |  |  |  |   77|    201|    ptr += n;                                                                  \
  |  |  |  |   78|    196|    break;
  |  |  ------------------
  |  |   96|    196|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|      6|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 6, False: 883k]
  |  |  |  |  ------------------
  |  |  |  |   71|      6|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 4, False: 2]
  |  |  |  |  ------------------
  |  |  |  |   72|      4|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      4|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      2|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|      4|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      2|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 1, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  237|      1|#define IS_NAME_CHAR(enc, p, n) (AS_NORMAL_ENCODING(enc)->isName##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|      1|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 1, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   74|      2|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      2|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      2|    }                                                                          \
  |  |  |  |   77|      2|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  558|   809k|    case BT_SEMI:
  ------------------
  |  Branch (558:5): [True: 809k, False: 74.8k]
  ------------------
  559|   809k|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|   809k|#define MINBPC(enc) 1
  ------------------
  560|   809k|      return XML_TOK_ENTITY_REF;
  ------------------
  |  |   70|   809k|#  define XML_TOK_ENTITY_REF 9
  ------------------
  561|     46|    default:
  ------------------
  |  Branch (561:5): [True: 46, False: 883k]
  ------------------
  562|     46|      *nextTokPtr = ptr;
  563|     46|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     46|#  define XML_TOK_INVALID 0
  ------------------
  564|   883k|    }
  565|   883k|  }
  566|      2|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  567|   809k|}
xmltok.c:normal_scanCharRef:
  514|  6.79k|                    const char **nextTokPtr) {
  515|  6.79k|  if (HAS_CHAR(enc, ptr, end)) {
  ------------------
  |  |  131|  6.79k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  6.79k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  6.79k|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (129:5): [True: 6.79k, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  516|  6.79k|    if (CHAR_MATCHES(enc, ptr, ASCII_x))
  ------------------
  |  |  246|  6.79k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 5.44k, False: 1.34k]
  |  |  ------------------
  ------------------
  517|  5.44k|      return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  5.44k|#define PREFIX(ident) normal_##ident
  ------------------
                    return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  5.44k|#define MINBPC(enc) 1
  ------------------
  518|  1.34k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  1.34k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  1.34k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  519|  1.33k|    case BT_DIGIT:
  ------------------
  |  Branch (519:5): [True: 1.33k, False: 15]
  ------------------
  520|  1.33k|      break;
  521|     15|    default:
  ------------------
  |  Branch (521:5): [True: 15, False: 1.33k]
  ------------------
  522|     15|      *nextTokPtr = ptr;
  523|     15|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     15|#  define XML_TOK_INVALID 0
  ------------------
  524|  1.34k|    }
  525|  3.22k|    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  228|  1.33k|#define MINBPC(enc) 1
  ------------------
                  for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  228|  1.89k|#define MINBPC(enc) 1
  ------------------
  526|  3.22k|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  3.22k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  3.22k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  527|  1.89k|      case BT_DIGIT:
  ------------------
  |  Branch (527:7): [True: 1.89k, False: 1.33k]
  ------------------
  528|  1.89k|        break;
  529|  1.32k|      case BT_SEMI:
  ------------------
  |  Branch (529:7): [True: 1.32k, False: 1.89k]
  ------------------
  530|  1.32k|        *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  1.32k|#define MINBPC(enc) 1
  ------------------
  531|  1.32k|        return XML_TOK_CHAR_REF;
  ------------------
  |  |   71|  1.32k|#  define XML_TOK_CHAR_REF 10 /* numeric character reference */
  ------------------
  532|      7|      default:
  ------------------
  |  Branch (532:7): [True: 7, False: 3.21k]
  ------------------
  533|      7|        *nextTokPtr = ptr;
  534|      7|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      7|#  define XML_TOK_INVALID 0
  ------------------
  535|  3.22k|      }
  536|  3.22k|    }
  537|  1.33k|  }
  538|      2|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  539|  6.79k|}
xmltok.c:normal_scanHexCharRef:
  483|  5.44k|                       const char **nextTokPtr) {
  484|  5.44k|  if (HAS_CHAR(enc, ptr, end)) {
  ------------------
  |  |  131|  5.44k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  5.44k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  5.44k|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (129:5): [True: 5.44k, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  485|  5.44k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  5.44k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  5.44k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  486|  3.51k|    case BT_DIGIT:
  ------------------
  |  Branch (486:5): [True: 3.51k, False: 1.93k]
  ------------------
  487|  5.44k|    case BT_HEX:
  ------------------
  |  Branch (487:5): [True: 1.92k, False: 3.51k]
  ------------------
  488|  5.44k|      break;
  489|      5|    default:
  ------------------
  |  Branch (489:5): [True: 5, False: 5.44k]
  ------------------
  490|      5|      *nextTokPtr = ptr;
  491|      5|      return XML_TOK_INVALID;
  ------------------
  |  |   57|      5|#  define XML_TOK_INVALID 0
  ------------------
  492|  5.44k|    }
  493|  16.7k|    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  228|  5.44k|#define MINBPC(enc) 1
  ------------------
                  for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  228|  11.3k|#define MINBPC(enc) 1
  ------------------
  494|  16.7k|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  16.7k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  16.7k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  495|  6.06k|      case BT_DIGIT:
  ------------------
  |  Branch (495:7): [True: 6.06k, False: 10.7k]
  ------------------
  496|  11.3k|      case BT_HEX:
  ------------------
  |  Branch (496:7): [True: 5.27k, False: 11.5k]
  ------------------
  497|  11.3k|        break;
  498|  5.41k|      case BT_SEMI:
  ------------------
  |  Branch (498:7): [True: 5.41k, False: 11.3k]
  ------------------
  499|  5.41k|        *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  5.41k|#define MINBPC(enc) 1
  ------------------
  500|  5.41k|        return XML_TOK_CHAR_REF;
  ------------------
  |  |   71|  5.41k|#  define XML_TOK_CHAR_REF 10 /* numeric character reference */
  ------------------
  501|     22|      default:
  ------------------
  |  Branch (501:7): [True: 22, False: 16.7k]
  ------------------
  502|     22|        *nextTokPtr = ptr;
  503|     22|        return XML_TOK_INVALID;
  ------------------
  |  |   57|     22|#  define XML_TOK_INVALID 0
  ------------------
  504|  16.7k|      }
  505|  16.7k|    }
  506|  5.44k|  }
  507|      3|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      3|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  508|  5.44k|}
xmltok.c:normal_cdataSectionTok:
  356|  4.87k|                        const char **nextTokPtr) {
  357|  4.87k|  if (ptr >= end)
  ------------------
  |  Branch (357:7): [True: 129, False: 4.74k]
  ------------------
  358|    129|    return XML_TOK_NONE;
  ------------------
  |  |   51|    129|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
  359|  4.74k|  if (MINBPC(enc) > 1) {
  ------------------
  |  |  228|  4.74k|#define MINBPC(enc) 1
  ------------------
  |  Branch (359:7): [Folded, False: 4.74k]
  ------------------
  360|      0|    size_t n = end - ptr;
  361|      0|    if (n & (MINBPC(enc) - 1)) {
  ------------------
  |  |  228|      0|#define MINBPC(enc) 1
  ------------------
  |  Branch (361:9): [True: 0, False: 0]
  ------------------
  362|      0|      n &= ~(MINBPC(enc) - 1);
  ------------------
  |  |  228|      0|#define MINBPC(enc) 1
  ------------------
  363|      0|      if (n == 0)
  ------------------
  |  Branch (363:11): [True: 0, False: 0]
  ------------------
  364|      0|        return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  365|      0|      end = ptr + n;
  366|      0|    }
  367|      0|  }
  368|  4.74k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  4.74k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  4.74k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  369|  2.16k|  case BT_RSQB:
  ------------------
  |  Branch (369:3): [True: 2.16k, False: 2.57k]
  ------------------
  370|  2.16k|    ptr += MINBPC(enc);
  ------------------
  |  |  228|  2.16k|#define MINBPC(enc) 1
  ------------------
  371|  2.16k|    REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  2.16k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  2.16k|    {                                                                          \
  |  |  |  |  135|  2.16k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  2.16k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  2.16k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 2.16k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  2.16k|    }
  |  |  ------------------
  ------------------
  372|  2.16k|    if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB))
  ------------------
  |  |  246|  2.16k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (372:9): [True: 405, False: 1.76k]
  ------------------
  373|    405|      break;
  374|  1.76k|    ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.76k|#define MINBPC(enc) 1
  ------------------
  375|  1.76k|    REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  1.76k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  1.76k|    {                                                                          \
  |  |  |  |  135|  1.76k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  1.76k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|  1.76k|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 1.75k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  1.76k|    }
  |  |  ------------------
  ------------------
  376|  1.75k|    if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  246|  1.75k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (376:9): [True: 836, False: 923]
  ------------------
  377|    836|      ptr -= MINBPC(enc);
  ------------------
  |  |  228|    836|#define MINBPC(enc) 1
  ------------------
  378|    836|      break;
  379|    836|    }
  380|    923|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|    923|#define MINBPC(enc) 1
  ------------------
  381|    923|    return XML_TOK_CDATA_SECT_CLOSE;
  ------------------
  |  |  113|    923|#  define XML_TOK_CDATA_SECT_CLOSE 40
  ------------------
  382|    625|  case BT_CR:
  ------------------
  |  Branch (382:3): [True: 625, False: 4.11k]
  ------------------
  383|    625|    ptr += MINBPC(enc);
  ------------------
  |  |  228|    625|#define MINBPC(enc) 1
  ------------------
  384|    625|    REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    625|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    625|    {                                                                          \
  |  |  |  |  135|    625|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    625|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  228|    625|#define MINBPC(enc) 1
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 0, False: 625]
  |  |  |  |  ------------------
  |  |  |  |  136|      0|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      0|      }                                                                        \
  |  |  |  |  138|    625|    }
  |  |  ------------------
  ------------------
  385|    625|    if (BYTE_TYPE(enc, ptr) == BT_LF)
  ------------------
  |  |  233|    625|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|    625|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  |  Branch (385:9): [True: 194, False: 431]
  ------------------
  386|    194|      ptr += MINBPC(enc);
  ------------------
  |  |  228|    194|#define MINBPC(enc) 1
  ------------------
  387|    625|    *nextTokPtr = ptr;
  388|    625|    return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|    625|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
  389|    536|  case BT_LF:
  ------------------
  |  Branch (389:3): [True: 536, False: 4.20k]
  ------------------
  390|    536|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|    536|#define MINBPC(enc) 1
  ------------------
  391|    536|    return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|    536|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
  392|  1.29k|    INVALID_CASES(ptr, nextTokPtr)
  ------------------
  |  |   60|    245|    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    245|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 245, False: 4.49k]
  |  |  |  |  ------------------
  |  |  |  |   50|    245|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 245]
  |  |  |  |  ------------------
  |  |  |  |   51|    244|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    245|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    245|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    245|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 1, False: 244]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      1|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      1|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      1|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      1|    }                                                                          \
  |  |  |  |   56|    245|    ptr += n;                                                                  \
  |  |  |  |   57|    244|    break;
  |  |  ------------------
  |  |   61|    244|    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    202|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 202, False: 4.54k]
  |  |  |  |  ------------------
  |  |  |  |   50|    202|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 202]
  |  |  |  |  ------------------
  |  |  |  |   51|    194|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    202|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    202|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    202|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 8, False: 194]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      8|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      8|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      8|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      8|    }                                                                          \
  |  |  |  |   56|    202|    ptr += n;                                                                  \
  |  |  |  |   57|    194|    break;
  |  |  ------------------
  |  |   62|    198|    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    198|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 198, False: 4.54k]
  |  |  |  |  ------------------
  |  |  |  |   50|    198|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 1, False: 197]
  |  |  |  |  ------------------
  |  |  |  |   51|    194|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    197|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  240|    197|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  207|    197|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (240:3): [True: 3, False: 194]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      3|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      3|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      3|    }                                                                          \
  |  |  |  |   56|    197|    ptr += n;                                                                  \
  |  |  |  |   57|    194|    break;
  |  |  ------------------
  |  |   63|    194|  case BT_NONXML:                                                              \
  |  |  ------------------
  |  |  |  Branch (63:3): [True: 3, False: 4.73k]
  |  |  ------------------
  |  |   64|      5|  case BT_MALFORM:                                                             \
  |  |  ------------------
  |  |  |  Branch (64:3): [True: 2, False: 4.74k]
  |  |  ------------------
  |  |   65|      9|  case BT_TRAIL:                                                               \
  |  |  ------------------
  |  |  |  Branch (65:3): [True: 4, False: 4.73k]
  |  |  ------------------
  |  |   66|      9|    *(nextTokPtr) = (ptr);                                                     \
  |  |   67|      9|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
  393|    761|  default:
  ------------------
  |  Branch (393:3): [True: 761, False: 3.98k]
  ------------------
  394|    761|    ptr += MINBPC(enc);
  ------------------
  |  |  228|    761|#define MINBPC(enc) 1
  ------------------
  395|    761|    break;
  396|  4.74k|  }
  397|  9.57k|  while (HAS_CHAR(enc, ptr, end)) {
  398|  9.57k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  9.57k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  9.57k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  399|      0|#  define LEAD_CASE(n)                                                         \
  400|      0|  case BT_LEAD##n:                                                             \
  401|      0|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  402|      0|      *nextTokPtr = ptr;                                                       \
  403|      0|      return XML_TOK_DATA_CHARS;                                               \
  404|      0|    }                                                                          \
  405|      0|    ptr += n;                                                                  \
  406|      0|    break;
  407|    327|      LEAD_CASE(2)
  ------------------
  |  |  400|    327|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (400:3): [True: 327, False: 9.25k]
  |  |  ------------------
  |  |  401|    327|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  |  |  ------------------
  |  |  |  |  240|    327|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    327|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (240:3): [True: 1, False: 326]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (401:9): [True: 0, False: 327]
  |  |  ------------------
  |  |  402|      1|      *nextTokPtr = ptr;                                                       \
  |  |  403|      1|      return XML_TOK_DATA_CHARS;                                               \
  |  |  ------------------
  |  |  |  |   67|      1|#  define XML_TOK_DATA_CHARS 6
  |  |  ------------------
  |  |  404|      1|    }                                                                          \
  |  |  405|    326|    ptr += n;                                                                  \
  |  |  406|    326|    break;
  ------------------
  408|    206|      LEAD_CASE(3)
  ------------------
  |  |  400|    206|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (400:3): [True: 206, False: 9.37k]
  |  |  ------------------
  |  |  401|    206|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  |  |  ------------------
  |  |  |  |  240|    206|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    206|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (240:3): [True: 6, False: 200]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (401:9): [True: 0, False: 206]
  |  |  ------------------
  |  |  402|      6|      *nextTokPtr = ptr;                                                       \
  |  |  403|      6|      return XML_TOK_DATA_CHARS;                                               \
  |  |  ------------------
  |  |  |  |   67|      6|#  define XML_TOK_DATA_CHARS 6
  |  |  ------------------
  |  |  404|      6|    }                                                                          \
  |  |  405|    200|    ptr += n;                                                                  \
  |  |  406|    200|    break;
  ------------------
  409|    198|      LEAD_CASE(4)
  ------------------
  |  |  400|    198|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (400:3): [True: 198, False: 9.38k]
  |  |  ------------------
  |  |  401|    198|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  |  |  ------------------
  |  |  |  |  240|    197|  (AS_NORMAL_ENCODING(enc)->isInvalid##n(enc, p))
  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    197|#define AS_NORMAL_ENCODING(enc) ((const struct normal_encoding *)(enc))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (240:3): [True: 3, False: 194]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (401:9): [True: 1, False: 197]
  |  |  ------------------
  |  |  402|      4|      *nextTokPtr = ptr;                                                       \
  |  |  403|      4|      return XML_TOK_DATA_CHARS;                                               \
  |  |  ------------------
  |  |  |  |   67|      4|#  define XML_TOK_DATA_CHARS 6
  |  |  ------------------
  |  |  404|      4|    }                                                                          \
  |  |  405|    194|    ptr += n;                                                                  \
  |  |  406|    194|    break;
  ------------------
  410|      0|#  undef LEAD_CASE
  411|      2|    case BT_NONXML:
  ------------------
  |  Branch (411:5): [True: 2, False: 9.57k]
  ------------------
  412|      3|    case BT_MALFORM:
  ------------------
  |  Branch (412:5): [True: 1, False: 9.57k]
  ------------------
  413|      5|    case BT_TRAIL:
  ------------------
  |  Branch (413:5): [True: 2, False: 9.57k]
  ------------------
  414|    238|    case BT_CR:
  ------------------
  |  Branch (414:5): [True: 233, False: 9.34k]
  ------------------
  415|    710|    case BT_LF:
  ------------------
  |  Branch (415:5): [True: 472, False: 9.10k]
  ------------------
  416|  2.49k|    case BT_RSQB:
  ------------------
  |  Branch (416:5): [True: 1.78k, False: 7.79k]
  ------------------
  417|  2.49k|      *nextTokPtr = ptr;
  418|  2.49k|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|  2.49k|#  define XML_TOK_DATA_CHARS 6
  ------------------
  419|  6.35k|    default:
  ------------------
  |  Branch (419:5): [True: 6.35k, False: 3.22k]
  ------------------
  420|  6.35k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  6.35k|#define MINBPC(enc) 1
  ------------------
  421|  6.35k|      break;
  422|  9.57k|    }
  423|  9.57k|  }
  424|    129|  *nextTokPtr = ptr;
  425|    129|  return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|    129|#  define XML_TOK_DATA_CHARS 6
  ------------------
  426|  2.63k|}
xmltok.c:normal_attributeValueTok:
 1262|  16.5M|                          const char **nextTokPtr) {
 1263|  16.5M|  const char *start;
 1264|  16.5M|  if (ptr >= end)
  ------------------
  |  Branch (1264:7): [True: 590k, False: 15.9M]
  ------------------
 1265|   590k|    return XML_TOK_NONE;
  ------------------
  |  |   51|   590k|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
 1266|  15.9M|  else if (! HAS_CHAR(enc, ptr, end)) {
  ------------------
  |  |  131|  15.9M|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  15.9M|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  15.9M|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1266:12): [True: 0, False: 15.9M]
  ------------------
 1267|       |    /* This line cannot be executed.  The incoming data has already
 1268|       |     * been tokenized once, so incomplete characters like this have
 1269|       |     * already been eliminated from the input.  Retaining the paranoia
 1270|       |     * check is still valuable, however.
 1271|       |     */
 1272|      0|    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
  ------------------
  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
 1273|      0|  }
 1274|  15.9M|  start = ptr;
 1275|   106M|  while (HAS_CHAR(enc, ptr, end)) {
 1276|   106M|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|   106M|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|   106M|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
 1277|      0|#  define LEAD_CASE(n)                                                         \
 1278|      0|  case BT_LEAD##n:                                                             \
 1279|      0|    ptr += n; /* NOTE: The encoding has already been validated. */             \
 1280|      0|    break;
 1281|   259k|      LEAD_CASE(2)
  ------------------
  |  | 1278|   259k|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1278:3): [True: 259k, False: 106M]
  |  |  ------------------
  |  | 1279|   259k|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1280|   259k|    break;
  ------------------
 1282|  1.52k|      LEAD_CASE(3)
  ------------------
  |  | 1278|  1.52k|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1278:3): [True: 1.52k, False: 106M]
  |  |  ------------------
  |  | 1279|  1.52k|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1280|  1.52k|    break;
  ------------------
 1283|  2.25k|      LEAD_CASE(4)
  ------------------
  |  | 1278|  2.25k|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1278:3): [True: 2.25k, False: 106M]
  |  |  ------------------
  |  | 1279|  2.25k|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1280|  2.25k|    break;
  ------------------
 1284|      0|#  undef LEAD_CASE
 1285|   773k|    case BT_AMP:
  ------------------
  |  Branch (1285:5): [True: 773k, False: 105M]
  ------------------
 1286|   773k|      if (ptr == start)
  ------------------
  |  Branch (1286:11): [True: 630k, False: 143k]
  ------------------
 1287|   630k|        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|   630k|#define PREFIX(ident) normal_##ident
  ------------------
                      return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|   630k|#define MINBPC(enc) 1
  ------------------
 1288|   143k|      *nextTokPtr = ptr;
 1289|   143k|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|   143k|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1290|     10|    case BT_LT:
  ------------------
  |  Branch (1290:5): [True: 10, False: 106M]
  ------------------
 1291|       |      /* this is for inside entity references */
 1292|     10|      *nextTokPtr = ptr;
 1293|     10|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     10|#  define XML_TOK_INVALID 0
  ------------------
 1294|  52.2k|    case BT_LF:
  ------------------
  |  Branch (1294:5): [True: 52.2k, False: 106M]
  ------------------
 1295|  52.2k|      if (ptr == start) {
  ------------------
  |  Branch (1295:11): [True: 26.2k, False: 25.9k]
  ------------------
 1296|  26.2k|        *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  26.2k|#define MINBPC(enc) 1
  ------------------
 1297|  26.2k|        return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|  26.2k|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
 1298|  26.2k|      }
 1299|  25.9k|      *nextTokPtr = ptr;
 1300|  25.9k|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|  25.9k|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1301|    920|    case BT_CR:
  ------------------
  |  Branch (1301:5): [True: 920, False: 106M]
  ------------------
 1302|    920|      if (ptr == start) {
  ------------------
  |  Branch (1302:11): [True: 695, False: 225]
  ------------------
 1303|    695|        ptr += MINBPC(enc);
  ------------------
  |  |  228|    695|#define MINBPC(enc) 1
  ------------------
 1304|    695|        if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|    695|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|    695|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|    695|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1304:13): [True: 81, False: 614]
  ------------------
 1305|     81|          return XML_TOK_TRAILING_CR;
  ------------------
  |  |   53|     81|    -3                            /* A CR at the end of the scan;              \
  ------------------
 1306|    614|        if (BYTE_TYPE(enc, ptr) == BT_LF)
  ------------------
  |  |  233|    614|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|    614|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  |  Branch (1306:13): [True: 195, False: 419]
  ------------------
 1307|    195|          ptr += MINBPC(enc);
  ------------------
  |  |  228|    195|#define MINBPC(enc) 1
  ------------------
 1308|    614|        *nextTokPtr = ptr;
 1309|    614|        return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|    614|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
 1310|    695|      }
 1311|    225|      *nextTokPtr = ptr;
 1312|    225|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|    225|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1313|  14.5M|    case BT_S:
  ------------------
  |  Branch (1313:5): [True: 14.5M, False: 91.9M]
  ------------------
 1314|  14.5M|      if (ptr == start) {
  ------------------
  |  Branch (1314:11): [True: 11.8M, False: 2.62M]
  ------------------
 1315|  11.8M|        *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  11.8M|#define MINBPC(enc) 1
  ------------------
 1316|  11.8M|        return XML_TOK_ATTRIBUTE_VALUE_S;
  ------------------
  |  |  110|  11.8M|#  define XML_TOK_ATTRIBUTE_VALUE_S 39
  ------------------
 1317|  11.8M|      }
 1318|  2.62M|      *nextTokPtr = ptr;
 1319|  2.62M|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|  2.62M|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1320|  90.9M|    default:
  ------------------
  |  Branch (1320:5): [True: 90.9M, False: 15.6M]
  ------------------
 1321|  90.9M|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  90.9M|#define MINBPC(enc) 1
  ------------------
 1322|  90.9M|      break;
 1323|   106M|    }
 1324|   106M|  }
 1325|   582k|  *nextTokPtr = ptr;
 1326|   582k|  return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|   582k|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1327|  15.9M|}
xmltok.c:normal_entityValueTok:
 1331|  26.9k|                       const char **nextTokPtr) {
 1332|  26.9k|  const char *start;
 1333|  26.9k|  if (ptr >= end)
  ------------------
  |  Branch (1333:7): [True: 2.51k, False: 24.4k]
  ------------------
 1334|  2.51k|    return XML_TOK_NONE;
  ------------------
  |  |   51|  2.51k|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
 1335|  24.4k|  else if (! HAS_CHAR(enc, ptr, end)) {
  ------------------
  |  |  131|  24.4k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  24.4k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  24.4k|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1335:12): [True: 0, False: 24.4k]
  ------------------
 1336|       |    /* This line cannot be executed.  The incoming data has already
 1337|       |     * been tokenized once, so incomplete characters like this have
 1338|       |     * already been eliminated from the input.  Retaining the paranoia
 1339|       |     * check is still valuable, however.
 1340|       |     */
 1341|      0|    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
  ------------------
  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
 1342|      0|  }
 1343|  24.4k|  start = ptr;
 1344|   122k|  while (HAS_CHAR(enc, ptr, end)) {
 1345|   122k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|   122k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|   122k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
 1346|      0|#  define LEAD_CASE(n)                                                         \
 1347|      0|  case BT_LEAD##n:                                                             \
 1348|      0|    ptr += n; /* NOTE: The encoding has already been validated. */             \
 1349|      0|    break;
 1350|    196|      LEAD_CASE(2)
  ------------------
  |  | 1347|    196|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1347:3): [True: 196, False: 122k]
  |  |  ------------------
  |  | 1348|    196|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1349|    196|    break;
  ------------------
 1351|    208|      LEAD_CASE(3)
  ------------------
  |  | 1347|    208|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1347:3): [True: 208, False: 122k]
  |  |  ------------------
  |  | 1348|    208|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1349|    208|    break;
  ------------------
 1352|     75|      LEAD_CASE(4)
  ------------------
  |  | 1347|     75|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1347:3): [True: 75, False: 122k]
  |  |  ------------------
  |  | 1348|     75|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1349|     75|    break;
  ------------------
 1353|      0|#  undef LEAD_CASE
 1354|  19.9k|    case BT_AMP:
  ------------------
  |  Branch (1354:5): [True: 19.9k, False: 102k]
  ------------------
 1355|  19.9k|      if (ptr == start)
  ------------------
  |  Branch (1355:11): [True: 17.1k, False: 2.86k]
  ------------------
 1356|  17.1k|        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|  17.1k|#define PREFIX(ident) normal_##ident
  ------------------
                      return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|  17.1k|#define MINBPC(enc) 1
  ------------------
 1357|  2.86k|      *nextTokPtr = ptr;
 1358|  2.86k|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|  2.86k|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1359|      9|    case BT_PERCNT:
  ------------------
  |  Branch (1359:5): [True: 9, False: 122k]
  ------------------
 1360|      9|      if (ptr == start) {
  ------------------
  |  Branch (1360:11): [True: 6, False: 3]
  ------------------
 1361|      6|        int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  248|      6|#define PREFIX(ident) normal_##ident
  ------------------
                      int tok = PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  228|      6|#define MINBPC(enc) 1
  ------------------
 1362|      6|        return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok;
  ------------------
  |  |   89|      6|#  define XML_TOK_PERCENT 22
  ------------------
                      return (tok == XML_TOK_PERCENT) ? XML_TOK_INVALID : tok;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
  |  Branch (1362:16): [True: 1, False: 5]
  ------------------
 1363|      6|      }
 1364|      3|      *nextTokPtr = ptr;
 1365|      3|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|      3|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1366|    812|    case BT_LF:
  ------------------
  |  Branch (1366:5): [True: 812, False: 121k]
  ------------------
 1367|    812|      if (ptr == start) {
  ------------------
  |  Branch (1367:11): [True: 534, False: 278]
  ------------------
 1368|    534|        *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|    534|#define MINBPC(enc) 1
  ------------------
 1369|    534|        return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|    534|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
 1370|    534|      }
 1371|    278|      *nextTokPtr = ptr;
 1372|    278|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|    278|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1373|  2.13k|    case BT_CR:
  ------------------
  |  Branch (1373:5): [True: 2.13k, False: 120k]
  ------------------
 1374|  2.13k|      if (ptr == start) {
  ------------------
  |  Branch (1374:11): [True: 1.71k, False: 419]
  ------------------
 1375|  1.71k|        ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.71k|#define MINBPC(enc) 1
  ------------------
 1376|  1.71k|        if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|  1.71k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  1.71k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  228|  1.71k|#define MINBPC(enc) 1
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1376:13): [True: 73, False: 1.64k]
  ------------------
 1377|     73|          return XML_TOK_TRAILING_CR;
  ------------------
  |  |   53|     73|    -3                            /* A CR at the end of the scan;              \
  ------------------
 1378|  1.64k|        if (BYTE_TYPE(enc, ptr) == BT_LF)
  ------------------
  |  |  233|  1.64k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  1.64k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  |  Branch (1378:13): [True: 194, False: 1.45k]
  ------------------
 1379|    194|          ptr += MINBPC(enc);
  ------------------
  |  |  228|    194|#define MINBPC(enc) 1
  ------------------
 1380|  1.64k|        *nextTokPtr = ptr;
 1381|  1.64k|        return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|  1.64k|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
 1382|  1.71k|      }
 1383|    419|      *nextTokPtr = ptr;
 1384|    419|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|    419|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1385|  99.3k|    default:
  ------------------
  |  Branch (1385:5): [True: 99.3k, False: 23.4k]
  ------------------
 1386|  99.3k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  99.3k|#define MINBPC(enc) 1
  ------------------
 1387|  99.3k|      break;
 1388|   122k|    }
 1389|   122k|  }
 1390|  1.52k|  *nextTokPtr = ptr;
 1391|  1.52k|  return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|  1.52k|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1392|  24.4k|}
xmltok.c:normal_nameMatchesAscii:
 1715|  38.2k|                         const char *end1, const char *ptr2) {
 1716|  38.2k|  UNUSED_P(enc);
  ------------------
  |  |  101|  38.2k|#    define UNUSED_P(p) (void)p
  ------------------
 1717|   187k|  for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
  ------------------
  |  |  228|   149k|#define MINBPC(enc) 1
  ------------------
  |  Branch (1717:10): [True: 163k, False: 23.9k]
  ------------------
 1718|   163k|    if (end1 - ptr1 < MINBPC(enc)) {
  ------------------
  |  |  228|   163k|#define MINBPC(enc) 1
  ------------------
  |  Branch (1718:9): [True: 26, False: 163k]
  ------------------
 1719|       |      /* This line cannot be executed.  The incoming data has already
 1720|       |       * been tokenized once, so incomplete characters like this have
 1721|       |       * already been eliminated from the input.  Retaining the
 1722|       |       * paranoia check is still valuable, however.
 1723|       |       */
 1724|     26|      return 0; /* LCOV_EXCL_LINE */
 1725|     26|    }
 1726|   163k|    if (! CHAR_MATCHES(enc, ptr1, *ptr2))
  ------------------
  |  |  246|   163k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (1726:9): [True: 14.2k, False: 149k]
  ------------------
 1727|  14.2k|      return 0;
 1728|   163k|  }
 1729|  23.9k|  return ptr1 == end1;
 1730|  38.2k|}
xmltok.c:normal_nameLength:
 1733|  92.6k|PREFIX(nameLength)(const ENCODING *enc, const char *ptr) {
 1734|  92.6k|  const char *start = ptr;
 1735|   335k|  for (;;) {
 1736|   335k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|   335k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|   335k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
 1737|      0|#  define LEAD_CASE(n)                                                         \
 1738|      0|  case BT_LEAD##n:                                                             \
 1739|      0|    ptr += n; /* NOTE: The encoding has already been validated. */             \
 1740|      0|    break;
 1741|  27.3k|      LEAD_CASE(2)
  ------------------
  |  | 1738|  27.3k|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1738:3): [True: 27.3k, False: 308k]
  |  |  ------------------
  |  | 1739|  27.3k|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1740|  27.3k|    break;
  ------------------
 1742|  1.63k|      LEAD_CASE(3)
  ------------------
  |  | 1738|  1.63k|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1738:3): [True: 1.63k, False: 333k]
  |  |  ------------------
  |  | 1739|  1.63k|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1740|  1.63k|    break;
  ------------------
 1743|      0|      LEAD_CASE(4)
  ------------------
  |  | 1738|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1738:3): [True: 0, False: 335k]
  |  |  ------------------
  |  | 1739|      0|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1740|      0|    break;
  ------------------
 1744|      0|#  undef LEAD_CASE
 1745|      0|    case BT_NONASCII:
  ------------------
  |  Branch (1745:5): [True: 0, False: 335k]
  ------------------
 1746|   160k|    case BT_NMSTRT:
  ------------------
  |  Branch (1746:5): [True: 160k, False: 174k]
  ------------------
 1747|   160k|#  ifdef XML_NS
 1748|   181k|    case BT_COLON:
  ------------------
  |  Branch (1748:5): [True: 20.4k, False: 315k]
  ------------------
 1749|   181k|#  endif
 1750|   208k|    case BT_HEX:
  ------------------
  |  Branch (1750:5): [True: 26.8k, False: 308k]
  ------------------
 1751|   211k|    case BT_DIGIT:
  ------------------
  |  Branch (1751:5): [True: 3.29k, False: 332k]
  ------------------
 1752|   212k|    case BT_NAME:
  ------------------
  |  Branch (1752:5): [True: 1.32k, False: 334k]
  ------------------
 1753|   213k|    case BT_MINUS:
  ------------------
  |  Branch (1753:5): [True: 1.10k, False: 334k]
  ------------------
 1754|   213k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|   213k|#define MINBPC(enc) 1
  ------------------
 1755|   213k|      break;
 1756|  92.6k|    default:
  ------------------
  |  Branch (1756:5): [True: 92.6k, False: 242k]
  ------------------
 1757|  92.6k|      return (int)(ptr - start);
 1758|   335k|    }
 1759|   335k|  }
 1760|  92.6k|}
xmltok.c:normal_getAtts:
 1510|  55.2k|                ATTRIBUTE *atts) {
 1511|  55.2k|  enum { other, inName, inValue } state = inName;
 1512|  55.2k|  int nAtts = 0;
 1513|  55.2k|  int open = 0; /* defined when state == inValue;
 1514|       |                   initialization just to shut up compilers */
 1515|       |
 1516|   558k|  for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) {
  ------------------
  |  |  228|  55.2k|#define MINBPC(enc) 1
  ------------------
                for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) {
  ------------------
  |  |  228|   503k|#define MINBPC(enc) 1
  ------------------
 1517|   558k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|   558k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|   558k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
 1518|      0|#  define START_NAME                                                           \
 1519|      0|    if (state == other) {                                                      \
 1520|      0|      if (nAtts < attsMax) {                                                   \
 1521|      0|        atts[nAtts].name = ptr;                                                \
 1522|      0|        atts[nAtts].normalized = 1;                                            \
 1523|      0|      }                                                                        \
 1524|      0|      state = inName;                                                          \
 1525|      0|    }
 1526|      0|#  define LEAD_CASE(n)                                                         \
 1527|      0|  case BT_LEAD##n: /* NOTE: The encoding has already been validated. */        \
 1528|      0|    START_NAME ptr += (n - MINBPC(enc));                                       \
 1529|      0|    break;
 1530|  27.3k|      LEAD_CASE(2)
  ------------------
  |  | 1527|  27.3k|  case BT_LEAD##n: /* NOTE: The encoding has already been validated. */        \
  |  |  ------------------
  |  |  |  Branch (1527:3): [True: 27.3k, False: 531k]
  |  |  ------------------
  |  | 1528|  27.3k|    START_NAME ptr += (n - MINBPC(enc));                                       \
  |  |  ------------------
  |  |  |  | 1519|  27.3k|    if (state == other) {                                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1519:9): [True: 755, False: 26.5k]
  |  |  |  |  ------------------
  |  |  |  | 1520|    755|      if (nAtts < attsMax) {                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1520:11): [True: 686, False: 69]
  |  |  |  |  ------------------
  |  |  |  | 1521|    686|        atts[nAtts].name = ptr;                                                \
  |  |  |  | 1522|    686|        atts[nAtts].normalized = 1;                                            \
  |  |  |  | 1523|    686|      }                                                                        \
  |  |  |  | 1524|    755|      state = inName;                                                          \
  |  |  |  | 1525|    755|    }
  |  |  ------------------
  |  |                   START_NAME ptr += (n - MINBPC(enc));                                       \
  |  |  ------------------
  |  |  |  |  228|  27.3k|#define MINBPC(enc) 1
  |  |  ------------------
  |  | 1529|  27.3k|    break;
  ------------------
 1531|  1.84k|      LEAD_CASE(3)
  ------------------
  |  | 1527|  1.84k|  case BT_LEAD##n: /* NOTE: The encoding has already been validated. */        \
  |  |  ------------------
  |  |  |  Branch (1527:3): [True: 1.84k, False: 557k]
  |  |  ------------------
  |  | 1528|  1.84k|    START_NAME ptr += (n - MINBPC(enc));                                       \
  |  |  ------------------
  |  |  |  | 1519|  1.84k|    if (state == other) {                                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1519:9): [True: 515, False: 1.32k]
  |  |  |  |  ------------------
  |  |  |  | 1520|    515|      if (nAtts < attsMax) {                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1520:11): [True: 449, False: 66]
  |  |  |  |  ------------------
  |  |  |  | 1521|    449|        atts[nAtts].name = ptr;                                                \
  |  |  |  | 1522|    449|        atts[nAtts].normalized = 1;                                            \
  |  |  |  | 1523|    449|      }                                                                        \
  |  |  |  | 1524|    515|      state = inName;                                                          \
  |  |  |  | 1525|    515|    }
  |  |  ------------------
  |  |                   START_NAME ptr += (n - MINBPC(enc));                                       \
  |  |  ------------------
  |  |  |  |  228|  1.84k|#define MINBPC(enc) 1
  |  |  ------------------
  |  | 1529|  1.84k|    break;
  ------------------
 1532|    207|      LEAD_CASE(4)
  ------------------
  |  | 1527|    207|  case BT_LEAD##n: /* NOTE: The encoding has already been validated. */        \
  |  |  ------------------
  |  |  |  Branch (1527:3): [True: 207, False: 558k]
  |  |  ------------------
  |  | 1528|    207|    START_NAME ptr += (n - MINBPC(enc));                                       \
  |  |  ------------------
  |  |  |  | 1519|    207|    if (state == other) {                                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1519:9): [True: 0, False: 207]
  |  |  |  |  ------------------
  |  |  |  | 1520|      0|      if (nAtts < attsMax) {                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1520:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1521|      0|        atts[nAtts].name = ptr;                                                \
  |  |  |  | 1522|      0|        atts[nAtts].normalized = 1;                                            \
  |  |  |  | 1523|      0|      }                                                                        \
  |  |  |  | 1524|      0|      state = inName;                                                          \
  |  |  |  | 1525|      0|    }
  |  |  ------------------
  |  |                   START_NAME ptr += (n - MINBPC(enc));                                       \
  |  |  ------------------
  |  |  |  |  228|    207|#define MINBPC(enc) 1
  |  |  ------------------
  |  | 1529|    207|    break;
  ------------------
 1533|      0|#  undef LEAD_CASE
 1534|      0|    case BT_NONASCII:
  ------------------
  |  Branch (1534:5): [True: 0, False: 558k]
  ------------------
 1535|   193k|    case BT_NMSTRT:
  ------------------
  |  Branch (1535:5): [True: 193k, False: 365k]
  ------------------
 1536|   224k|    case BT_HEX:
  ------------------
  |  Branch (1536:5): [True: 31.1k, False: 527k]
  ------------------
 1537|   224k|      START_NAME
  ------------------
  |  | 1519|   224k|    if (state == other) {                                                      \
  |  |  ------------------
  |  |  |  Branch (1519:9): [True: 37.0k, False: 187k]
  |  |  ------------------
  |  | 1520|  37.0k|      if (nAtts < attsMax) {                                                   \
  |  |  ------------------
  |  |  |  Branch (1520:11): [True: 35.3k, False: 1.73k]
  |  |  ------------------
  |  | 1521|  35.3k|        atts[nAtts].name = ptr;                                                \
  |  | 1522|  35.3k|        atts[nAtts].normalized = 1;                                            \
  |  | 1523|  35.3k|      }                                                                        \
  |  | 1524|  37.0k|      state = inName;                                                          \
  |  | 1525|  37.0k|    }
  ------------------
 1538|   224k|      break;
 1539|      0|#  undef START_NAME
 1540|  73.3k|    case BT_QUOT:
  ------------------
  |  Branch (1540:5): [True: 73.3k, False: 485k]
  ------------------
 1541|  73.3k|      if (state != inValue) {
  ------------------
  |  Branch (1541:11): [True: 36.5k, False: 36.7k]
  ------------------
 1542|  36.5k|        if (nAtts < attsMax)
  ------------------
  |  Branch (1542:13): [True: 34.9k, False: 1.62k]
  ------------------
 1543|  34.9k|          atts[nAtts].valuePtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  34.9k|#define MINBPC(enc) 1
  ------------------
 1544|  36.5k|        state = inValue;
 1545|  36.5k|        open = BT_QUOT;
 1546|  36.7k|      } else if (open == BT_QUOT) {
  ------------------
  |  Branch (1546:18): [True: 36.5k, False: 201]
  ------------------
 1547|  36.5k|        state = other;
 1548|  36.5k|        if (nAtts < attsMax)
  ------------------
  |  Branch (1548:13): [True: 34.9k, False: 1.62k]
  ------------------
 1549|  34.9k|          atts[nAtts].valueEnd = ptr;
 1550|  36.5k|        nAtts++;
 1551|  36.5k|      }
 1552|  73.3k|      break;
 1553|  3.86k|    case BT_APOS:
  ------------------
  |  Branch (1553:5): [True: 3.86k, False: 555k]
  ------------------
 1554|  3.86k|      if (state != inValue) {
  ------------------
  |  Branch (1554:11): [True: 1.81k, False: 2.05k]
  ------------------
 1555|  1.81k|        if (nAtts < attsMax)
  ------------------
  |  Branch (1555:13): [True: 1.56k, False: 242]
  ------------------
 1556|  1.56k|          atts[nAtts].valuePtr = ptr + MINBPC(enc);
  ------------------
  |  |  228|  1.56k|#define MINBPC(enc) 1
  ------------------
 1557|  1.81k|        state = inValue;
 1558|  1.81k|        open = BT_APOS;
 1559|  2.05k|      } else if (open == BT_APOS) {
  ------------------
  |  Branch (1559:18): [True: 1.81k, False: 241]
  ------------------
 1560|  1.81k|        state = other;
 1561|  1.81k|        if (nAtts < attsMax)
  ------------------
  |  Branch (1561:13): [True: 1.56k, False: 242]
  ------------------
 1562|  1.56k|          atts[nAtts].valueEnd = ptr;
 1563|  1.81k|        nAtts++;
 1564|  1.81k|      }
 1565|  3.86k|      break;
 1566|  21.5k|    case BT_AMP:
  ------------------
  |  Branch (1566:5): [True: 21.5k, False: 537k]
  ------------------
 1567|  21.5k|      if (nAtts < attsMax)
  ------------------
  |  Branch (1567:11): [True: 21.3k, False: 267]
  ------------------
 1568|  21.3k|        atts[nAtts].normalized = 0;
 1569|  21.5k|      break;
 1570|  48.2k|    case BT_S:
  ------------------
  |  Branch (1570:5): [True: 48.2k, False: 510k]
  ------------------
 1571|  48.2k|      if (state == inName)
  ------------------
  |  Branch (1571:11): [True: 27.9k, False: 20.2k]
  ------------------
 1572|  27.9k|        state = other;
 1573|  20.2k|      else if (state == inValue && nAtts < attsMax && atts[nAtts].normalized
  ------------------
  |  Branch (1573:16): [True: 7.91k, False: 12.3k]
  |  Branch (1573:36): [True: 7.70k, False: 209]
  |  Branch (1573:55): [True: 3.06k, False: 4.63k]
  ------------------
 1574|  3.06k|               && (ptr == atts[nAtts].valuePtr
  ------------------
  |  Branch (1574:20): [True: 1.40k, False: 1.66k]
  ------------------
 1575|  1.66k|                   || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE
  ------------------
  |  |  235|  1.66k|#define BYTE_TO_ASCII(enc, p) (*(p))
  ------------------
                                 || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE
  ------------------
  |  |  104|  4.72k|#define ASCII_SPACE 0x20
  ------------------
  |  Branch (1575:23): [True: 204, False: 1.45k]
  ------------------
 1576|  1.45k|                   || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE
  ------------------
  |  |  235|  1.45k|#define BYTE_TO_ASCII(enc, p) (*(p))
  ------------------
                                 || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE
  ------------------
  |  |  104|  4.52k|#define ASCII_SPACE 0x20
  ------------------
  |  Branch (1576:23): [True: 691, False: 765]
  ------------------
 1577|    765|                   || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open))
  ------------------
  |  |  233|    765|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|    765|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
  |  Branch (1577:23): [True: 465, False: 300]
  ------------------
 1578|  2.76k|        atts[nAtts].normalized = 0;
 1579|  48.2k|      break;
 1580|  1.72k|    case BT_CR:
  ------------------
  |  Branch (1580:5): [True: 1.72k, False: 557k]
  ------------------
 1581|  3.88k|    case BT_LF:
  ------------------
  |  Branch (1581:5): [True: 2.16k, False: 556k]
  ------------------
 1582|       |      /* This case ensures that the first attribute name is counted
 1583|       |         Apart from that we could just change state on the quote. */
 1584|  3.88k|      if (state == inName)
  ------------------
  |  Branch (1584:11): [True: 803, False: 3.08k]
  ------------------
 1585|    803|        state = other;
 1586|  3.08k|      else if (state == inValue && nAtts < attsMax)
  ------------------
  |  Branch (1586:16): [True: 1.24k, False: 1.84k]
  |  Branch (1586:36): [True: 1.04k, False: 199]
  ------------------
 1587|  1.04k|        atts[nAtts].normalized = 0;
 1588|  3.88k|      break;
 1589|  30.6k|    case BT_GT:
  ------------------
  |  Branch (1589:5): [True: 30.6k, False: 528k]
  ------------------
 1590|  56.8k|    case BT_SOL:
  ------------------
  |  Branch (1590:5): [True: 26.2k, False: 532k]
  ------------------
 1591|  56.8k|      if (state != inValue)
  ------------------
  |  Branch (1591:11): [True: 55.2k, False: 1.61k]
  ------------------
 1592|  55.2k|        return nAtts;
 1593|  1.61k|      break;
 1594|  96.9k|    default:
  ------------------
  |  Branch (1594:5): [True: 96.9k, False: 461k]
  ------------------
 1595|  96.9k|      break;
 1596|   558k|    }
 1597|   558k|  }
 1598|       |  /* not reached */
 1599|  55.2k|}
xmltok.c:normal_charRefNumber:
 1602|  4.66k|PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr) {
 1603|  4.66k|  int result = 0;
 1604|       |  /* skip &# */
 1605|  4.66k|  UNUSED_P(enc);
  ------------------
  |  |  101|  4.66k|#    define UNUSED_P(p) (void)p
  ------------------
 1606|  4.66k|  ptr += 2 * MINBPC(enc);
  ------------------
  |  |  228|  4.66k|#define MINBPC(enc) 1
  ------------------
 1607|  4.66k|  if (CHAR_MATCHES(enc, ptr, ASCII_x)) {
  ------------------
  |  |  246|  4.66k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 3.72k, False: 940]
  |  |  ------------------
  ------------------
 1608|  15.7k|    for (ptr += MINBPC(enc); ! CHAR_MATCHES(enc, ptr, ASCII_SEMI);
  ------------------
  |  |  228|  3.72k|#define MINBPC(enc) 1
  ------------------
                  for (ptr += MINBPC(enc); ! CHAR_MATCHES(enc, ptr, ASCII_SEMI);
  ------------------
  |  |  246|  15.7k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
  |  Branch (1608:30): [True: 12.0k, False: 3.70k]
  ------------------
 1609|  12.0k|         ptr += MINBPC(enc)) {
  ------------------
  |  |  228|  12.0k|#define MINBPC(enc) 1
  ------------------
 1610|  12.0k|      int c = BYTE_TO_ASCII(enc, ptr);
  ------------------
  |  |  235|  12.0k|#define BYTE_TO_ASCII(enc, p) (*(p))
  ------------------
 1611|  12.0k|      switch (c) {
  ------------------
  |  Branch (1611:15): [True: 12.0k, False: 0]
  ------------------
 1612|  1.56k|      case ASCII_0:
  ------------------
  |  |   92|  1.56k|#define ASCII_0 0x30
  ------------------
  |  Branch (1612:7): [True: 1.56k, False: 10.4k]
  ------------------
 1613|  2.07k|      case ASCII_1:
  ------------------
  |  |   93|  2.07k|#define ASCII_1 0x31
  ------------------
  |  Branch (1613:7): [True: 511, False: 11.5k]
  ------------------
 1614|  3.24k|      case ASCII_2:
  ------------------
  |  |   94|  3.24k|#define ASCII_2 0x32
  ------------------
  |  Branch (1614:7): [True: 1.17k, False: 10.8k]
  ------------------
 1615|  3.70k|      case ASCII_3:
  ------------------
  |  |   95|  3.70k|#define ASCII_3 0x33
  ------------------
  |  Branch (1615:7): [True: 464, False: 11.5k]
  ------------------
 1616|  4.02k|      case ASCII_4:
  ------------------
  |  |   96|  4.02k|#define ASCII_4 0x34
  ------------------
  |  Branch (1616:7): [True: 311, False: 11.7k]
  ------------------
 1617|  4.33k|      case ASCII_5:
  ------------------
  |  |   97|  4.33k|#define ASCII_5 0x35
  ------------------
  |  Branch (1617:7): [True: 312, False: 11.7k]
  ------------------
 1618|  4.76k|      case ASCII_6:
  ------------------
  |  |   98|  4.76k|#define ASCII_6 0x36
  ------------------
  |  Branch (1618:7): [True: 433, False: 11.5k]
  ------------------
 1619|  5.17k|      case ASCII_7:
  ------------------
  |  |   99|  5.17k|#define ASCII_7 0x37
  ------------------
  |  Branch (1619:7): [True: 408, False: 11.6k]
  ------------------
 1620|  5.66k|      case ASCII_8:
  ------------------
  |  |  100|  5.66k|#define ASCII_8 0x38
  ------------------
  |  Branch (1620:7): [True: 495, False: 11.5k]
  ------------------
 1621|  6.33k|      case ASCII_9:
  ------------------
  |  |  101|  6.33k|#define ASCII_9 0x39
  ------------------
  |  Branch (1621:7): [True: 664, False: 11.3k]
  ------------------
 1622|  6.33k|        result <<= 4;
 1623|  6.33k|        result |= (c - ASCII_0);
  ------------------
  |  |   92|  6.33k|#define ASCII_0 0x30
  ------------------
 1624|  6.33k|        break;
 1625|    358|      case ASCII_A:
  ------------------
  |  |   38|    358|#define ASCII_A 0x41
  ------------------
  |  Branch (1625:7): [True: 358, False: 11.6k]
  ------------------
 1626|    729|      case ASCII_B:
  ------------------
  |  |   39|    729|#define ASCII_B 0x42
  ------------------
  |  Branch (1626:7): [True: 371, False: 11.6k]
  ------------------
 1627|  1.20k|      case ASCII_C:
  ------------------
  |  |   40|  1.20k|#define ASCII_C 0x43
  ------------------
  |  Branch (1627:7): [True: 477, False: 11.5k]
  ------------------
 1628|  1.51k|      case ASCII_D:
  ------------------
  |  |   41|  1.51k|#define ASCII_D 0x44
  ------------------
  |  Branch (1628:7): [True: 308, False: 11.7k]
  ------------------
 1629|  1.98k|      case ASCII_E:
  ------------------
  |  |   42|  1.98k|#define ASCII_E 0x45
  ------------------
  |  Branch (1629:7): [True: 469, False: 11.5k]
  ------------------
 1630|  3.04k|      case ASCII_F:
  ------------------
  |  |   43|  3.04k|#define ASCII_F 0x46
  ------------------
  |  Branch (1630:7): [True: 1.06k, False: 10.9k]
  ------------------
 1631|  3.04k|        result <<= 4;
 1632|  3.04k|        result += 10 + (c - ASCII_A);
  ------------------
  |  |   38|  3.04k|#define ASCII_A 0x41
  ------------------
 1633|  3.04k|        break;
 1634|    304|      case ASCII_a:
  ------------------
  |  |   65|    304|#define ASCII_a 0x61
  ------------------
  |  Branch (1634:7): [True: 304, False: 11.7k]
  ------------------
 1635|    558|      case ASCII_b:
  ------------------
  |  |   66|    558|#define ASCII_b 0x62
  ------------------
  |  Branch (1635:7): [True: 254, False: 11.7k]
  ------------------
 1636|    862|      case ASCII_c:
  ------------------
  |  |   67|    862|#define ASCII_c 0x63
  ------------------
  |  Branch (1636:7): [True: 304, False: 11.7k]
  ------------------
 1637|  1.41k|      case ASCII_d:
  ------------------
  |  |   68|  1.41k|#define ASCII_d 0x64
  ------------------
  |  Branch (1637:7): [True: 554, False: 11.4k]
  ------------------
 1638|  1.65k|      case ASCII_e:
  ------------------
  |  |   69|  1.65k|#define ASCII_e 0x65
  ------------------
  |  Branch (1638:7): [True: 240, False: 11.7k]
  ------------------
 1639|  2.65k|      case ASCII_f:
  ------------------
  |  |   70|  2.65k|#define ASCII_f 0x66
  ------------------
  |  Branch (1639:7): [True: 995, False: 11.0k]
  ------------------
 1640|  2.65k|        result <<= 4;
 1641|  2.65k|        result += 10 + (c - ASCII_a);
  ------------------
  |  |   65|  2.65k|#define ASCII_a 0x61
  ------------------
 1642|  2.65k|        break;
 1643|  12.0k|      }
 1644|  12.0k|      if (result >= 0x110000)
  ------------------
  |  Branch (1644:11): [True: 18, False: 12.0k]
  ------------------
 1645|     18|        return -1;
 1646|  12.0k|    }
 1647|  3.72k|  } else {
 1648|  3.14k|    for (; ! CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) {
  ------------------
  |  |  246|  3.14k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  ------------------
                  for (; ! CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) {
  ------------------
  |  |  228|  2.20k|#define MINBPC(enc) 1
  ------------------
  |  Branch (1648:12): [True: 2.21k, False: 932]
  ------------------
 1649|  2.21k|      int c = BYTE_TO_ASCII(enc, ptr);
  ------------------
  |  |  235|  2.21k|#define BYTE_TO_ASCII(enc, p) (*(p))
  ------------------
 1650|  2.21k|      result *= 10;
 1651|  2.21k|      result += (c - ASCII_0);
  ------------------
  |  |   92|  2.21k|#define ASCII_0 0x30
  ------------------
 1652|  2.21k|      if (result >= 0x110000)
  ------------------
  |  Branch (1652:11): [True: 8, False: 2.20k]
  ------------------
 1653|      8|        return -1;
 1654|  2.21k|    }
 1655|    940|  }
 1656|  4.63k|  return checkCharRefNumber(result);
 1657|  4.66k|}
xmltok.c:normal_predefinedEntityName:
 1661|   778k|                             const char *end) {
 1662|   778k|  UNUSED_P(enc);
  ------------------
  |  |  101|   778k|#    define UNUSED_P(p) (void)p
  ------------------
 1663|   778k|  switch ((end - ptr) / MINBPC(enc)) {
  ------------------
  |  |  228|   778k|#define MINBPC(enc) 1
  ------------------
  |  Branch (1663:11): [True: 68.4k, False: 709k]
  ------------------
 1664|  64.6k|  case 2:
  ------------------
  |  Branch (1664:3): [True: 64.6k, False: 713k]
  ------------------
 1665|  64.6k|    if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) {
  ------------------
  |  |  246|  64.6k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 64.3k, False: 310]
  |  |  ------------------
  ------------------
 1666|  64.3k|      switch (BYTE_TO_ASCII(enc, ptr)) {
  ------------------
  |  |  235|  64.3k|#define BYTE_TO_ASCII(enc, p) (*(p))
  |  |  ------------------
  |  |  |  Branch (235:31): [True: 64.3k, False: 13]
  |  |  ------------------
  ------------------
 1667|  64.2k|      case ASCII_l:
  ------------------
  |  |   76|  64.2k|#define ASCII_l 0x6C
  ------------------
  |  Branch (1667:7): [True: 64.2k, False: 129]
  ------------------
 1668|  64.2k|        return ASCII_LT;
  ------------------
  |  |  113|  64.2k|#define ASCII_LT 0x3C
  ------------------
 1669|    116|      case ASCII_g:
  ------------------
  |  |   71|    116|#define ASCII_g 0x67
  ------------------
  |  Branch (1669:7): [True: 116, False: 64.2k]
  ------------------
 1670|    116|        return ASCII_GT;
  ------------------
  |  |  115|    116|#define ASCII_GT 0x3E
  ------------------
 1671|  64.3k|      }
 1672|  64.3k|    }
 1673|    323|    break;
 1674|  1.65k|  case 3:
  ------------------
  |  Branch (1674:3): [True: 1.65k, False: 776k]
  ------------------
 1675|  1.65k|    if (CHAR_MATCHES(enc, ptr, ASCII_a)) {
  ------------------
  |  |  246|  1.65k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 1.20k, False: 457]
  |  |  ------------------
  ------------------
 1676|  1.20k|      ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.20k|#define MINBPC(enc) 1
  ------------------
 1677|  1.20k|      if (CHAR_MATCHES(enc, ptr, ASCII_m)) {
  ------------------
  |  |  246|  1.20k|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 975, False: 227]
  |  |  ------------------
  ------------------
 1678|    975|        ptr += MINBPC(enc);
  ------------------
  |  |  228|    975|#define MINBPC(enc) 1
  ------------------
 1679|    975|        if (CHAR_MATCHES(enc, ptr, ASCII_p))
  ------------------
  |  |  246|    975|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 773, False: 202]
  |  |  ------------------
  ------------------
 1680|    773|          return ASCII_AMP;
  ------------------
  |  |  107|    773|#define ASCII_AMP 0x26
  ------------------
 1681|    975|      }
 1682|  1.20k|    }
 1683|    886|    break;
 1684|  2.06k|  case 4:
  ------------------
  |  Branch (1684:3): [True: 2.06k, False: 775k]
  ------------------
 1685|  2.06k|    switch (BYTE_TO_ASCII(enc, ptr)) {
  ------------------
  |  |  235|  2.06k|#define BYTE_TO_ASCII(enc, p) (*(p))
  |  |  ------------------
  |  |  |  Branch (235:31): [True: 1.73k, False: 329]
  |  |  ------------------
  ------------------
 1686|    897|    case ASCII_q:
  ------------------
  |  |   81|    897|#define ASCII_q 0x71
  ------------------
  |  Branch (1686:5): [True: 897, False: 1.16k]
  ------------------
 1687|    897|      ptr += MINBPC(enc);
  ------------------
  |  |  228|    897|#define MINBPC(enc) 1
  ------------------
 1688|    897|      if (CHAR_MATCHES(enc, ptr, ASCII_u)) {
  ------------------
  |  |  246|    897|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 663, False: 234]
  |  |  ------------------
  ------------------
 1689|    663|        ptr += MINBPC(enc);
  ------------------
  |  |  228|    663|#define MINBPC(enc) 1
  ------------------
 1690|    663|        if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
  ------------------
  |  |  246|    663|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 462, False: 201]
  |  |  ------------------
  ------------------
 1691|    462|          ptr += MINBPC(enc);
  ------------------
  |  |  228|    462|#define MINBPC(enc) 1
  ------------------
 1692|    462|          if (CHAR_MATCHES(enc, ptr, ASCII_t))
  ------------------
  |  |  246|    462|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 260, False: 202]
  |  |  ------------------
  ------------------
 1693|    260|            return ASCII_QUOT;
  ------------------
  |  |  106|    260|#define ASCII_QUOT 0x22
  ------------------
 1694|    462|        }
 1695|    663|      }
 1696|    637|      break;
 1697|    839|    case ASCII_a:
  ------------------
  |  |   65|    839|#define ASCII_a 0x61
  ------------------
  |  Branch (1697:5): [True: 839, False: 1.22k]
  ------------------
 1698|    839|      ptr += MINBPC(enc);
  ------------------
  |  |  228|    839|#define MINBPC(enc) 1
  ------------------
 1699|    839|      if (CHAR_MATCHES(enc, ptr, ASCII_p)) {
  ------------------
  |  |  246|    839|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 637, False: 202]
  |  |  ------------------
  ------------------
 1700|    637|        ptr += MINBPC(enc);
  ------------------
  |  |  228|    637|#define MINBPC(enc) 1
  ------------------
 1701|    637|        if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
  ------------------
  |  |  246|    637|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 436, False: 201]
  |  |  ------------------
  ------------------
 1702|    436|          ptr += MINBPC(enc);
  ------------------
  |  |  228|    436|#define MINBPC(enc) 1
  ------------------
 1703|    436|          if (CHAR_MATCHES(enc, ptr, ASCII_s))
  ------------------
  |  |  246|    436|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 234, False: 202]
  |  |  ------------------
  ------------------
 1704|    234|            return ASCII_APOS;
  ------------------
  |  |  108|    234|#define ASCII_APOS 0x27
  ------------------
 1705|    436|        }
 1706|    637|      }
 1707|    605|      break;
 1708|  2.06k|    }
 1709|   778k|  }
 1710|   712k|  return 0;
 1711|   778k|}
xmltok.c:normal_isPublicId:
 1450|  1.32k|                   const char **badPtr) {
 1451|  1.32k|  ptr += MINBPC(enc);
  ------------------
  |  |  228|  1.32k|#define MINBPC(enc) 1
  ------------------
 1452|  1.32k|  end -= MINBPC(enc);
  ------------------
  |  |  228|  1.32k|#define MINBPC(enc) 1
  ------------------
 1453|  6.56k|  for (; HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  228|  6.54k|#define MINBPC(enc) 1
  ------------------
 1454|  6.56k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  233|  6.56k|#define BYTE_TYPE(enc, p) SB_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  231|  6.56k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  ------------------
  ------------------
 1455|    263|    case BT_DIGIT:
  ------------------
  |  Branch (1455:5): [True: 263, False: 6.29k]
  ------------------
 1456|    564|    case BT_HEX:
  ------------------
  |  Branch (1456:5): [True: 301, False: 6.26k]
  ------------------
 1457|    771|    case BT_MINUS:
  ------------------
  |  Branch (1457:5): [True: 207, False: 6.35k]
  ------------------
 1458|    973|    case BT_APOS:
  ------------------
  |  Branch (1458:5): [True: 202, False: 6.35k]
  ------------------
 1459|  1.33k|    case BT_LPAR:
  ------------------
  |  Branch (1459:5): [True: 359, False: 6.20k]
  ------------------
 1460|  1.53k|    case BT_RPAR:
  ------------------
  |  Branch (1460:5): [True: 202, False: 6.35k]
  ------------------
 1461|  1.73k|    case BT_PLUS:
  ------------------
  |  Branch (1461:5): [True: 199, False: 6.36k]
  ------------------
 1462|  1.94k|    case BT_COMMA:
  ------------------
  |  Branch (1462:5): [True: 209, False: 6.35k]
  ------------------
 1463|  2.15k|    case BT_SOL:
  ------------------
  |  Branch (1463:5): [True: 212, False: 6.34k]
  ------------------
 1464|  2.35k|    case BT_EQUALS:
  ------------------
  |  Branch (1464:5): [True: 203, False: 6.35k]
  ------------------
 1465|  2.58k|    case BT_QUEST:
  ------------------
  |  Branch (1465:5): [True: 228, False: 6.33k]
  ------------------
 1466|  2.98k|    case BT_CR:
  ------------------
  |  Branch (1466:5): [True: 404, False: 6.15k]
  ------------------
 1467|  3.18k|    case BT_LF:
  ------------------
  |  Branch (1467:5): [True: 195, False: 6.36k]
  ------------------
 1468|  3.39k|    case BT_SEMI:
  ------------------
  |  Branch (1468:5): [True: 208, False: 6.35k]
  ------------------
 1469|  3.59k|    case BT_EXCL:
  ------------------
  |  Branch (1469:5): [True: 204, False: 6.35k]
  ------------------
 1470|  3.79k|    case BT_AST:
  ------------------
  |  Branch (1470:5): [True: 198, False: 6.36k]
  ------------------
 1471|  4.00k|    case BT_PERCNT:
  ------------------
  |  Branch (1471:5): [True: 211, False: 6.35k]
  ------------------
 1472|  4.27k|    case BT_NUM:
  ------------------
  |  Branch (1472:5): [True: 272, False: 6.28k]
  ------------------
 1473|  4.27k|#  ifdef XML_NS
 1474|  4.53k|    case BT_COLON:
  ------------------
  |  Branch (1474:5): [True: 256, False: 6.30k]
  ------------------
 1475|  4.53k|#  endif
 1476|  4.53k|      break;
 1477|    660|    case BT_S:
  ------------------
  |  Branch (1477:5): [True: 660, False: 5.90k]
  ------------------
 1478|    660|      if (CHAR_MATCHES(enc, ptr, ASCII_TAB)) {
  ------------------
  |  |  246|    660|#define CHAR_MATCHES(enc, p, c) (*(p) == (c))
  |  |  ------------------
  |  |  |  Branch (246:33): [True: 1, False: 659]
  |  |  ------------------
  ------------------
 1479|      1|        *badPtr = ptr;
 1480|      1|        return 0;
 1481|      1|      }
 1482|    659|      break;
 1483|    659|    case BT_NAME:
  ------------------
  |  Branch (1483:5): [True: 201, False: 6.36k]
  ------------------
 1484|    944|    case BT_NMSTRT:
  ------------------
  |  Branch (1484:5): [True: 743, False: 5.81k]
  ------------------
 1485|    944|      if (! (BYTE_TO_ASCII(enc, ptr) & ~0x7f))
  ------------------
  |  |  235|    944|#define BYTE_TO_ASCII(enc, p) (*(p))
  ------------------
  |  Branch (1485:11): [True: 937, False: 7]
  ------------------
 1486|    937|        break;
 1487|      7|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|      7|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1488|    431|    default:
  ------------------
  |  Branch (1488:5): [True: 424, False: 6.13k]
  ------------------
 1489|    431|      switch (BYTE_TO_ASCII(enc, ptr)) {
  ------------------
  |  |  235|    431|#define BYTE_TO_ASCII(enc, p) (*(p))
  ------------------
 1490|    209|      case 0x24: /* $ */
  ------------------
  |  Branch (1490:7): [True: 209, False: 222]
  ------------------
 1491|    416|      case 0x40: /* @ */
  ------------------
  |  Branch (1491:7): [True: 207, False: 224]
  ------------------
 1492|    416|        break;
 1493|     15|      default:
  ------------------
  |  Branch (1493:7): [True: 15, False: 416]
  ------------------
 1494|     15|        *badPtr = ptr;
 1495|     15|        return 0;
 1496|    431|      }
 1497|    416|      break;
 1498|  6.56k|    }
 1499|  6.56k|  }
 1500|  1.31k|  return 1;
 1501|  1.32k|}
xmltok.c:little2_prologTok:
 1018|  5.75k|                  const char **nextTokPtr) {
 1019|  5.75k|  int tok;
 1020|  5.75k|  if (ptr >= end)
  ------------------
  |  Branch (1020:7): [True: 0, False: 5.75k]
  ------------------
 1021|      0|    return XML_TOK_NONE;
  ------------------
  |  |   51|      0|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
 1022|  5.75k|  if (MINBPC(enc) > 1) {
  ------------------
  |  |  698|  5.75k|#define MINBPC(enc) 2
  ------------------
  |  Branch (1022:7): [True: 5.75k, Folded]
  ------------------
 1023|  5.75k|    size_t n = end - ptr;
 1024|  5.75k|    if (n & (MINBPC(enc) - 1)) {
  ------------------
  |  |  698|  5.75k|#define MINBPC(enc) 2
  ------------------
  |  Branch (1024:9): [True: 2.71k, False: 3.03k]
  ------------------
 1025|  2.71k|      n &= ~(MINBPC(enc) - 1);
  ------------------
  |  |  698|  2.71k|#define MINBPC(enc) 2
  ------------------
 1026|  2.71k|      if (n == 0)
  ------------------
  |  Branch (1026:11): [True: 5, False: 2.71k]
  ------------------
 1027|      5|        return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      5|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
 1028|  2.71k|      end = ptr + n;
 1029|  2.71k|    }
 1030|  5.75k|  }
 1031|  5.74k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  5.74k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  5.74k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  5.54k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 5.54k, False: 206]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1032|     35|  case BT_QUOT:
  ------------------
  |  Branch (1032:3): [True: 35, False: 5.71k]
  ------------------
 1033|     35|    return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|     35|#define PREFIX(ident) little2_##ident
  ------------------
                  return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|     35|#define MINBPC(enc) 2
  ------------------
 1034|    102|  case BT_APOS:
  ------------------
  |  Branch (1034:3): [True: 102, False: 5.64k]
  ------------------
 1035|    102|    return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|    102|#define PREFIX(ident) little2_##ident
  ------------------
                  return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|    102|#define MINBPC(enc) 2
  ------------------
 1036|  4.69k|  case BT_LT: {
  ------------------
  |  Branch (1036:3): [True: 4.69k, False: 1.05k]
  ------------------
 1037|  4.69k|    ptr += MINBPC(enc);
  ------------------
  |  |  698|  4.69k|#define MINBPC(enc) 2
  ------------------
 1038|  4.69k|    REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  4.69k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  4.69k|    {                                                                          \
  |  |  |  |  135|  4.69k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  4.69k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|  4.69k|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 4.69k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  4.69k|    }
  |  |  ------------------
  ------------------
 1039|  4.69k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  4.69k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  4.69k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  1.67k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:3): [True: 4.68k, False: 5]
  |  |  |  |  |  Branch (683:4): [True: 1.67k, False: 3.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1040|    348|    case BT_EXCL:
  ------------------
  |  Branch (1040:5): [True: 348, False: 4.34k]
  ------------------
 1041|    348|      return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|    348|#define PREFIX(ident) little2_##ident
  ------------------
                    return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|    348|#define MINBPC(enc) 2
  ------------------
 1042|  1.25k|    case BT_QUEST:
  ------------------
  |  Branch (1042:5): [True: 1.25k, False: 3.43k]
  ------------------
 1043|  1.25k|      return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|  1.25k|#define PREFIX(ident) little2_##ident
  ------------------
                    return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|  1.25k|#define MINBPC(enc) 2
  ------------------
 1044|     66|    case BT_NMSTRT:
  ------------------
  |  Branch (1044:5): [True: 66, False: 4.62k]
  ------------------
 1045|     77|    case BT_HEX:
  ------------------
  |  Branch (1045:5): [True: 11, False: 4.68k]
  ------------------
 1046|  3.07k|    case BT_NONASCII:
  ------------------
  |  Branch (1046:5): [True: 2.99k, False: 1.69k]
  ------------------
 1047|  3.07k|    case BT_LEAD2:
  ------------------
  |  Branch (1047:5): [True: 0, False: 4.69k]
  ------------------
 1048|  3.07k|    case BT_LEAD3:
  ------------------
  |  Branch (1048:5): [True: 0, False: 4.69k]
  ------------------
 1049|  3.08k|    case BT_LEAD4:
  ------------------
  |  Branch (1049:5): [True: 8, False: 4.68k]
  ------------------
 1050|  3.08k|      *nextTokPtr = ptr - MINBPC(enc);
  ------------------
  |  |  698|  3.08k|#define MINBPC(enc) 2
  ------------------
 1051|  3.08k|      return XML_TOK_INSTANCE_START;
  ------------------
  |  |   96|  3.08k|#  define XML_TOK_INSTANCE_START 29
  ------------------
 1052|  4.69k|    }
 1053|      5|    *nextTokPtr = ptr;
 1054|      5|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      5|#  define XML_TOK_INVALID 0
  ------------------
 1055|  4.69k|  }
 1056|     85|  case BT_CR:
  ------------------
  |  Branch (1056:3): [True: 85, False: 5.66k]
  ------------------
 1057|     85|    if (ptr + MINBPC(enc) == end) {
  ------------------
  |  |  698|     85|#define MINBPC(enc) 2
  ------------------
  |  Branch (1057:9): [True: 3, False: 82]
  ------------------
 1058|      3|      *nextTokPtr = end;
 1059|       |      /* indicate that this might be part of a CR/LF pair */
 1060|      3|      return -XML_TOK_PROLOG_S;
  ------------------
  |  |   82|      3|#  define XML_TOK_PROLOG_S 15
  ------------------
 1061|      3|    }
 1062|     82|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|     82|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1063|    343|  case BT_S:
  ------------------
  |  Branch (1063:3): [True: 261, False: 5.48k]
  ------------------
 1064|    416|  case BT_LF:
  ------------------
  |  Branch (1064:3): [True: 73, False: 5.67k]
  ------------------
 1065|  1.06k|    for (;;) {
 1066|  1.06k|      ptr += MINBPC(enc);
  ------------------
  |  |  698|  1.06k|#define MINBPC(enc) 2
  ------------------
 1067|  1.06k|      if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|  1.06k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  1.06k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|  1.06k|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1067:11): [True: 2, False: 1.06k]
  ------------------
 1068|      2|        break;
 1069|  1.06k|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  1.06k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  1.06k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  1.02k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 1.02k, False: 38]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1070|    248|      case BT_S:
  ------------------
  |  Branch (1070:7): [True: 248, False: 815]
  ------------------
 1071|    443|      case BT_LF:
  ------------------
  |  Branch (1071:7): [True: 195, False: 868]
  ------------------
 1072|    443|        break;
 1073|    208|      case BT_CR:
  ------------------
  |  Branch (1073:7): [True: 208, False: 855]
  ------------------
 1074|       |        /* don't split CR/LF pair */
 1075|    208|        if (ptr + MINBPC(enc) != end)
  ------------------
  |  |  698|    208|#define MINBPC(enc) 2
  ------------------
  |  Branch (1075:13): [True: 206, False: 2]
  ------------------
 1076|    206|          break;
 1077|      2|        EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|      2|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1078|    414|      default:
  ------------------
  |  Branch (1078:7): [True: 412, False: 651]
  ------------------
 1079|    414|        *nextTokPtr = ptr;
 1080|    414|        return XML_TOK_PROLOG_S;
  ------------------
  |  |   82|    414|#  define XML_TOK_PROLOG_S 15
  ------------------
 1081|  1.06k|      }
 1082|  1.06k|    }
 1083|      2|    *nextTokPtr = ptr;
 1084|      2|    return XML_TOK_PROLOG_S;
  ------------------
  |  |   82|      2|#  define XML_TOK_PROLOG_S 15
  ------------------
 1085|     99|  case BT_PERCNT:
  ------------------
  |  Branch (1085:3): [True: 99, False: 5.64k]
  ------------------
 1086|     99|    return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|     99|#define PREFIX(ident) little2_##ident
  ------------------
                  return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|     99|#define MINBPC(enc) 2
  ------------------
 1087|      1|  case BT_COMMA:
  ------------------
  |  Branch (1087:3): [True: 1, False: 5.74k]
  ------------------
 1088|      1|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      1|#define MINBPC(enc) 2
  ------------------
 1089|      1|    return XML_TOK_COMMA;
  ------------------
  |  |  107|      1|#  define XML_TOK_COMMA 38
  ------------------
 1090|      1|  case BT_LSQB:
  ------------------
  |  Branch (1090:3): [True: 1, False: 5.74k]
  ------------------
 1091|      1|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      1|#define MINBPC(enc) 2
  ------------------
 1092|      1|    return XML_TOK_OPEN_BRACKET;
  ------------------
  |  |   92|      1|#  define XML_TOK_OPEN_BRACKET 25
  ------------------
 1093|     30|  case BT_RSQB:
  ------------------
  |  Branch (1093:3): [True: 30, False: 5.71k]
  ------------------
 1094|     30|    ptr += MINBPC(enc);
  ------------------
  |  |  698|     30|#define MINBPC(enc) 2
  ------------------
 1095|     30|    if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|     30|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|     30|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|     30|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [True: 1, False: 29]
  ------------------
 1096|      1|      return -XML_TOK_CLOSE_BRACKET;
  ------------------
  |  |   93|      1|#  define XML_TOK_CLOSE_BRACKET 26
  ------------------
 1097|     29|    if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
  ------------------
  |  |  702|     29|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|     29|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 14, False: 15]
  |  |  |  |  |  Branch (685:52): [True: 4, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1098|      4|      REQUIRE_CHARS(enc, ptr, end, 2);
  ------------------
  |  |  134|      4|    {                                                                          \
  |  |  135|      4|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  ------------------
  |  |  |  |  129|      4|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|      4|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (135:11): [True: 1, False: 3]
  |  |  ------------------
  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  ------------------
  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  ------------------
  |  |  137|      1|      }                                                                        \
  |  |  138|      4|    }
  ------------------
 1099|      3|      if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) {
  ------------------
  |  |  702|      3|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|      3|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 2, False: 1]
  |  |  |  |  |  Branch (685:52): [True: 1, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1100|      1|        *nextTokPtr = ptr + 2 * MINBPC(enc);
  ------------------
  |  |  698|      1|#define MINBPC(enc) 2
  ------------------
 1101|      1|        return XML_TOK_COND_SECT_CLOSE;
  ------------------
  |  |  103|      1|#  define XML_TOK_COND_SECT_CLOSE 34      /* ]]> */
  ------------------
 1102|      1|      }
 1103|      3|    }
 1104|     27|    *nextTokPtr = ptr;
 1105|     27|    return XML_TOK_CLOSE_BRACKET;
  ------------------
  |  |   93|     27|#  define XML_TOK_CLOSE_BRACKET 26
  ------------------
 1106|      3|  case BT_LPAR:
  ------------------
  |  Branch (1106:3): [True: 3, False: 5.74k]
  ------------------
 1107|      3|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      3|#define MINBPC(enc) 2
  ------------------
 1108|      3|    return XML_TOK_OPEN_PAREN;
  ------------------
  |  |   90|      3|#  define XML_TOK_OPEN_PAREN 23
  ------------------
 1109|     39|  case BT_RPAR:
  ------------------
  |  Branch (1109:3): [True: 39, False: 5.70k]
  ------------------
 1110|     39|    ptr += MINBPC(enc);
  ------------------
  |  |  698|     39|#define MINBPC(enc) 2
  ------------------
 1111|     39|    if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|     39|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|     39|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|     39|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1111:9): [True: 2, False: 37]
  ------------------
 1112|      2|      return -XML_TOK_CLOSE_PAREN;
  ------------------
  |  |   91|      2|#  define XML_TOK_CLOSE_PAREN 24
  ------------------
 1113|     37|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|     37|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|     37|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|     12|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:3): [True: 12, False: 25]
  |  |  |  |  |  Branch (683:4): [True: 12, False: 25]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1114|      1|    case BT_AST:
  ------------------
  |  Branch (1114:5): [True: 1, False: 36]
  ------------------
 1115|      1|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      1|#define MINBPC(enc) 2
  ------------------
 1116|      1|      return XML_TOK_CLOSE_PAREN_ASTERISK;
  ------------------
  |  |  105|      1|#  define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */
  ------------------
 1117|      2|    case BT_QUEST:
  ------------------
  |  Branch (1117:5): [True: 2, False: 35]
  ------------------
 1118|      2|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      2|#define MINBPC(enc) 2
  ------------------
 1119|      2|      return XML_TOK_CLOSE_PAREN_QUESTION;
  ------------------
  |  |  104|      2|#  define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */
  ------------------
 1120|      1|    case BT_PLUS:
  ------------------
  |  Branch (1120:5): [True: 1, False: 36]
  ------------------
 1121|      1|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      1|#define MINBPC(enc) 2
  ------------------
 1122|      1|      return XML_TOK_CLOSE_PAREN_PLUS;
  ------------------
  |  |  106|      1|#  define XML_TOK_CLOSE_PAREN_PLUS 37     /* )+ */
  ------------------
 1123|      2|    case BT_CR:
  ------------------
  |  Branch (1123:5): [True: 2, False: 35]
  ------------------
 1124|      3|    case BT_LF:
  ------------------
  |  Branch (1124:5): [True: 1, False: 36]
  ------------------
 1125|      4|    case BT_S:
  ------------------
  |  Branch (1125:5): [True: 1, False: 36]
  ------------------
 1126|      5|    case BT_GT:
  ------------------
  |  Branch (1126:5): [True: 1, False: 36]
  ------------------
 1127|      6|    case BT_COMMA:
  ------------------
  |  Branch (1127:5): [True: 1, False: 36]
  ------------------
 1128|      7|    case BT_VERBAR:
  ------------------
  |  Branch (1128:5): [True: 1, False: 36]
  ------------------
 1129|      8|    case BT_RPAR:
  ------------------
  |  Branch (1129:5): [True: 1, False: 36]
  ------------------
 1130|      8|      *nextTokPtr = ptr;
 1131|      8|      return XML_TOK_CLOSE_PAREN;
  ------------------
  |  |   91|      8|#  define XML_TOK_CLOSE_PAREN 24
  ------------------
 1132|     37|    }
 1133|     25|    *nextTokPtr = ptr;
 1134|     25|    return XML_TOK_INVALID;
  ------------------
  |  |   57|     25|#  define XML_TOK_INVALID 0
  ------------------
 1135|      1|  case BT_VERBAR:
  ------------------
  |  Branch (1135:3): [True: 1, False: 5.74k]
  ------------------
 1136|      1|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      1|#define MINBPC(enc) 2
  ------------------
 1137|      1|    return XML_TOK_OR;
  ------------------
  |  |   88|      1|#  define XML_TOK_OR 21         /* | */
  ------------------
 1138|      2|  case BT_GT:
  ------------------
  |  Branch (1138:3): [True: 2, False: 5.74k]
  ------------------
 1139|      2|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      2|#define MINBPC(enc) 2
  ------------------
 1140|      2|    return XML_TOK_DECL_CLOSE;
  ------------------
  |  |   84|      2|#  define XML_TOK_DECL_CLOSE 17 /* > */
  ------------------
 1141|     97|  case BT_NUM:
  ------------------
  |  Branch (1141:3): [True: 97, False: 5.65k]
  ------------------
 1142|     97|    return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|     97|#define PREFIX(ident) little2_##ident
  ------------------
                  return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|     97|#define MINBPC(enc) 2
  ------------------
 1143|      0|#  define LEAD_CASE(n)                                                         \
 1144|      0|  case BT_LEAD##n:                                                             \
 1145|      0|    if (end - ptr < n)                                                         \
 1146|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
 1147|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
 1148|      0|      *nextTokPtr = ptr;                                                       \
 1149|      0|      return XML_TOK_INVALID;                                                  \
 1150|      0|    }                                                                          \
 1151|      0|    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
 1152|      0|      ptr += n;                                                                \
 1153|      0|      tok = XML_TOK_NAME;                                                      \
 1154|      0|      break;                                                                   \
 1155|      0|    }                                                                          \
 1156|      0|    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
 1157|      0|      ptr += n;                                                                \
 1158|      0|      tok = XML_TOK_NMTOKEN;                                                   \
 1159|      0|      break;                                                                   \
 1160|      0|    }                                                                          \
 1161|      0|    *nextTokPtr = ptr;                                                         \
 1162|      0|    return XML_TOK_INVALID;
 1163|      0|    LEAD_CASE(2)
  ------------------
  |  | 1144|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1144:3): [True: 0, False: 5.74k]
  |  |  ------------------
  |  | 1145|      0|    if (end - ptr < n)                                                         \
  |  |  ------------------
  |  |  |  Branch (1145:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1146|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  ------------------
  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  ------------------
  |  | 1147|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  ------------------
  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1148|      0|      *nextTokPtr = ptr;                                                       \
  |  | 1149|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  | 1150|      0|    }                                                                          \
  |  | 1151|      0|    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
  |  |  ------------------
  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (705:35): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1152|      0|      ptr += n;                                                                \
  |  | 1153|      0|      tok = XML_TOK_NAME;                                                      \
  |  |  ------------------
  |  |  |  |   85|      0|#  define XML_TOK_NAME 18
  |  |  ------------------
  |  | 1154|      0|      break;                                                                   \
  |  | 1155|      0|    }                                                                          \
  |  | 1156|      0|    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
  |  |  ------------------
  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (703:33): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1157|      0|      ptr += n;                                                                \
  |  | 1158|      0|      tok = XML_TOK_NMTOKEN;                                                   \
  |  |  ------------------
  |  |  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  |  |  ------------------
  |  | 1159|      0|      break;                                                                   \
  |  | 1160|      0|    }                                                                          \
  |  | 1161|      0|    *nextTokPtr = ptr;                                                         \
  |  | 1162|      0|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
 1164|      0|    LEAD_CASE(3)
  ------------------
  |  | 1144|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1144:3): [True: 0, False: 5.74k]
  |  |  ------------------
  |  | 1145|      0|    if (end - ptr < n)                                                         \
  |  |  ------------------
  |  |  |  Branch (1145:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1146|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  ------------------
  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  ------------------
  |  | 1147|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  ------------------
  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1148|      0|      *nextTokPtr = ptr;                                                       \
  |  | 1149|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  | 1150|      0|    }                                                                          \
  |  | 1151|      0|    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
  |  |  ------------------
  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (705:35): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1152|      0|      ptr += n;                                                                \
  |  | 1153|      0|      tok = XML_TOK_NAME;                                                      \
  |  |  ------------------
  |  |  |  |   85|      0|#  define XML_TOK_NAME 18
  |  |  ------------------
  |  | 1154|      0|      break;                                                                   \
  |  | 1155|      0|    }                                                                          \
  |  | 1156|      0|    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
  |  |  ------------------
  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (703:33): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1157|      0|      ptr += n;                                                                \
  |  | 1158|      0|      tok = XML_TOK_NMTOKEN;                                                   \
  |  |  ------------------
  |  |  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  |  |  ------------------
  |  | 1159|      0|      break;                                                                   \
  |  | 1160|      0|    }                                                                          \
  |  | 1161|      0|    *nextTokPtr = ptr;                                                         \
  |  | 1162|      0|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
 1165|     15|    LEAD_CASE(4)
  ------------------
  |  | 1144|      7|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1144:3): [True: 7, False: 5.74k]
  |  |  ------------------
  |  | 1145|      7|    if (end - ptr < n)                                                         \
  |  |  ------------------
  |  |  |  Branch (1145:9): [True: 1, False: 6]
  |  |  ------------------
  |  | 1146|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  ------------------
  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  ------------------
  |  | 1147|      6|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  ------------------
  |  |  |  |  707|      6|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  694|      6|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (694:4): [True: 6, Folded]
  |  |  |  |  |  |  |  Branch (694:16): [True: 5, False: 1]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1148|      5|      *nextTokPtr = ptr;                                                       \
  |  | 1149|      5|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      5|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  | 1150|      5|    }                                                                          \
  |  | 1151|      6|    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
  |  |  ------------------
  |  |  |  |  705|      1|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (705:35): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1152|      0|      ptr += n;                                                                \
  |  | 1153|      0|      tok = XML_TOK_NAME;                                                      \
  |  |  ------------------
  |  |  |  |   85|      0|#  define XML_TOK_NAME 18
  |  |  ------------------
  |  | 1154|      0|      break;                                                                   \
  |  | 1155|      0|    }                                                                          \
  |  | 1156|      1|    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
  |  |  ------------------
  |  |  |  |  703|      1|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (703:33): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1157|      0|      ptr += n;                                                                \
  |  | 1158|      0|      tok = XML_TOK_NMTOKEN;                                                   \
  |  |  ------------------
  |  |  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  |  |  ------------------
  |  | 1159|      0|      break;                                                                   \
  |  | 1160|      0|    }                                                                          \
  |  | 1161|      1|    *nextTokPtr = ptr;                                                         \
  |  | 1162|      1|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      1|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
 1166|      0|#  undef LEAD_CASE
 1167|      9|  case BT_NMSTRT:
  ------------------
  |  Branch (1167:3): [True: 9, False: 5.73k]
  ------------------
 1168|     13|  case BT_HEX:
  ------------------
  |  Branch (1168:3): [True: 4, False: 5.74k]
  ------------------
 1169|     13|    tok = XML_TOK_NAME;
  ------------------
  |  |   85|     13|#  define XML_TOK_NAME 18
  ------------------
 1170|     13|    ptr += MINBPC(enc);
  ------------------
  |  |  698|     13|#define MINBPC(enc) 2
  ------------------
 1171|     13|    break;
 1172|      3|  case BT_DIGIT:
  ------------------
  |  Branch (1172:3): [True: 3, False: 5.74k]
  ------------------
 1173|      5|  case BT_NAME:
  ------------------
  |  Branch (1173:3): [True: 2, False: 5.74k]
  ------------------
 1174|      7|  case BT_MINUS:
  ------------------
  |  Branch (1174:3): [True: 2, False: 5.74k]
  ------------------
 1175|      7|#  ifdef XML_NS
 1176|      8|  case BT_COLON:
  ------------------
  |  Branch (1176:3): [True: 1, False: 5.74k]
  ------------------
 1177|      8|#  endif
 1178|      8|    tok = XML_TOK_NMTOKEN;
  ------------------
  |  |   86|      8|#  define XML_TOK_NMTOKEN 19
  ------------------
 1179|      8|    ptr += MINBPC(enc);
  ------------------
  |  |  698|      8|#define MINBPC(enc) 2
  ------------------
 1180|      8|    break;
 1181|    185|  case BT_NONASCII:
  ------------------
  |  Branch (1181:3): [True: 185, False: 5.56k]
  ------------------
 1182|    185|    if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {
  ------------------
  |  |  706|    185|#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(p)
  |  |  ------------------
  |  |  |  |  689|    185|  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|    185|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:3): [True: 124, False: 61]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1183|    124|      ptr += MINBPC(enc);
  ------------------
  |  |  698|    124|#define MINBPC(enc) 2
  ------------------
 1184|    124|      tok = XML_TOK_NAME;
  ------------------
  |  |   85|    124|#  define XML_TOK_NAME 18
  ------------------
 1185|    124|      break;
 1186|    124|    }
 1187|     61|    if (IS_NAME_CHAR_MINBPC(enc, ptr)) {
  ------------------
  |  |  704|     61|#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(p)
  |  |  ------------------
  |  |  |  |  687|     61|  UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|     61|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:3): [True: 16, False: 45]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|     16|      ptr += MINBPC(enc);
  ------------------
  |  |  698|     16|#define MINBPC(enc) 2
  ------------------
 1189|     16|      tok = XML_TOK_NMTOKEN;
  ------------------
  |  |   86|     16|#  define XML_TOK_NMTOKEN 19
  ------------------
 1190|     16|      break;
 1191|     16|    }
 1192|     45|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|     45|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1193|     59|  default:
  ------------------
  |  Branch (1193:3): [True: 14, False: 5.73k]
  ------------------
 1194|     59|    *nextTokPtr = ptr;
 1195|     59|    return XML_TOK_INVALID;
  ------------------
  |  |   57|     59|#  define XML_TOK_INVALID 0
  ------------------
 1196|  5.74k|  }
 1197|  1.98k|  while (HAS_CHAR(enc, ptr, end)) {
 1198|  1.98k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  1.98k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  1.98k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  1.38k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 1.38k, False: 598]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1199|  5.49k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  1.63k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 571, False: 1.41k]
  |  |  ------------------
  |  |   82|  1.63k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  704|    571|#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  687|    571|  UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|    571|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 82, False: 489]
  |  |  ------------------
  |  |   83|     82|      *nextTokPtr = ptr;                                                       \
  |  |   84|     82|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     82|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|     82|    }                                                                          \
  |  |   86|  1.63k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|    489|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|    708|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 219, False: 1.76k]
  |  |  ------------------
  |  |   88|  1.03k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 329, False: 1.65k]
  |  |  ------------------
  |  |   89|  1.23k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 197, False: 1.78k]
  |  |  ------------------
  |  |   90|  1.43k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 197, False: 1.78k]
  |  |  ------------------
  |  |   91|  1.63k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 199, False: 1.78k]
  |  |  ------------------
  |  |   92|  1.63k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  1.63k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |   93|  1.63k|    break;                                                                     \
  |  |   94|  1.63k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 1.98k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   95|      0|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 1.98k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   96|     11|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|     11|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 11, False: 1.97k]
  |  |  |  |  ------------------
  |  |  |  |   71|     11|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 10]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     10|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|     10|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     20|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 10, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 10, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|     10|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     10|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     10|    }                                                                          \
  |  |  |  |   77|     10|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
 1200|      1|    case BT_GT:
  ------------------
  |  Branch (1200:5): [True: 1, False: 1.98k]
  ------------------
 1201|      2|    case BT_RPAR:
  ------------------
  |  Branch (1201:5): [True: 1, False: 1.98k]
  ------------------
 1202|      3|    case BT_COMMA:
  ------------------
  |  Branch (1202:5): [True: 1, False: 1.98k]
  ------------------
 1203|      5|    case BT_VERBAR:
  ------------------
  |  Branch (1203:5): [True: 2, False: 1.98k]
  ------------------
 1204|      6|    case BT_LSQB:
  ------------------
  |  Branch (1204:5): [True: 1, False: 1.98k]
  ------------------
 1205|      7|    case BT_PERCNT:
  ------------------
  |  Branch (1205:5): [True: 1, False: 1.98k]
  ------------------
 1206|      8|    case BT_S:
  ------------------
  |  Branch (1206:5): [True: 1, False: 1.98k]
  ------------------
 1207|      9|    case BT_CR:
  ------------------
  |  Branch (1207:5): [True: 1, False: 1.98k]
  ------------------
 1208|     10|    case BT_LF:
  ------------------
  |  Branch (1208:5): [True: 1, False: 1.98k]
  ------------------
 1209|     10|      *nextTokPtr = ptr;
 1210|     10|      return tok;
 1211|      0|#  ifdef XML_NS
 1212|    224|    case BT_COLON:
  ------------------
  |  Branch (1212:5): [True: 224, False: 1.76k]
  ------------------
 1213|    224|      ptr += MINBPC(enc);
  ------------------
  |  |  698|    224|#define MINBPC(enc) 2
  ------------------
 1214|    224|      switch (tok) {
  ------------------
  |  Branch (1214:15): [True: 30, False: 194]
  ------------------
 1215|     29|      case XML_TOK_NAME:
  ------------------
  |  |   85|     29|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (1215:7): [True: 29, False: 195]
  ------------------
 1216|     29|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|     29|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|     29|    {                                                                          \
  |  |  |  |  135|     29|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|     29|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|     29|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 28]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|     29|    }
  |  |  ------------------
  ------------------
 1217|     28|        tok = XML_TOK_PREFIXED_NAME;
  ------------------
  |  |  118|     28|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
 1218|     28|        switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|     28|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|     28|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|      6|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 6, False: 22]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1219|     65|          CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|     12|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 11, False: 17]
  |  |  ------------------
  |  |   82|     12|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  704|     11|#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  687|     11|  UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|     11|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 4, False: 7]
  |  |  ------------------
  |  |   83|      4|      *nextTokPtr = ptr;                                                       \
  |  |   84|      4|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      4|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|      4|    }                                                                          \
  |  |   86|     12|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      7|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|      8|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 1, False: 27]
  |  |  ------------------
  |  |   88|      9|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 1, False: 27]
  |  |  ------------------
  |  |   89|     10|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 1, False: 27]
  |  |  ------------------
  |  |   90|     11|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 1, False: 27]
  |  |  ------------------
  |  |   91|     12|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 1, False: 27]
  |  |  ------------------
  |  |   92|     12|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|     12|#define MINBPC(enc) 2
  |  |  ------------------
  |  |   93|     12|    break;                                                                     \
  |  |   94|     12|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 28]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   95|      0|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 28]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   96|      5|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|      5|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 5, False: 23]
  |  |  |  |  ------------------
  |  |  |  |   71|      5|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 4]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      4|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      4|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      8|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 4, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      4|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      4|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      4|    }                                                                          \
  |  |  |  |   77|      4|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
 1220|      7|        default:
  ------------------
  |  Branch (1220:9): [True: 7, False: 21]
  ------------------
 1221|      7|          tok = XML_TOK_NMTOKEN;
  ------------------
  |  |   86|      7|#  define XML_TOK_NMTOKEN 19
  ------------------
 1222|      7|          break;
 1223|     28|        }
 1224|     19|        break;
 1225|     19|      case XML_TOK_PREFIXED_NAME:
  ------------------
  |  |  118|      1|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
  |  Branch (1225:7): [True: 1, False: 223]
  ------------------
 1226|      1|        tok = XML_TOK_NMTOKEN;
  ------------------
  |  |   86|      1|#  define XML_TOK_NMTOKEN 19
  ------------------
 1227|      1|        break;
 1228|    224|      }
 1229|    214|      break;
 1230|    214|#  endif
 1231|    214|    case BT_PLUS:
  ------------------
  |  Branch (1231:5): [True: 3, False: 1.98k]
  ------------------
 1232|      3|      if (tok == XML_TOK_NMTOKEN) {
  ------------------
  |  |   86|      3|#  define XML_TOK_NMTOKEN 19
  ------------------
  |  Branch (1232:11): [True: 1, False: 2]
  ------------------
 1233|      1|        *nextTokPtr = ptr;
 1234|      1|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
 1235|      1|      }
 1236|      2|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      2|#define MINBPC(enc) 2
  ------------------
 1237|      2|      return XML_TOK_NAME_PLUS;
  ------------------
  |  |  101|      2|#  define XML_TOK_NAME_PLUS 32            /* name+ */
  ------------------
 1238|      5|    case BT_AST:
  ------------------
  |  Branch (1238:5): [True: 5, False: 1.98k]
  ------------------
 1239|      5|      if (tok == XML_TOK_NMTOKEN) {
  ------------------
  |  |   86|      5|#  define XML_TOK_NMTOKEN 19
  ------------------
  |  Branch (1239:11): [True: 2, False: 3]
  ------------------
 1240|      2|        *nextTokPtr = ptr;
 1241|      2|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      2|#  define XML_TOK_INVALID 0
  ------------------
 1242|      2|      }
 1243|      3|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      3|#define MINBPC(enc) 2
  ------------------
 1244|      3|      return XML_TOK_NAME_ASTERISK;
  ------------------
  |  |  100|      3|#  define XML_TOK_NAME_ASTERISK 31        /* name* */
  ------------------
 1245|      3|    case BT_QUEST:
  ------------------
  |  Branch (1245:5): [True: 3, False: 1.98k]
  ------------------
 1246|      3|      if (tok == XML_TOK_NMTOKEN) {
  ------------------
  |  |   86|      3|#  define XML_TOK_NMTOKEN 19
  ------------------
  |  Branch (1246:11): [True: 1, False: 2]
  ------------------
 1247|      1|        *nextTokPtr = ptr;
 1248|      1|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
 1249|      1|      }
 1250|      2|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      2|#define MINBPC(enc) 2
  ------------------
 1251|      2|      return XML_TOK_NAME_QUESTION;
  ------------------
  |  |   99|      2|#  define XML_TOK_NAME_QUESTION 30        /* name? */
  ------------------
 1252|     17|    default:
  ------------------
  |  Branch (1252:5): [True: 17, False: 1.96k]
  ------------------
 1253|     17|      *nextTokPtr = ptr;
 1254|     17|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     17|#  define XML_TOK_INVALID 0
  ------------------
 1255|  1.98k|    }
 1256|  1.98k|  }
 1257|     20|  return -tok;
 1258|    161|}
xmltok.c:little2_scanLit:
  984|    137|                const char **nextTokPtr) {
  985|  2.47k|  while (HAS_CHAR(enc, ptr, end)) {
  986|  2.47k|    int t = BYTE_TYPE(enc, ptr);
  ------------------
  |  |  700|  2.47k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  2.47k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    680|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 680, False: 1.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  987|  2.47k|    switch (t) {
  988|    895|      INVALID_CASES(ptr, nextTokPtr)
  ------------------
  |  |   60|      0|    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 0, False: 2.47k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      0|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      0|    }                                                                          \
  |  |  |  |   56|      0|    ptr += n;                                                                  \
  |  |  |  |   57|      0|    break;
  |  |  ------------------
  |  |   61|      0|    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 0, False: 2.47k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      0|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      0|    }                                                                          \
  |  |  |  |   56|      0|    ptr += n;                                                                  \
  |  |  |  |   57|      0|    break;
  |  |  ------------------
  |  |   62|    444|    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    444|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 444, False: 2.03k]
  |  |  |  |  ------------------
  |  |  |  |   50|    444|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 1, False: 443]
  |  |  |  |  ------------------
  |  |  |  |   51|    402|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    443|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|    443|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|    443|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 443, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 41, False: 402]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     41|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     41|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     41|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     41|    }                                                                          \
  |  |  |  |   56|    443|    ptr += n;                                                                  \
  |  |  |  |   57|    402|    break;
  |  |  ------------------
  |  |   63|    402|  case BT_NONXML:                                                              \
  |  |  ------------------
  |  |  |  Branch (63:3): [True: 4, False: 2.47k]
  |  |  ------------------
  |  |   64|      4|  case BT_MALFORM:                                                             \
  |  |  ------------------
  |  |  |  Branch (64:3): [True: 0, False: 2.47k]
  |  |  ------------------
  |  |   65|      8|  case BT_TRAIL:                                                               \
  |  |  ------------------
  |  |  |  Branch (65:3): [True: 4, False: 2.47k]
  |  |  ------------------
  |  |   66|      8|    *(nextTokPtr) = (ptr);                                                     \
  |  |   67|      8|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      8|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
  989|    203|    case BT_QUOT:
  ------------------
  |  Branch (989:5): [True: 203, False: 2.27k]
  ------------------
  990|    435|    case BT_APOS:
  ------------------
  |  Branch (990:5): [True: 232, False: 2.24k]
  ------------------
  991|    435|      ptr += MINBPC(enc);
  ------------------
  |  |  698|    435|#define MINBPC(enc) 2
  ------------------
  992|    435|      if (t != open)
  ------------------
  |  Branch (992:11): [True: 388, False: 47]
  ------------------
  993|    388|        break;
  994|     47|      if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|     47|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|     47|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|     47|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (994:11): [True: 6, False: 41]
  ------------------
  995|      6|        return -XML_TOK_LITERAL;
  ------------------
  |  |   94|      6|#  define XML_TOK_LITERAL 27
  ------------------
  996|     41|      *nextTokPtr = ptr;
  997|     41|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|     41|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|     41|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|      7|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 7, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  998|      1|      case BT_S:
  ------------------
  |  Branch (998:7): [True: 1, False: 40]
  ------------------
  999|      2|      case BT_CR:
  ------------------
  |  Branch (999:7): [True: 1, False: 40]
  ------------------
 1000|      3|      case BT_LF:
  ------------------
  |  Branch (1000:7): [True: 1, False: 40]
  ------------------
 1001|      4|      case BT_GT:
  ------------------
  |  Branch (1001:7): [True: 1, False: 40]
  ------------------
 1002|      5|      case BT_PERCNT:
  ------------------
  |  Branch (1002:7): [True: 1, False: 40]
  ------------------
 1003|      6|      case BT_LSQB:
  ------------------
  |  Branch (1003:7): [True: 1, False: 40]
  ------------------
 1004|      6|        return XML_TOK_LITERAL;
  ------------------
  |  |   94|      6|#  define XML_TOK_LITERAL 27
  ------------------
 1005|     35|      default:
  ------------------
  |  Branch (1005:7): [True: 35, False: 6]
  ------------------
 1006|     35|        return XML_TOK_INVALID;
  ------------------
  |  |   57|     35|#  define XML_TOK_INVALID 0
  ------------------
 1007|     41|      }
 1008|  1.59k|    default:
  ------------------
  |  Branch (1008:5): [True: 1.59k, False: 887]
  ------------------
 1009|  1.59k|      ptr += MINBPC(enc);
  ------------------
  |  |  698|  1.59k|#define MINBPC(enc) 2
  ------------------
 1010|  1.59k|      break;
 1011|  2.47k|    }
 1012|  2.47k|  }
 1013|     40|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|     40|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
 1014|    137|}
xmltok.c:little2_scanDecl:
  183|    348|                 const char **nextTokPtr) {
  184|    348|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    348|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    348|    {                                                                          \
  |  |  |  |  135|    348|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    348|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|    348|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 347]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|    348|    }
  |  |  ------------------
  ------------------
  185|    347|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|    347|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|    347|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    323|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 323, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  186|    246|  case BT_MINUS:
  ------------------
  |  Branch (186:3): [True: 246, False: 101]
  ------------------
  187|    246|    return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|    246|#define PREFIX(ident) little2_##ident
  ------------------
                  return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|    246|#define MINBPC(enc) 2
  ------------------
  188|      1|  case BT_LSQB:
  ------------------
  |  Branch (188:3): [True: 1, False: 346]
  ------------------
  189|      1|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      1|#define MINBPC(enc) 2
  ------------------
  190|      1|    return XML_TOK_COND_SECT_OPEN;
  ------------------
  |  |  102|      1|#  define XML_TOK_COND_SECT_OPEN 33       /* <![ */
  ------------------
  191|     46|  case BT_NMSTRT:
  ------------------
  |  Branch (191:3): [True: 46, False: 301]
  ------------------
  192|     76|  case BT_HEX:
  ------------------
  |  Branch (192:3): [True: 30, False: 317]
  ------------------
  193|     76|    ptr += MINBPC(enc);
  ------------------
  |  |  698|     76|#define MINBPC(enc) 2
  ------------------
  194|     76|    break;
  195|     24|  default:
  ------------------
  |  Branch (195:3): [True: 24, False: 323]
  ------------------
  196|     24|    *nextTokPtr = ptr;
  197|     24|    return XML_TOK_INVALID;
  ------------------
  |  |   57|     24|#  define XML_TOK_INVALID 0
  ------------------
  198|    347|  }
  199|    610|  while (HAS_CHAR(enc, ptr, end)) {
  200|    610|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|    610|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|    610|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    581|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 581, False: 29]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  201|     37|    case BT_PERCNT:
  ------------------
  |  Branch (201:5): [True: 37, False: 573]
  ------------------
  202|     37|      REQUIRE_CHARS(enc, ptr, end, 2);
  ------------------
  |  |  134|     37|    {                                                                          \
  |  |  135|     37|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  ------------------
  |  |  |  |  129|     37|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|     37|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (135:11): [True: 1, False: 36]
  |  |  ------------------
  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  ------------------
  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  ------------------
  |  |  137|      1|      }                                                                        \
  |  |  138|     37|    }
  ------------------
  203|       |      /* don't allow <!ENTITY% foo "whatever"> */
  204|     36|      switch (BYTE_TYPE(enc, ptr + MINBPC(enc))) {
  ------------------
  |  |  700|     36|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|     36|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|      4|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:3): [True: 4, False: 32]
  |  |  |  |  |  Branch (683:4): [True: 4, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|      1|      case BT_S:
  ------------------
  |  Branch (205:7): [True: 1, False: 35]
  ------------------
  206|      2|      case BT_CR:
  ------------------
  |  Branch (206:7): [True: 1, False: 35]
  ------------------
  207|      3|      case BT_LF:
  ------------------
  |  Branch (207:7): [True: 1, False: 35]
  ------------------
  208|      4|      case BT_PERCNT:
  ------------------
  |  Branch (208:7): [True: 1, False: 35]
  ------------------
  209|      4|        *nextTokPtr = ptr;
  210|      4|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      4|#  define XML_TOK_INVALID 0
  ------------------
  211|     36|      }
  212|     32|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|     32|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  213|     36|    case BT_S:
  ------------------
  |  Branch (213:5): [True: 4, False: 606]
  ------------------
  214|     37|    case BT_CR:
  ------------------
  |  Branch (214:5): [True: 1, False: 609]
  ------------------
  215|     40|    case BT_LF:
  ------------------
  |  Branch (215:5): [True: 3, False: 607]
  ------------------
  216|     40|      *nextTokPtr = ptr;
  217|     40|      return XML_TOK_DECL_OPEN;
  ------------------
  |  |   83|     40|#  define XML_TOK_DECL_OPEN 16  /* <!foo */
  ------------------
  218|    287|    case BT_NMSTRT:
  ------------------
  |  Branch (218:5): [True: 287, False: 323]
  ------------------
  219|    536|    case BT_HEX:
  ------------------
  |  Branch (219:5): [True: 249, False: 361]
  ------------------
  220|    536|      ptr += MINBPC(enc);
  ------------------
  |  |  698|    536|#define MINBPC(enc) 2
  ------------------
  221|    536|      break;
  222|     29|    default:
  ------------------
  |  Branch (222:5): [True: 29, False: 581]
  ------------------
  223|     29|      *nextTokPtr = ptr;
  224|     29|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     29|#  define XML_TOK_INVALID 0
  ------------------
  225|    610|    }
  226|    610|  }
  227|      2|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  228|     76|}
xmltok.c:little2_scanComment:
  146|    314|                    const char **nextTokPtr) {
  147|    314|  if (HAS_CHAR(enc, ptr, end)) {
  ------------------
  |  |  131|    314|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|    314|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|    314|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (129:5): [True: 313, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|    313|    if (! CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
  ------------------
  |  |  702|    313|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    313|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 301, False: 12]
  |  |  |  |  |  Branch (685:52): [True: 291, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  149|     22|      *nextTokPtr = ptr;
  150|     22|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     22|#  define XML_TOK_INVALID 0
  ------------------
  151|     22|    }
  152|    291|    ptr += MINBPC(enc);
  ------------------
  |  |  698|    291|#define MINBPC(enc) 2
  ------------------
  153|  2.59k|    while (HAS_CHAR(enc, ptr, end)) {
  154|  2.59k|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  2.59k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  2.59k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    724|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 724, False: 1.86k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|    891|        INVALID_CASES(ptr, nextTokPtr)
  ------------------
  |  |   60|      0|    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 0, False: 2.59k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      0|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      0|    }                                                                          \
  |  |  |  |   56|      0|    ptr += n;                                                                  \
  |  |  |  |   57|      0|    break;
  |  |  ------------------
  |  |   61|      0|    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 0, False: 2.59k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      0|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      0|    }                                                                          \
  |  |  |  |   56|      0|    ptr += n;                                                                  \
  |  |  |  |   57|      0|    break;
  |  |  ------------------
  |  |   62|    444|    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    444|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 444, False: 2.14k]
  |  |  |  |  ------------------
  |  |  |  |   50|    444|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 1, False: 443]
  |  |  |  |  ------------------
  |  |  |  |   51|    402|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    443|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|    443|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|    443|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 443, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 41, False: 402]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     41|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     41|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     41|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     41|    }                                                                          \
  |  |  |  |   56|    443|    ptr += n;                                                                  \
  |  |  |  |   57|    402|    break;
  |  |  ------------------
  |  |   63|    402|  case BT_NONXML:                                                              \
  |  |  ------------------
  |  |  |  Branch (63:3): [True: 2, False: 2.59k]
  |  |  ------------------
  |  |   64|      2|  case BT_MALFORM:                                                             \
  |  |  ------------------
  |  |  |  Branch (64:3): [True: 0, False: 2.59k]
  |  |  ------------------
  |  |   65|      6|  case BT_TRAIL:                                                               \
  |  |  ------------------
  |  |  |  Branch (65:3): [True: 4, False: 2.58k]
  |  |  ------------------
  |  |   66|      6|    *(nextTokPtr) = (ptr);                                                     \
  |  |   67|      6|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      6|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
  156|    334|      case BT_MINUS:
  ------------------
  |  Branch (156:7): [True: 334, False: 2.25k]
  ------------------
  157|    334|        ptr += MINBPC(enc);
  ------------------
  |  |  698|    334|#define MINBPC(enc) 2
  ------------------
  158|    334|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    334|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    334|    {                                                                          \
  |  |  |  |  135|    334|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    334|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|    334|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 333]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|    334|    }
  |  |  ------------------
  ------------------
  159|    333|        if (CHAR_MATCHES(enc, ptr, ASCII_MINUS)) {
  ------------------
  |  |  702|    333|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    333|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 264, False: 69]
  |  |  |  |  |  Branch (685:52): [True: 188, False: 76]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  160|    188|          ptr += MINBPC(enc);
  ------------------
  |  |  698|    188|#define MINBPC(enc) 2
  ------------------
  161|    188|          REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    188|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    188|    {                                                                          \
  |  |  |  |  135|    188|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    188|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|    188|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 187]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|    188|    }
  |  |  ------------------
  ------------------
  162|    187|          if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  702|    187|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    187|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 173, False: 14]
  |  |  |  |  |  Branch (685:52): [True: 161, False: 12]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|     26|            *nextTokPtr = ptr;
  164|     26|            return XML_TOK_INVALID;
  ------------------
  |  |   57|     26|#  define XML_TOK_INVALID 0
  ------------------
  165|     26|          }
  166|    161|          *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|    161|#define MINBPC(enc) 2
  ------------------
  167|    161|          return XML_TOK_COMMENT;
  ------------------
  |  |   78|    161|#  define XML_TOK_COMMENT 13
  ------------------
  168|    187|        }
  169|    145|        break;
  170|  1.80k|      default:
  ------------------
  |  Branch (170:7): [True: 1.80k, False: 784]
  ------------------
  171|  1.80k|        ptr += MINBPC(enc);
  ------------------
  |  |  698|  1.80k|#define MINBPC(enc) 2
  ------------------
  172|  1.80k|        break;
  173|  2.59k|      }
  174|  2.59k|    }
  175|    291|  }
  176|     55|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|     55|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  177|    314|}
xmltok.c:little2_scanPi:
  277|  1.99k|               const char **nextTokPtr) {
  278|  1.99k|  int tok;
  279|  1.99k|  const char *target = ptr;
  280|  1.99k|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  1.99k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  1.99k|    {                                                                          \
  |  |  |  |  135|  1.99k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  1.99k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|  1.99k|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 1.99k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  1.99k|    }
  |  |  ------------------
  ------------------
  281|  1.99k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  1.99k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  1.99k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    852|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 852, False: 1.14k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  282|  4.14k|    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|  1.96k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 1.12k, False: 867]
  |  |  ------------------
  |  |  111|  1.96k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  706|  1.12k|#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  689|  1.12k|  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|  1.12k|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 18, False: 1.10k]
  |  |  ------------------
  |  |  112|     18|      *nextTokPtr = ptr;                                                       \
  |  |  113|     18|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     18|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|     18|    }                                                                          \
  |  |  115|  1.96k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|  1.10k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|  1.89k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 783, False: 1.21k]
  |  |  ------------------
  |  |  117|  1.96k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 69, False: 1.92k]
  |  |  ------------------
  |  |  118|  1.96k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  1.96k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |  119|  1.96k|    break;                                                                     \
  |  |  120|  1.96k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 1.99k]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  121|      0|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 1.99k]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  122|     10|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|     10|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 10, False: 1.98k]
  |  |  |  |  ------------------
  |  |  |  |  100|     10|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 9]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      9|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      9|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     18|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 9, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 9, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      9|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      9|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      9|    }                                                                          \
  |  |  |  |  106|      9|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  283|      5|  default:
  ------------------
  |  Branch (283:3): [True: 5, False: 1.98k]
  ------------------
  284|      5|    *nextTokPtr = ptr;
  285|      5|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      5|#  define XML_TOK_INVALID 0
  ------------------
  286|  1.99k|  }
  287|  5.65k|  while (HAS_CHAR(enc, ptr, end)) {
  288|  5.65k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  5.65k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  5.65k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  3.65k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 3.65k, False: 2.00k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  289|  15.9k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  3.69k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 1.98k, False: 3.66k]
  |  |  ------------------
  |  |   82|  3.69k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  704|  1.98k|#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  687|  1.98k|  UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|  1.98k|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 45, False: 1.94k]
  |  |  ------------------
  |  |   83|     45|      *nextTokPtr = ptr;                                                       \
  |  |   84|     45|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     45|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|     45|    }                                                                          \
  |  |   86|  3.69k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|  1.94k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|  2.62k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 684, False: 4.96k]
  |  |  ------------------
  |  |   88|  2.82k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 204, False: 5.44k]
  |  |  ------------------
  |  |   89|  3.08k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 259, False: 5.39k]
  |  |  ------------------
  |  |   90|  3.47k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 390, False: 5.26k]
  |  |  ------------------
  |  |   91|  3.69k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 217, False: 5.43k]
  |  |  ------------------
  |  |   92|  3.69k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  3.69k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |   93|  3.69k|    break;                                                                     \
  |  |   94|  3.69k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 5.65k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   95|      0|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 5.65k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   96|     10|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|     10|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 10, False: 5.64k]
  |  |  |  |  ------------------
  |  |  |  |   71|     10|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 9]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      9|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      9|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     18|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 9, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 9, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      9|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      9|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      9|    }                                                                          \
  |  |  |  |   77|      9|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  290|    689|    case BT_S:
  ------------------
  |  Branch (290:5): [True: 689, False: 4.96k]
  ------------------
  291|    768|    case BT_CR:
  ------------------
  |  Branch (291:5): [True: 79, False: 5.57k]
  ------------------
  292|    842|    case BT_LF:
  ------------------
  |  Branch (292:5): [True: 74, False: 5.57k]
  ------------------
  293|    842|      if (! PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
  ------------------
  |  |  697|    842|#define PREFIX(ident) little2_##ident
  ------------------
  |  Branch (293:11): [True: 1, False: 841]
  ------------------
  294|      1|        *nextTokPtr = ptr;
  295|      1|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
  296|      1|      }
  297|    841|      ptr += MINBPC(enc);
  ------------------
  |  |  698|    841|#define MINBPC(enc) 2
  ------------------
  298|  4.45k|      while (HAS_CHAR(enc, ptr, end)) {
  299|  4.45k|        switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  4.45k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  4.45k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  1.77k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 1.77k, False: 2.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  300|    825|          INVALID_CASES(ptr, nextTokPtr)
  ------------------
  |  |   60|      0|    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 0, False: 4.45k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      0|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      0|    }                                                                          \
  |  |  |  |   56|      0|    ptr += n;                                                                  \
  |  |  |  |   57|      0|    break;
  |  |  ------------------
  |  |   61|      0|    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 0, False: 4.45k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      0|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      0|    }                                                                          \
  |  |  |  |   56|      0|    ptr += n;                                                                  \
  |  |  |  |   57|      0|    break;
  |  |  ------------------
  |  |   62|    411|    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    411|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 411, False: 4.04k]
  |  |  |  |  ------------------
  |  |  |  |   50|    411|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 1, False: 410]
  |  |  |  |  ------------------
  |  |  |  |   51|    384|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    410|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|    410|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|    410|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 410, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 26, False: 384]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     26|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     26|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     26|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     26|    }                                                                          \
  |  |  |  |   56|    410|    ptr += n;                                                                  \
  |  |  |  |   57|    384|    break;
  |  |  ------------------
  |  |   63|    384|  case BT_NONXML:                                                              \
  |  |  ------------------
  |  |  |  Branch (63:3): [True: 2, False: 4.45k]
  |  |  ------------------
  |  |   64|      2|  case BT_MALFORM:                                                             \
  |  |  ------------------
  |  |  |  Branch (64:3): [True: 0, False: 4.45k]
  |  |  ------------------
  |  |   65|      9|  case BT_TRAIL:                                                               \
  |  |  ------------------
  |  |  |  Branch (65:3): [True: 7, False: 4.45k]
  |  |  ------------------
  |  |   66|      9|    *(nextTokPtr) = (ptr);                                                     \
  |  |   67|      9|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
  301|  1.17k|        case BT_QUEST:
  ------------------
  |  Branch (301:9): [True: 1.17k, False: 3.27k]
  ------------------
  302|  1.17k|          ptr += MINBPC(enc);
  ------------------
  |  |  698|  1.17k|#define MINBPC(enc) 2
  ------------------
  303|  1.17k|          REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  1.17k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  1.17k|    {                                                                          \
  |  |  |  |  135|  1.17k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  1.17k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|  1.17k|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 8, False: 1.17k]
  |  |  |  |  ------------------
  |  |  |  |  136|      8|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      8|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      8|      }                                                                        \
  |  |  |  |  138|  1.17k|    }
  |  |  ------------------
  ------------------
  304|  1.17k|          if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  702|  1.17k|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|  1.17k|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 880, False: 290]
  |  |  |  |  |  Branch (685:52): [True: 635, False: 245]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|    635|            *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|    635|#define MINBPC(enc) 2
  ------------------
  306|    635|            return tok;
  307|    635|          }
  308|    535|          break;
  309|  2.85k|        default:
  ------------------
  |  Branch (309:9): [True: 2.85k, False: 1.59k]
  ------------------
  310|  2.85k|          ptr += MINBPC(enc);
  ------------------
  |  |  698|  2.85k|#define MINBPC(enc) 2
  ------------------
  311|  2.85k|          break;
  312|  4.45k|        }
  313|  4.45k|      }
  314|    162|      return XML_TOK_PARTIAL;
  ------------------
  |  |   56|    162|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  315|  1.05k|    case BT_QUEST:
  ------------------
  |  Branch (315:5): [True: 1.05k, False: 4.59k]
  ------------------
  316|  1.05k|      if (! PREFIX(checkPiTarget)(enc, target, ptr, &tok)) {
  ------------------
  |  |  697|  1.05k|#define PREFIX(ident) little2_##ident
  ------------------
  |  Branch (316:11): [True: 1, False: 1.05k]
  ------------------
  317|      1|        *nextTokPtr = ptr;
  318|      1|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
  319|      1|      }
  320|  1.05k|      ptr += MINBPC(enc);
  ------------------
  |  |  698|  1.05k|#define MINBPC(enc) 2
  ------------------
  321|  1.05k|      REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  1.05k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  1.05k|    {                                                                          \
  |  |  |  |  135|  1.05k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  1.05k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|  1.05k|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 1.05k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  1.05k|    }
  |  |  ------------------
  ------------------
  322|  1.05k|      if (CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  702|  1.05k|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|  1.05k|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 1.02k, False: 31]
  |  |  |  |  |  Branch (685:52): [True: 1.01k, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  323|  1.01k|        *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|  1.01k|#define MINBPC(enc) 2
  ------------------
  324|  1.01k|        return tok;
  325|  1.01k|      }
  326|     40|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|     40|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  327|     47|    default:
  ------------------
  |  Branch (327:5): [True: 7, False: 5.64k]
  ------------------
  328|     47|      *nextTokPtr = ptr;
  329|     47|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     47|#  define XML_TOK_INVALID 0
  ------------------
  330|  5.65k|    }
  331|  5.65k|  }
  332|      2|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  333|  1.96k|}
xmltok.c:little2_checkPiTarget:
  232|  1.89k|                      int *tokPtr) {
  233|  1.89k|  int upper = 0;
  234|  1.89k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.89k|#    define UNUSED_P(p) (void)p
  ------------------
  235|  1.89k|  *tokPtr = XML_TOK_PI;
  ------------------
  |  |   76|  1.89k|#  define XML_TOK_PI 11       /* processing instruction */
  ------------------
  236|  1.89k|  if (end - ptr != MINBPC(enc) * 3)
  ------------------
  |  |  698|  1.89k|#define MINBPC(enc) 2
  ------------------
  |  Branch (236:7): [True: 1.01k, False: 883]
  ------------------
  237|  1.01k|    return 1;
  238|    883|  switch (BYTE_TO_ASCII(enc, ptr)) {
  ------------------
  |  |  701|    883|#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(p)
  |  |  ------------------
  |  |  |  |  684|    883|#define LITTLE2_BYTE_TO_ASCII(p) ((p)[1] == 0 ? (p)[0] : -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (684:35): [True: 747, False: 136]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  239|    388|  case ASCII_x:
  ------------------
  |  |   88|    388|#define ASCII_x 0x78
  ------------------
  |  Branch (239:3): [True: 388, False: 495]
  ------------------
  240|    388|    break;
  241|    358|  case ASCII_X:
  ------------------
  |  |   61|    358|#define ASCII_X 0x58
  ------------------
  |  Branch (241:3): [True: 358, False: 525]
  ------------------
  242|    358|    upper = 1;
  243|    358|    break;
  244|    137|  default:
  ------------------
  |  Branch (244:3): [True: 137, False: 746]
  ------------------
  245|    137|    return 1;
  246|    883|  }
  247|    746|  ptr += MINBPC(enc);
  ------------------
  |  |  698|    746|#define MINBPC(enc) 2
  ------------------
  248|    746|  switch (BYTE_TO_ASCII(enc, ptr)) {
  ------------------
  |  |  701|    746|#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(p)
  |  |  ------------------
  |  |  |  |  684|    746|#define LITTLE2_BYTE_TO_ASCII(p) ((p)[1] == 0 ? (p)[0] : -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (684:35): [True: 449, False: 297]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  249|    233|  case ASCII_m:
  ------------------
  |  |   77|    233|#define ASCII_m 0x6D
  ------------------
  |  Branch (249:3): [True: 233, False: 513]
  ------------------
  250|    233|    break;
  251|    214|  case ASCII_M:
  ------------------
  |  |   50|    214|#define ASCII_M 0x4D
  ------------------
  |  Branch (251:3): [True: 214, False: 532]
  ------------------
  252|    214|    upper = 1;
  253|    214|    break;
  254|    299|  default:
  ------------------
  |  Branch (254:3): [True: 299, False: 447]
  ------------------
  255|    299|    return 1;
  256|    746|  }
  257|    447|  ptr += MINBPC(enc);
  ------------------
  |  |  698|    447|#define MINBPC(enc) 2
  ------------------
  258|    447|  switch (BYTE_TO_ASCII(enc, ptr)) {
  ------------------
  |  |  701|    447|#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(p)
  |  |  ------------------
  |  |  |  |  684|    447|#define LITTLE2_BYTE_TO_ASCII(p) ((p)[1] == 0 ? (p)[0] : -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (684:35): [True: 157, False: 290]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|     25|  case ASCII_l:
  ------------------
  |  |   76|     25|#define ASCII_l 0x6C
  ------------------
  |  Branch (259:3): [True: 25, False: 422]
  ------------------
  260|     25|    break;
  261|      2|  case ASCII_L:
  ------------------
  |  |   49|      2|#define ASCII_L 0x4C
  ------------------
  |  Branch (261:3): [True: 2, False: 445]
  ------------------
  262|      2|    upper = 1;
  263|      2|    break;
  264|    420|  default:
  ------------------
  |  Branch (264:3): [True: 420, False: 27]
  ------------------
  265|    420|    return 1;
  266|    447|  }
  267|     27|  if (upper)
  ------------------
  |  Branch (267:7): [True: 2, False: 25]
  ------------------
  268|      2|    return 0;
  269|     25|  *tokPtr = XML_TOK_XML_DECL;
  ------------------
  |  |   77|     25|#  define XML_TOK_XML_DECL 12 /* XML decl or text decl */
  ------------------
  270|     25|  return 1;
  271|     27|}
xmltok.c:little2_scanPercent:
  924|     99|                    const char **nextTokPtr) {
  925|     99|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|     99|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|     99|    {                                                                          \
  |  |  |  |  135|     99|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|     99|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|     99|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 98]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|     99|    }
  |  |  ------------------
  ------------------
  926|     98|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|     98|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|     98|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|     12|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 12, False: 86]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  927|    204|    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|     65|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 74, False: 24]
  |  |  ------------------
  |  |  111|     74|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  706|     74|#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  689|     74|  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|     74|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 17, False: 57]
  |  |  ------------------
  |  |  112|     17|      *nextTokPtr = ptr;                                                       \
  |  |  113|     17|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     17|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|     17|    }                                                                          \
  |  |  115|     65|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|     57|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|     60|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 3, False: 95]
  |  |  ------------------
  |  |  117|     65|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 5, False: 93]
  |  |  ------------------
  |  |  118|     65|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|     65|#define MINBPC(enc) 2
  |  |  ------------------
  |  |  119|     65|    break;                                                                     \
  |  |  120|     65|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 98]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  121|      0|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 98]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  122|      7|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      7|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 7, False: 91]
  |  |  |  |  ------------------
  |  |  |  |  100|      7|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      6|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      6|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     12|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 6, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      6|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      6|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      6|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      6|    }                                                                          \
  |  |  |  |  106|      6|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  928|      1|  case BT_S:
  ------------------
  |  Branch (928:3): [True: 1, False: 97]
  ------------------
  929|      2|  case BT_LF:
  ------------------
  |  Branch (929:3): [True: 1, False: 97]
  ------------------
  930|      3|  case BT_CR:
  ------------------
  |  Branch (930:3): [True: 1, False: 97]
  ------------------
  931|      4|  case BT_PERCNT:
  ------------------
  |  Branch (931:3): [True: 1, False: 97]
  ------------------
  932|      4|    *nextTokPtr = ptr;
  933|      4|    return XML_TOK_PERCENT;
  ------------------
  |  |   89|      4|#  define XML_TOK_PERCENT 22
  ------------------
  934|      5|  default:
  ------------------
  |  Branch (934:3): [True: 5, False: 93]
  ------------------
  935|      5|    *nextTokPtr = ptr;
  936|      5|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      5|#  define XML_TOK_INVALID 0
  ------------------
  937|     98|  }
  938|  1.50k|  while (HAS_CHAR(enc, ptr, end)) {
  939|  1.50k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  1.50k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  1.50k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  1.12k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 1.12k, False: 379]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  940|  4.35k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  1.43k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 363, False: 1.13k]
  |  |  ------------------
  |  |   82|  1.43k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  704|    363|#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  687|    363|  UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|    363|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 43, False: 320]
  |  |  ------------------
  |  |   83|     43|      *nextTokPtr = ptr;                                                       \
  |  |   84|     43|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     43|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|     43|    }                                                                          \
  |  |   86|  1.43k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|    320|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|    526|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 206, False: 1.29k]
  |  |  ------------------
  |  |   88|    846|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 320, False: 1.18k]
  |  |  ------------------
  |  |   89|  1.04k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 202, False: 1.29k]
  |  |  ------------------
  |  |   90|  1.24k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 194, False: 1.30k]
  |  |  ------------------
  |  |   91|  1.43k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 195, False: 1.30k]
  |  |  ------------------
  |  |   92|  1.43k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  1.43k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |   93|  1.43k|    break;                                                                     \
  |  |   94|  1.43k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 1.50k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   95|      0|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 1.50k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   96|      7|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|      7|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 7, False: 1.49k]
  |  |  |  |  ------------------
  |  |  |  |   71|      7|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 6]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      6|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      6|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     12|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 6, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      6|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      6|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      6|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      6|    }                                                                          \
  |  |  |  |   77|      6|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  941|      1|    case BT_SEMI:
  ------------------
  |  Branch (941:5): [True: 1, False: 1.49k]
  ------------------
  942|      1|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|      1|#define MINBPC(enc) 2
  ------------------
  943|      1|      return XML_TOK_PARAM_ENTITY_REF;
  ------------------
  |  |   95|      1|#  define XML_TOK_PARAM_ENTITY_REF 28
  ------------------
  944|     12|    default:
  ------------------
  |  Branch (944:5): [True: 12, False: 1.48k]
  ------------------
  945|     12|      *nextTokPtr = ptr;
  946|     12|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     12|#  define XML_TOK_INVALID 0
  ------------------
  947|  1.50k|    }
  948|  1.50k|  }
  949|      2|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  950|     65|}
xmltok.c:little2_scanPoundName:
  954|     97|                      const char **nextTokPtr) {
  955|     97|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|     97|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|     97|    {                                                                          \
  |  |  |  |  135|     97|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|     97|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|     97|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 96]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|     97|    }
  |  |  ------------------
  ------------------
  956|     96|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|     96|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|     96|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|      8|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 8, False: 88]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  957|    239|    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|     83|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 76, False: 20]
  |  |  ------------------
  |  |  111|     83|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  706|     76|#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  689|     76|  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|     76|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 1, False: 75]
  |  |  ------------------
  |  |  112|      1|      *nextTokPtr = ptr;                                                       \
  |  |  113|      1|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      1|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      1|    }                                                                          \
  |  |  115|     83|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|     75|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|     77|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 2, False: 94]
  |  |  ------------------
  |  |  117|     83|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 6, False: 90]
  |  |  ------------------
  |  |  118|     83|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|     83|#define MINBPC(enc) 2
  |  |  ------------------
  |  |  119|     83|    break;                                                                     \
  |  |  120|     83|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 96]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  121|      0|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 96]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  122|      6|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      6|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 6, False: 90]
  |  |  |  |  ------------------
  |  |  |  |  100|      6|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 5]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      5|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      5|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     10|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 5, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 5, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      5|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      5|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      5|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      5|    }                                                                          \
  |  |  |  |  106|      5|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  958|      6|  default:
  ------------------
  |  Branch (958:3): [True: 6, False: 90]
  ------------------
  959|      6|    *nextTokPtr = ptr;
  960|      6|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      6|#  define XML_TOK_INVALID 0
  ------------------
  961|     96|  }
  962|  1.37k|  while (HAS_CHAR(enc, ptr, end)) {
  963|  1.37k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  1.37k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  1.37k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    991|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 991, False: 385]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  964|  3.93k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  1.29k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 367, False: 1.00k]
  |  |  ------------------
  |  |   82|  1.29k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  704|    367|#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  687|    367|  UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|    367|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 53, False: 314]
  |  |  ------------------
  |  |   83|     53|      *nextTokPtr = ptr;                                                       \
  |  |   84|     53|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     53|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|     53|    }                                                                          \
  |  |   86|  1.29k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|    314|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|    513|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 199, False: 1.17k]
  |  |  ------------------
  |  |   88|    709|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 196, False: 1.18k]
  |  |  ------------------
  |  |   89|    906|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 197, False: 1.17k]
  |  |  ------------------
  |  |   90|  1.10k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 194, False: 1.18k]
  |  |  ------------------
  |  |   91|  1.29k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 195, False: 1.18k]
  |  |  ------------------
  |  |   92|  1.29k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  1.29k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |   93|  1.29k|    break;                                                                     \
  |  |   94|  1.29k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 1.37k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   95|      0|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 1.37k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   96|     13|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|     13|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 13, False: 1.36k]
  |  |  |  |  ------------------
  |  |  |  |   71|     13|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 12]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     12|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|     12|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     24|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 12, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 10, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      2|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 2, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|     12|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     12|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     12|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     12|    }                                                                          \
  |  |  |  |   77|     12|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  965|      2|    case BT_CR:
  ------------------
  |  Branch (965:5): [True: 2, False: 1.37k]
  ------------------
  966|      3|    case BT_LF:
  ------------------
  |  Branch (966:5): [True: 1, False: 1.37k]
  ------------------
  967|      4|    case BT_S:
  ------------------
  |  Branch (967:5): [True: 1, False: 1.37k]
  ------------------
  968|      6|    case BT_RPAR:
  ------------------
  |  Branch (968:5): [True: 2, False: 1.37k]
  ------------------
  969|      8|    case BT_GT:
  ------------------
  |  Branch (969:5): [True: 2, False: 1.37k]
  ------------------
  970|      9|    case BT_PERCNT:
  ------------------
  |  Branch (970:5): [True: 1, False: 1.37k]
  ------------------
  971|     10|    case BT_VERBAR:
  ------------------
  |  Branch (971:5): [True: 1, False: 1.37k]
  ------------------
  972|     10|      *nextTokPtr = ptr;
  973|     10|      return XML_TOK_POUND_NAME;
  ------------------
  |  |   87|     10|#  define XML_TOK_POUND_NAME 20 /* #name */
  ------------------
  974|      5|    default:
  ------------------
  |  Branch (974:5): [True: 5, False: 1.37k]
  ------------------
  975|      5|      *nextTokPtr = ptr;
  976|      5|      return XML_TOK_INVALID;
  ------------------
  |  |   57|      5|#  define XML_TOK_INVALID 0
  ------------------
  977|  1.37k|    }
  978|  1.37k|  }
  979|      2|  return -XML_TOK_POUND_NAME;
  ------------------
  |  |   87|      2|#  define XML_TOK_POUND_NAME 20 /* #name */
  ------------------
  980|     83|}
xmltok.c:little2_contentTok:
  824|  13.9k|                   const char **nextTokPtr) {
  825|  13.9k|  if (ptr >= end)
  ------------------
  |  Branch (825:7): [True: 411, False: 13.5k]
  ------------------
  826|    411|    return XML_TOK_NONE;
  ------------------
  |  |   51|    411|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
  827|  13.5k|  if (MINBPC(enc) > 1) {
  ------------------
  |  |  698|  13.5k|#define MINBPC(enc) 2
  ------------------
  |  Branch (827:7): [True: 13.5k, Folded]
  ------------------
  828|  13.5k|    size_t n = end - ptr;
  829|  13.5k|    if (n & (MINBPC(enc) - 1)) {
  ------------------
  |  |  698|  13.5k|#define MINBPC(enc) 2
  ------------------
  |  Branch (829:9): [True: 8.92k, False: 4.60k]
  ------------------
  830|  8.92k|      n &= ~(MINBPC(enc) - 1);
  ------------------
  |  |  698|  8.92k|#define MINBPC(enc) 2
  ------------------
  831|  8.92k|      if (n == 0)
  ------------------
  |  Branch (831:11): [True: 605, False: 8.32k]
  ------------------
  832|    605|        return XML_TOK_PARTIAL;
  ------------------
  |  |   56|    605|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  833|  8.32k|      end = ptr + n;
  834|  8.32k|    }
  835|  13.5k|  }
  836|  12.9k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  12.9k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  12.9k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  10.4k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 10.4k, False: 2.44k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  837|  6.73k|  case BT_LT:
  ------------------
  |  Branch (837:3): [True: 6.73k, False: 6.19k]
  ------------------
  838|  6.73k|    return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|  6.73k|#define PREFIX(ident) little2_##ident
  ------------------
                  return PREFIX(scanLt)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|  6.73k|#define MINBPC(enc) 2
  ------------------
  839|  1.61k|  case BT_AMP:
  ------------------
  |  Branch (839:3): [True: 1.61k, False: 11.3k]
  ------------------
  840|  1.61k|    return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|  1.61k|#define PREFIX(ident) little2_##ident
  ------------------
                  return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|  1.61k|#define MINBPC(enc) 2
  ------------------
  841|  1.06k|  case BT_CR:
  ------------------
  |  Branch (841:3): [True: 1.06k, False: 11.8k]
  ------------------
  842|  1.06k|    ptr += MINBPC(enc);
  ------------------
  |  |  698|  1.06k|#define MINBPC(enc) 2
  ------------------
  843|  1.06k|    if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|  1.06k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  1.06k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|  1.06k|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (843:9): [True: 5, False: 1.05k]
  ------------------
  844|      5|      return XML_TOK_TRAILING_CR;
  ------------------
  |  |   53|      5|    -3                            /* A CR at the end of the scan;              \
  ------------------
  845|  1.05k|    if (BYTE_TYPE(enc, ptr) == BT_LF)
  ------------------
  |  |  700|  1.05k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  1.05k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    564|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 564, False: 493]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (845:9): [True: 67, False: 990]
  ------------------
  846|     67|      ptr += MINBPC(enc);
  ------------------
  |  |  698|     67|#define MINBPC(enc) 2
  ------------------
  847|  1.05k|    *nextTokPtr = ptr;
  848|  1.05k|    return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|  1.05k|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
  849|    616|  case BT_LF:
  ------------------
  |  Branch (849:3): [True: 616, False: 12.3k]
  ------------------
  850|    616|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|    616|#define MINBPC(enc) 2
  ------------------
  851|    616|    return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|    616|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
  852|    321|  case BT_RSQB:
  ------------------
  |  Branch (852:3): [True: 321, False: 12.6k]
  ------------------
  853|    321|    ptr += MINBPC(enc);
  ------------------
  |  |  698|    321|#define MINBPC(enc) 2
  ------------------
  854|    321|    if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|    321|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|    321|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|    321|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (854:9): [True: 4, False: 317]
  ------------------
  855|      4|      return XML_TOK_TRAILING_RSQB;
  ------------------
  |  |   46|      4|    -5 /* ] or ]] at the end of the scan; might be                             \
  ------------------
  856|    317|    if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB))
  ------------------
  |  |  702|    317|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    317|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 240, False: 77]
  |  |  |  |  |  Branch (685:52): [True: 162, False: 78]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  857|    155|      break;
  858|    162|    ptr += MINBPC(enc);
  ------------------
  |  |  698|    162|#define MINBPC(enc) 2
  ------------------
  859|    162|    if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|    162|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|    162|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|    162|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (859:9): [True: 4, False: 158]
  ------------------
  860|      4|      return XML_TOK_TRAILING_RSQB;
  ------------------
  |  |   46|      4|    -5 /* ] or ]] at the end of the scan; might be                             \
  ------------------
  861|    158|    if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  702|    158|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    158|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 79, False: 79]
  |  |  |  |  |  Branch (685:52): [True: 1, False: 78]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  862|    157|      ptr -= MINBPC(enc);
  ------------------
  |  |  698|    157|#define MINBPC(enc) 2
  ------------------
  863|    157|      break;
  864|    157|    }
  865|      1|    *nextTokPtr = ptr;
  866|      1|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
  867|    603|    INVALID_CASES(ptr, nextTokPtr)
  ------------------
  |  |   60|      0|    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 0, False: 12.9k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      0|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      0|    }                                                                          \
  |  |  |  |   56|      0|    ptr += n;                                                                  \
  |  |  |  |   57|      0|    break;
  |  |  ------------------
  |  |   61|      0|    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 0, False: 12.9k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      0|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      0|    }                                                                          \
  |  |  |  |   56|      0|    ptr += n;                                                                  \
  |  |  |  |   57|      0|    break;
  |  |  ------------------
  |  |   62|    300|    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    300|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 300, False: 12.6k]
  |  |  |  |  ------------------
  |  |  |  |   50|    300|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 1, False: 299]
  |  |  |  |  ------------------
  |  |  |  |   51|    251|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    299|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|    299|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|    299|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 299, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 48, False: 251]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     48|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     48|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     48|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     48|    }                                                                          \
  |  |  |  |   56|    299|    ptr += n;                                                                  \
  |  |  |  |   57|    251|    break;
  |  |  ------------------
  |  |   63|    251|  case BT_NONXML:                                                              \
  |  |  ------------------
  |  |  |  Branch (63:3): [True: 2, False: 12.9k]
  |  |  ------------------
  |  |   64|      2|  case BT_MALFORM:                                                             \
  |  |  ------------------
  |  |  |  Branch (64:3): [True: 0, False: 12.9k]
  |  |  ------------------
  |  |   65|     10|  case BT_TRAIL:                                                               \
  |  |  ------------------
  |  |  |  Branch (65:3): [True: 8, False: 12.9k]
  |  |  ------------------
  |  |   66|     10|    *(nextTokPtr) = (ptr);                                                     \
  |  |   67|     10|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
  868|  2.26k|  default:
  ------------------
  |  Branch (868:3): [True: 2.26k, False: 10.6k]
  ------------------
  869|  2.26k|    ptr += MINBPC(enc);
  ------------------
  |  |  698|  2.26k|#define MINBPC(enc) 2
  ------------------
  870|  2.26k|    break;
  871|  12.9k|  }
  872|  12.0k|  while (HAS_CHAR(enc, ptr, end)) {
  873|  12.0k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  12.0k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  12.0k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  4.91k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 4.91k, False: 7.17k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  874|      0|#  define LEAD_CASE(n)                                                         \
  875|      0|  case BT_LEAD##n:                                                             \
  876|      0|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  877|      0|      *nextTokPtr = ptr;                                                       \
  878|      0|      return XML_TOK_DATA_CHARS;                                               \
  879|      0|    }                                                                          \
  880|      0|    ptr += n;                                                                  \
  881|      0|    break;
  882|      0|      LEAD_CASE(2)
  ------------------
  |  |  875|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (875:3): [True: 0, False: 12.0k]
  |  |  ------------------
  |  |  876|      0|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  |  |  ------------------
  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (876:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  877|      0|      *nextTokPtr = ptr;                                                       \
  |  |  878|      0|      return XML_TOK_DATA_CHARS;                                               \
  |  |  ------------------
  |  |  |  |   67|      0|#  define XML_TOK_DATA_CHARS 6
  |  |  ------------------
  |  |  879|      0|    }                                                                          \
  |  |  880|      0|    ptr += n;                                                                  \
  |  |  881|      0|    break;
  ------------------
  883|      0|      LEAD_CASE(3)
  ------------------
  |  |  875|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (875:3): [True: 0, False: 12.0k]
  |  |  ------------------
  |  |  876|      0|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  |  |  ------------------
  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (876:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  877|      0|      *nextTokPtr = ptr;                                                       \
  |  |  878|      0|      return XML_TOK_DATA_CHARS;                                               \
  |  |  ------------------
  |  |  |  |   67|      0|#  define XML_TOK_DATA_CHARS 6
  |  |  ------------------
  |  |  879|      0|    }                                                                          \
  |  |  880|      0|    ptr += n;                                                                  \
  |  |  881|      0|    break;
  ------------------
  884|    439|      LEAD_CASE(4)
  ------------------
  |  |  875|    439|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (875:3): [True: 439, False: 11.6k]
  |  |  ------------------
  |  |  876|    439|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  |  |  ------------------
  |  |  |  |  707|    438|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  694|    438|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (694:4): [True: 438, Folded]
  |  |  |  |  |  |  |  Branch (694:16): [True: 42, False: 396]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (876:9): [True: 1, False: 438]
  |  |  ------------------
  |  |  877|     43|      *nextTokPtr = ptr;                                                       \
  |  |  878|     43|      return XML_TOK_DATA_CHARS;                                               \
  |  |  ------------------
  |  |  |  |   67|     43|#  define XML_TOK_DATA_CHARS 6
  |  |  ------------------
  |  |  879|     43|    }                                                                          \
  |  |  880|    396|    ptr += n;                                                                  \
  |  |  881|    396|    break;
  ------------------
  885|      0|#  undef LEAD_CASE
  886|  1.23k|    case BT_RSQB:
  ------------------
  |  Branch (886:5): [True: 1.23k, False: 10.8k]
  ------------------
  887|  1.23k|      if (HAS_CHARS(enc, ptr, end, 2)) {
  ------------------
  |  |  129|  1.23k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  ------------------
  |  |  |  |  698|  1.23k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |  |  Branch (129:5): [True: 1.23k, False: 4]
  |  |  ------------------
  ------------------
  888|  1.23k|        if (! CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_RSQB)) {
  ------------------
  |  |  702|  1.23k|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|  1.23k|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 723, False: 508]
  |  |  |  |  |  Branch (685:52): [True: 442, False: 281]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  889|    789|          ptr += MINBPC(enc);
  ------------------
  |  |  698|    789|#define MINBPC(enc) 2
  ------------------
  890|    789|          break;
  891|    789|        }
  892|    442|        if (HAS_CHARS(enc, ptr, end, 3)) {
  ------------------
  |  |  129|    442|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  ------------------
  |  |  |  |  698|    442|#define MINBPC(enc) 2
  |  |  ------------------
  |  |  |  Branch (129:5): [True: 438, False: 4]
  |  |  ------------------
  ------------------
  893|    438|          if (! CHAR_MATCHES(enc, ptr + 2 * MINBPC(enc), ASCII_GT)) {
  ------------------
  |  |  702|    438|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    438|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 216, False: 222]
  |  |  |  |  |  Branch (685:52): [True: 1, False: 215]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  894|    437|            ptr += MINBPC(enc);
  ------------------
  |  |  698|    437|#define MINBPC(enc) 2
  ------------------
  895|    437|            break;
  896|    437|          }
  897|      1|          *nextTokPtr = ptr + 2 * MINBPC(enc);
  ------------------
  |  |  698|      1|#define MINBPC(enc) 2
  ------------------
  898|      1|          return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
  899|    438|        }
  900|    442|      }
  901|      8|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|      8|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  902|    371|    case BT_AMP:
  ------------------
  |  Branch (902:5): [True: 363, False: 11.7k]
  ------------------
  903|  1.02k|    case BT_LT:
  ------------------
  |  Branch (903:5): [True: 649, False: 11.4k]
  ------------------
  904|  1.02k|    case BT_NONXML:
  ------------------
  |  Branch (904:5): [True: 2, False: 12.0k]
  ------------------
  905|  1.02k|    case BT_MALFORM:
  ------------------
  |  Branch (905:5): [True: 0, False: 12.0k]
  ------------------
  906|  1.03k|    case BT_TRAIL:
  ------------------
  |  Branch (906:5): [True: 8, False: 12.0k]
  ------------------
  907|  1.79k|    case BT_CR:
  ------------------
  |  Branch (907:5): [True: 769, False: 11.3k]
  ------------------
  908|  2.22k|    case BT_LF:
  ------------------
  |  Branch (908:5): [True: 427, False: 11.6k]
  ------------------
  909|  2.22k|      *nextTokPtr = ptr;
  910|  2.22k|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|  2.22k|#  define XML_TOK_DATA_CHARS 6
  ------------------
  911|  8.19k|    default:
  ------------------
  |  Branch (911:5): [True: 8.19k, False: 3.89k]
  ------------------
  912|  8.19k|      ptr += MINBPC(enc);
  ------------------
  |  |  698|  8.19k|#define MINBPC(enc) 2
  ------------------
  913|  8.19k|      break;
  914|  12.0k|    }
  915|  12.0k|  }
  916|    557|  *nextTokPtr = ptr;
  917|    557|  return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|    557|#  define XML_TOK_DATA_CHARS 6
  ------------------
  918|  2.82k|}
xmltok.c:little2_scanLt:
  726|  6.73k|               const char **nextTokPtr) {
  727|  6.73k|#  ifdef XML_NS
  728|  6.73k|  int hadColon;
  729|  6.73k|#  endif
  730|  6.73k|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  6.73k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  6.73k|    {                                                                          \
  |  |  |  |  135|  6.73k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  6.73k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|  6.73k|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 6.73k]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|  6.73k|    }
  |  |  ------------------
  ------------------
  731|  6.73k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  6.73k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  6.73k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  2.29k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 2.29k, False: 4.43k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  732|  13.6k|    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|  4.98k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 4.42k, False: 2.31k]
  |  |  ------------------
  |  |  111|  4.98k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  706|  4.42k|#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  689|  4.42k|  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|  4.42k|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 17, False: 4.40k]
  |  |  ------------------
  |  |  112|     17|      *nextTokPtr = ptr;                                                       \
  |  |  113|     17|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     17|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|     17|    }                                                                          \
  |  |  115|  4.98k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|  4.40k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|  4.78k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 381, False: 6.35k]
  |  |  ------------------
  |  |  117|  4.98k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 202, False: 6.53k]
  |  |  ------------------
  |  |  118|  4.98k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  4.98k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |  119|  4.98k|    break;                                                                     \
  |  |  120|  4.98k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 6.73k]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  121|      0|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 6.73k]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  122|      9|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      9|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 9, False: 6.72k]
  |  |  |  |  ------------------
  |  |  |  |  100|      9|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 8]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      8|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      8|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     16|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 8, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      8|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      8|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      8|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      8|    }                                                                          \
  |  |  |  |  106|      8|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  733|    426|  case BT_EXCL:
  ------------------
  |  Branch (733:3): [True: 426, False: 6.30k]
  ------------------
  734|    426|    ptr += MINBPC(enc);
  ------------------
  |  |  698|    426|#define MINBPC(enc) 2
  ------------------
  735|    426|    REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    426|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    426|    {                                                                          \
  |  |  |  |  135|    426|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    426|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|    426|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 425]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|    426|    }
  |  |  ------------------
  ------------------
  736|    425|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|    425|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|    425|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    402|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:3): [True: 402, False: 23]
  |  |  |  |  |  Branch (683:4): [True: 402, False: 23]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  737|     68|    case BT_MINUS:
  ------------------
  |  Branch (737:5): [True: 68, False: 357]
  ------------------
  738|     68|      return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|     68|#define PREFIX(ident) little2_##ident
  ------------------
                    return PREFIX(scanComment)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|     68|#define MINBPC(enc) 2
  ------------------
  739|    334|    case BT_LSQB:
  ------------------
  |  Branch (739:5): [True: 334, False: 91]
  ------------------
  740|    334|      return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|    334|#define PREFIX(ident) little2_##ident
  ------------------
                    return PREFIX(scanCdataSection)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|    334|#define MINBPC(enc) 2
  ------------------
  741|    425|    }
  742|     23|    *nextTokPtr = ptr;
  743|     23|    return XML_TOK_INVALID;
  ------------------
  |  |   57|     23|#  define XML_TOK_INVALID 0
  ------------------
  744|    741|  case BT_QUEST:
  ------------------
  |  Branch (744:3): [True: 741, False: 5.99k]
  ------------------
  745|    741|    return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|    741|#define PREFIX(ident) little2_##ident
  ------------------
                  return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|    741|#define MINBPC(enc) 2
  ------------------
  746|    548|  case BT_SOL:
  ------------------
  |  Branch (746:3): [True: 548, False: 6.18k]
  ------------------
  747|    548|    return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|    548|#define PREFIX(ident) little2_##ident
  ------------------
                  return PREFIX(scanEndTag)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|    548|#define MINBPC(enc) 2
  ------------------
  748|      6|  default:
  ------------------
  |  Branch (748:3): [True: 6, False: 6.72k]
  ------------------
  749|      6|    *nextTokPtr = ptr;
  750|      6|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      6|#  define XML_TOK_INVALID 0
  ------------------
  751|  6.73k|  }
  752|  4.98k|#  ifdef XML_NS
  753|  4.98k|  hadColon = 0;
  754|  4.98k|#  endif
  755|       |  /* we have a start-tag */
  756|  10.5k|  while (HAS_CHAR(enc, ptr, end)) {
  757|  10.5k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  10.5k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  10.5k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  6.83k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 6.83k, False: 3.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  758|  26.4k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  5.39k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 3.73k, False: 6.85k]
  |  |  ------------------
  |  |   82|  5.39k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  704|  3.73k|#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  687|  3.73k|  UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|  3.73k|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 55, False: 3.68k]
  |  |  ------------------
  |  |   83|     55|      *nextTokPtr = ptr;                                                       \
  |  |   84|     55|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     55|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|     55|    }                                                                          \
  |  |   86|  5.39k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|  3.68k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|  4.36k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 685, False: 9.90k]
  |  |  ------------------
  |  |   88|  4.61k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 253, False: 10.3k]
  |  |  ------------------
  |  |   89|  4.83k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 218, False: 10.3k]
  |  |  ------------------
  |  |   90|  5.15k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 321, False: 10.2k]
  |  |  ------------------
  |  |   91|  5.39k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 241, False: 10.3k]
  |  |  ------------------
  |  |   92|  5.39k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  5.39k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |   93|  5.39k|    break;                                                                     \
  |  |   94|  5.39k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 10.5k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   95|      0|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 10.5k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   96|     13|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|     13|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 13, False: 10.5k]
  |  |  |  |  ------------------
  |  |  |  |   71|     13|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 12]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     12|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|     12|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     24|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 12, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 12, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|     12|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     12|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     12|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     12|    }                                                                          \
  |  |  |  |   77|     12|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  759|      0|#  ifdef XML_NS
  760|    237|    case BT_COLON:
  ------------------
  |  Branch (760:5): [True: 237, False: 10.3k]
  ------------------
  761|    237|      if (hadColon) {
  ------------------
  |  Branch (761:11): [True: 1, False: 236]
  ------------------
  762|      1|        *nextTokPtr = ptr;
  763|      1|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
  764|      1|      }
  765|    236|      hadColon = 1;
  766|    236|      ptr += MINBPC(enc);
  ------------------
  |  |  698|    236|#define MINBPC(enc) 2
  ------------------
  767|    236|      REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    236|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    236|    {                                                                          \
  |  |  |  |  135|    236|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    236|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|    236|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 235]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|    236|    }
  |  |  ------------------
  ------------------
  768|    235|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|    235|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|    235|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    133|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 133, False: 102]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  769|    329|        CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|    209|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 84, False: 151]
  |  |  ------------------
  |  |  111|    209|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  706|     84|#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  689|     84|  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|     84|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 7, False: 77]
  |  |  ------------------
  |  |  112|      7|      *nextTokPtr = ptr;                                                       \
  |  |  113|      7|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      7|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      7|    }                                                                          \
  |  |  115|    209|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|     77|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|    143|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 66, False: 169]
  |  |  ------------------
  |  |  117|    209|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 66, False: 169]
  |  |  ------------------
  |  |  118|    209|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|    209|#define MINBPC(enc) 2
  |  |  ------------------
  |  |  119|    209|    break;                                                                     \
  |  |  120|    209|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 235]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  121|      0|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 235]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  122|     13|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|     13|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 13, False: 222]
  |  |  |  |  ------------------
  |  |  |  |  100|     13|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 12]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|     12|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|     12|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     24|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 12, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 12, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|     12|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     12|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     12|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     12|    }                                                                          \
  |  |  |  |  106|     12|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  770|      6|      default:
  ------------------
  |  Branch (770:7): [True: 6, False: 229]
  ------------------
  771|      6|        *nextTokPtr = ptr;
  772|      6|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      6|#  define XML_TOK_INVALID 0
  ------------------
  773|    235|      }
  774|    209|      break;
  775|    209|#  endif
  776|  1.45k|    case BT_S:
  ------------------
  |  Branch (776:5): [True: 1.45k, False: 9.13k]
  ------------------
  777|  1.63k|    case BT_CR:
  ------------------
  |  Branch (777:5): [True: 173, False: 10.4k]
  ------------------
  778|  1.74k|    case BT_LF: {
  ------------------
  |  Branch (778:5): [True: 117, False: 10.4k]
  ------------------
  779|  1.74k|      ptr += MINBPC(enc);
  ------------------
  |  |  698|  1.74k|#define MINBPC(enc) 2
  ------------------
  780|  2.60k|      while (HAS_CHAR(enc, ptr, end)) {
  781|  2.60k|        switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  2.60k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  2.60k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  1.31k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 1.31k, False: 1.29k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  782|  3.87k|          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|  1.39k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 1.27k, False: 1.33k]
  |  |  ------------------
  |  |  111|  1.39k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  706|  1.27k|#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  689|  1.27k|  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|  1.27k|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 25, False: 1.25k]
  |  |  ------------------
  |  |  112|     25|      *nextTokPtr = ptr;                                                       \
  |  |  113|     25|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     25|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|     25|    }                                                                          \
  |  |  115|  1.39k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|  1.25k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|  1.32k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 73, False: 2.53k]
  |  |  ------------------
  |  |  117|  1.39k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 68, False: 2.54k]
  |  |  ------------------
  |  |  118|  1.39k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  1.39k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |  119|  1.39k|    break;                                                                     \
  |  |  120|  1.39k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 2.60k]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  121|      0|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 2.60k]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  122|     12|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|     12|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 12, False: 2.59k]
  |  |  |  |  ------------------
  |  |  |  |  100|     12|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 11]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|     11|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|     11|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     22|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 11, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 11, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|     11|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     11|    }                                                                          \
  |  |  |  |  106|     11|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  783|    243|        case BT_GT:
  ------------------
  |  Branch (783:9): [True: 243, False: 2.36k]
  ------------------
  784|    243|          goto gt;
  785|     69|        case BT_SOL:
  ------------------
  |  Branch (785:9): [True: 69, False: 2.54k]
  ------------------
  786|     69|          goto sol;
  787|    363|        case BT_S:
  ------------------
  |  Branch (787:9): [True: 363, False: 2.24k]
  ------------------
  788|    601|        case BT_CR:
  ------------------
  |  Branch (788:9): [True: 238, False: 2.37k]
  ------------------
  789|    862|        case BT_LF:
  ------------------
  |  Branch (789:9): [True: 261, False: 2.34k]
  ------------------
  790|    862|          ptr += MINBPC(enc);
  ------------------
  |  |  698|    862|#define MINBPC(enc) 2
  ------------------
  791|    862|          continue;
  792|      6|        default:
  ------------------
  |  Branch (792:9): [True: 6, False: 2.60k]
  ------------------
  793|      6|          *nextTokPtr = ptr;
  794|      6|          return XML_TOK_INVALID;
  ------------------
  |  |   57|      6|#  define XML_TOK_INVALID 0
  ------------------
  795|  2.60k|        }
  796|  1.39k|        return PREFIX(scanAtts)(enc, ptr, end, nextTokPtr);
  ------------------
  |  |  697|  1.39k|#define PREFIX(ident) little2_##ident
  ------------------
  797|  2.60k|      }
  798|      2|      return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  799|  1.74k|    }
  800|  2.58k|    case BT_GT:
  ------------------
  |  Branch (800:5): [True: 2.58k, False: 8.00k]
  ------------------
  801|  2.82k|    gt:
  802|  2.82k|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|  2.82k|#define MINBPC(enc) 2
  ------------------
  803|  2.82k|      return XML_TOK_START_TAG_NO_ATTS;
  ------------------
  |  |   63|  2.82k|#  define XML_TOK_START_TAG_NO_ATTS 2
  ------------------
  804|    546|    case BT_SOL:
  ------------------
  |  Branch (804:5): [True: 546, False: 10.0k]
  ------------------
  805|    615|    sol:
  806|    615|      ptr += MINBPC(enc);
  ------------------
  |  |  698|    615|#define MINBPC(enc) 2
  ------------------
  807|    615|      REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    615|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    615|    {                                                                          \
  |  |  |  |  135|    615|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    615|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|    615|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 614]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|    615|    }
  |  |  ------------------
  ------------------
  808|    614|      if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  702|    614|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    614|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 602, False: 12]
  |  |  |  |  |  Branch (685:52): [True: 594, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  809|     20|        *nextTokPtr = ptr;
  810|     20|        return XML_TOK_INVALID;
  ------------------
  |  |   57|     20|#  define XML_TOK_INVALID 0
  ------------------
  811|     20|      }
  812|    594|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|    594|#define MINBPC(enc) 2
  ------------------
  813|    594|      return XML_TOK_EMPTY_ELEMENT_NO_ATTS;
  ------------------
  |  |   65|    594|#  define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4
  ------------------
  814|      8|    default:
  ------------------
  |  Branch (814:5): [True: 8, False: 10.5k]
  ------------------
  815|      8|      *nextTokPtr = ptr;
  816|      8|      return XML_TOK_INVALID;
  ------------------
  |  |   57|      8|#  define XML_TOK_INVALID 0
  ------------------
  817|  10.5k|    }
  818|  10.5k|  }
  819|      4|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      4|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  820|  4.98k|}
xmltok.c:little2_scanCdataSection:
  337|    334|                         const char **nextTokPtr) {
  338|    334|  static const char CDATA_LSQB[]
  339|    334|      = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
  ------------------
  |  |   40|    334|#define ASCII_C 0x43
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
  ------------------
  |  |   41|    334|#define ASCII_D 0x44
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
  ------------------
  |  |   38|    334|#define ASCII_A 0x41
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
  ------------------
  |  |   57|    334|#define ASCII_T 0x54
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
  ------------------
  |  |   38|    334|#define ASCII_A 0x41
  ------------------
                    = {ASCII_C, ASCII_D, ASCII_A, ASCII_T, ASCII_A, ASCII_LSQB};
  ------------------
  |  |  116|    334|#define ASCII_LSQB 0x5B
  ------------------
  340|    334|  int i;
  341|    334|  UNUSED_P(enc);
  ------------------
  |  |  101|    334|#    define UNUSED_P(p) (void)p
  ------------------
  342|       |  /* CDATA[ */
  343|    334|  REQUIRE_CHARS(enc, ptr, end, 6);
  ------------------
  |  |  134|    334|    {                                                                          \
  |  |  135|    334|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  ------------------
  |  |  |  |  129|    334|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|    334|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (135:11): [True: 4, False: 330]
  |  |  ------------------
  |  |  136|      4|        return XML_TOK_PARTIAL;                                                \
  |  |  ------------------
  |  |  |  |   56|      4|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  ------------------
  |  |  137|      4|      }                                                                        \
  |  |  138|    334|    }
  ------------------
  344|  2.22k|  for (i = 0; i < 6; i++, ptr += MINBPC(enc)) {
  ------------------
  |  |  698|  1.89k|#define MINBPC(enc) 2
  ------------------
  |  Branch (344:15): [True: 1.91k, False: 313]
  ------------------
  345|  1.91k|    if (! CHAR_MATCHES(enc, ptr, CDATA_LSQB[i])) {
  ------------------
  |  |  702|  1.91k|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|  1.91k|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 1.90k, False: 8]
  |  |  |  |  |  Branch (685:52): [True: 1.89k, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  346|     17|      *nextTokPtr = ptr;
  347|     17|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     17|#  define XML_TOK_INVALID 0
  ------------------
  348|     17|    }
  349|  1.91k|  }
  350|    313|  *nextTokPtr = ptr;
  351|    313|  return XML_TOK_CDATA_SECT_OPEN;
  ------------------
  |  |   69|    313|#  define XML_TOK_CDATA_SECT_OPEN 8
  ------------------
  352|    330|}
xmltok.c:little2_scanEndTag:
  432|    548|                   const char **nextTokPtr) {
  433|    548|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    548|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    548|    {                                                                          \
  |  |  |  |  135|    548|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    548|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|    548|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 547]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|    548|    }
  |  |  ------------------
  ------------------
  434|    547|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|    547|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|    547|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    197|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 197, False: 350]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  435|  1.07k|    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|    522|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 337, False: 210]
  |  |  ------------------
  |  |  111|    522|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  706|    337|#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  689|    337|  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|    337|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 12, False: 325]
  |  |  ------------------
  |  |  112|     12|      *nextTokPtr = ptr;                                                       \
  |  |  113|     12|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     12|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|     12|    }                                                                          \
  |  |  115|    522|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|    325|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|    396|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 71, False: 476]
  |  |  ------------------
  |  |  117|    522|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 126, False: 421]
  |  |  ------------------
  |  |  118|    522|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|    522|#define MINBPC(enc) 2
  |  |  ------------------
  |  |  119|    522|    break;                                                                     \
  |  |  120|    522|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 547]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  121|      0|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 547]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  122|      8|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      8|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 8, False: 539]
  |  |  |  |  ------------------
  |  |  |  |  100|      8|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 7]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      7|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      7|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     14|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 7, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 7, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      7|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      7|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      7|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      7|    }                                                                          \
  |  |  |  |  106|      7|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  436|      5|  default:
  ------------------
  |  Branch (436:3): [True: 5, False: 542]
  ------------------
  437|      5|    *nextTokPtr = ptr;
  438|      5|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      5|#  define XML_TOK_INVALID 0
  ------------------
  439|    547|  }
  440|  2.07k|  while (HAS_CHAR(enc, ptr, end)) {
  441|  2.07k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  2.07k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  2.07k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  1.62k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 1.62k, False: 449]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  442|  4.23k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  1.35k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 434, False: 1.63k]
  |  |  ------------------
  |  |   82|  1.35k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  704|    434|#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  687|    434|  UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|    434|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 77, False: 357]
  |  |  ------------------
  |  |   83|     77|      *nextTokPtr = ptr;                                                       \
  |  |   84|     77|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     77|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|     77|    }                                                                          \
  |  |   86|  1.35k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|    357|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|    556|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 199, False: 1.87k]
  |  |  ------------------
  |  |   88|    756|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 200, False: 1.87k]
  |  |  ------------------
  |  |   89|    952|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 196, False: 1.87k]
  |  |  ------------------
  |  |   90|  1.16k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 211, False: 1.86k]
  |  |  ------------------
  |  |   91|  1.35k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 196, False: 1.87k]
  |  |  ------------------
  |  |   92|  1.35k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  1.35k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |   93|  1.35k|    break;                                                                     \
  |  |   94|  1.35k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 2.07k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   95|      0|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 2.07k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   96|      9|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|      9|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 9, False: 2.06k]
  |  |  |  |  ------------------
  |  |  |  |   71|      9|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 8]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      8|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      8|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     16|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 8, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      8|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      8|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      8|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      8|    }                                                                          \
  |  |  |  |   77|      8|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  443|    125|    case BT_S:
  ------------------
  |  Branch (443:5): [True: 125, False: 1.94k]
  ------------------
  444|    194|    case BT_CR:
  ------------------
  |  Branch (444:5): [True: 69, False: 2.00k]
  ------------------
  445|    276|    case BT_LF:
  ------------------
  |  Branch (445:5): [True: 82, False: 1.99k]
  ------------------
  446|    898|      for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  698|    276|#define MINBPC(enc) 2
  ------------------
                    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  698|    624|#define MINBPC(enc) 2
  ------------------
  447|    898|        switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|    898|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|    898|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    859|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 859, False: 39]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  448|    225|        case BT_S:
  ------------------
  |  Branch (448:9): [True: 225, False: 673]
  ------------------
  449|    427|        case BT_CR:
  ------------------
  |  Branch (449:9): [True: 202, False: 696]
  ------------------
  450|    624|        case BT_LF:
  ------------------
  |  Branch (450:9): [True: 197, False: 701]
  ------------------
  451|    624|          break;
  452|    235|        case BT_GT:
  ------------------
  |  Branch (452:9): [True: 235, False: 663]
  ------------------
  453|    235|          *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|    235|#define MINBPC(enc) 2
  ------------------
  454|    235|          return XML_TOK_END_TAG;
  ------------------
  |  |   66|    235|#  define XML_TOK_END_TAG 5
  ------------------
  455|     39|        default:
  ------------------
  |  Branch (455:9): [True: 39, False: 859]
  ------------------
  456|     39|          *nextTokPtr = ptr;
  457|     39|          return XML_TOK_INVALID;
  ------------------
  |  |   57|     39|#  define XML_TOK_INVALID 0
  ------------------
  458|    898|        }
  459|    898|      }
  460|      2|      return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  461|      0|#  ifdef XML_NS
  462|    194|    case BT_COLON:
  ------------------
  |  Branch (462:5): [True: 194, False: 1.87k]
  ------------------
  463|       |      /* no need to check qname syntax here,
  464|       |         since end-tag must match exactly */
  465|    194|      ptr += MINBPC(enc);
  ------------------
  |  |  698|    194|#define MINBPC(enc) 2
  ------------------
  466|    194|      break;
  467|      0|#  endif
  468|    152|    case BT_GT:
  ------------------
  |  Branch (468:5): [True: 152, False: 1.92k]
  ------------------
  469|    152|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|    152|#define MINBPC(enc) 2
  ------------------
  470|    152|      return XML_TOK_END_TAG;
  ------------------
  |  |   66|    152|#  define XML_TOK_END_TAG 5
  ------------------
  471|      6|    default:
  ------------------
  |  Branch (471:5): [True: 6, False: 2.06k]
  ------------------
  472|      6|      *nextTokPtr = ptr;
  473|      6|      return XML_TOK_INVALID;
  ------------------
  |  |   57|      6|#  define XML_TOK_INVALID 0
  ------------------
  474|  2.07k|    }
  475|  2.07k|  }
  476|      2|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  477|    522|}
xmltok.c:little2_scanAtts:
  573|  1.39k|                 const char **nextTokPtr) {
  574|  1.39k|#  ifdef XML_NS
  575|  1.39k|  int hadColon = 0;
  576|  1.39k|#  endif
  577|  5.68k|  while (HAS_CHAR(enc, ptr, end)) {
  578|  5.68k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  5.68k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  5.68k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  4.54k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 4.54k, False: 1.14k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  579|  8.35k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  2.03k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 1.13k, False: 4.55k]
  |  |  ------------------
  |  |   82|  2.03k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  704|  1.13k|#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  687|  1.13k|  UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|  1.13k|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 90, False: 1.04k]
  |  |  ------------------
  |  |   83|     90|      *nextTokPtr = ptr;                                                       \
  |  |   84|     90|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     90|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|     90|    }                                                                          \
  |  |   86|  2.03k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|  1.04k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|  1.24k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 209, False: 5.47k]
  |  |  ------------------
  |  |   88|  1.44k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 196, False: 5.49k]
  |  |  ------------------
  |  |   89|  1.64k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 197, False: 5.48k]
  |  |  ------------------
  |  |   90|  1.83k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 195, False: 5.49k]
  |  |  ------------------
  |  |   91|  2.03k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 197, False: 5.48k]
  |  |  ------------------
  |  |   92|  2.03k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  2.03k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |   93|  2.03k|    break;                                                                     \
  |  |   94|  2.03k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 5.68k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   95|      0|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 5.68k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   96|      6|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|      6|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 6, False: 5.68k]
  |  |  |  |  ------------------
  |  |  |  |   71|      6|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 5]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      5|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      5|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     10|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 5, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 5, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      5|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      5|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      5|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      5|    }                                                                          \
  |  |  |  |   77|      5|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  580|      0|#  ifdef XML_NS
  581|    203|    case BT_COLON:
  ------------------
  |  Branch (581:5): [True: 203, False: 5.48k]
  ------------------
  582|    203|      if (hadColon) {
  ------------------
  |  Branch (582:11): [True: 1, False: 202]
  ------------------
  583|      1|        *nextTokPtr = ptr;
  584|      1|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
  585|      1|      }
  586|    202|      hadColon = 1;
  587|    202|      ptr += MINBPC(enc);
  ------------------
  |  |  698|    202|#define MINBPC(enc) 2
  ------------------
  588|    202|      REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    202|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    202|    {                                                                          \
  |  |  |  |  135|    202|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    202|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|    202|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 201]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|    202|    }
  |  |  ------------------
  ------------------
  589|    201|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|    201|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|    201|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    103|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 103, False: 98]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  590|    286|        CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|    178|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 84, False: 117]
  |  |  ------------------
  |  |  111|    178|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  706|     84|#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  689|     84|  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|     84|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 9, False: 75]
  |  |  ------------------
  |  |  112|      9|      *nextTokPtr = ptr;                                                       \
  |  |  113|      9|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      9|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|      9|    }                                                                          \
  |  |  115|    178|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|     75|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|    110|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 35, False: 166]
  |  |  ------------------
  |  |  117|    178|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 68, False: 133]
  |  |  ------------------
  |  |  118|    178|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|    178|#define MINBPC(enc) 2
  |  |  ------------------
  |  |  119|    178|    break;                                                                     \
  |  |  120|    178|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 201]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  121|      0|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 201]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  122|      9|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      9|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 9, False: 192]
  |  |  |  |  ------------------
  |  |  |  |  100|      9|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 8]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      8|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      8|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     16|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 8, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      8|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      8|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      8|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      8|    }                                                                          \
  |  |  |  |  106|      8|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  591|      5|      default:
  ------------------
  |  Branch (591:7): [True: 5, False: 196]
  ------------------
  592|      5|        *nextTokPtr = ptr;
  593|      5|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      5|#  define XML_TOK_INVALID 0
  ------------------
  594|    201|      }
  595|    178|      break;
  596|    178|#  endif
  597|    178|    case BT_S:
  ------------------
  |  Branch (597:5): [True: 106, False: 5.58k]
  ------------------
  598|    186|    case BT_CR:
  ------------------
  |  Branch (598:5): [True: 80, False: 5.60k]
  ------------------
  599|    264|    case BT_LF:
  ------------------
  |  Branch (599:5): [True: 78, False: 5.60k]
  ------------------
  600|    891|      for (;;) {
  601|    891|        int t;
  602|       |
  603|    891|        ptr += MINBPC(enc);
  ------------------
  |  |  698|    891|#define MINBPC(enc) 2
  ------------------
  604|    891|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    891|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    891|    {                                                                          \
  |  |  |  |  135|    891|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    891|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|    891|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 2, False: 889]
  |  |  |  |  ------------------
  |  |  |  |  136|      2|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      2|      }                                                                        \
  |  |  |  |  138|    891|    }
  |  |  ------------------
  ------------------
  605|    889|        t = BYTE_TYPE(enc, ptr);
  ------------------
  |  |  700|    889|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|    889|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    841|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 841, False: 48]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  606|    889|        if (t == BT_EQUALS)
  ------------------
  |  Branch (606:13): [True: 211, False: 678]
  ------------------
  607|    211|          break;
  608|    678|        switch (t) {
  609|    227|        case BT_S:
  ------------------
  |  Branch (609:9): [True: 227, False: 451]
  ------------------
  610|    431|        case BT_LF:
  ------------------
  |  Branch (610:9): [True: 204, False: 474]
  ------------------
  611|    627|        case BT_CR:
  ------------------
  |  Branch (611:9): [True: 196, False: 482]
  ------------------
  612|    627|          break;
  613|     51|        default:
  ------------------
  |  Branch (613:9): [True: 51, False: 627]
  ------------------
  614|     51|          *nextTokPtr = ptr;
  615|     51|          return XML_TOK_INVALID;
  ------------------
  |  |   57|     51|#  define XML_TOK_INVALID 0
  ------------------
  616|    678|        }
  617|    678|      }
  618|    211|      EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|    211|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
  619|  3.28k|    case BT_EQUALS: {
  ------------------
  |  Branch (619:5): [True: 3.07k, False: 2.60k]
  ------------------
  620|  3.28k|      int open;
  621|  3.28k|#  ifdef XML_NS
  622|  3.28k|      hadColon = 0;
  623|  3.28k|#  endif
  624|  3.92k|      for (;;) {
  625|  3.92k|        ptr += MINBPC(enc);
  ------------------
  |  |  698|  3.92k|#define MINBPC(enc) 2
  ------------------
  626|  3.92k|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  3.92k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  3.92k|    {                                                                          \
  |  |  |  |  135|  3.92k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  3.92k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|  3.92k|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 2, False: 3.92k]
  |  |  |  |  ------------------
  |  |  |  |  136|      2|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      2|      }                                                                        \
  |  |  |  |  138|  3.92k|    }
  |  |  ------------------
  ------------------
  627|  3.92k|        open = BYTE_TYPE(enc, ptr);
  ------------------
  |  |  700|  3.92k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  3.92k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  3.89k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 3.89k, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  628|  3.92k|        if (open == BT_QUOT || open == BT_APOS)
  ------------------
  |  Branch (628:13): [True: 1.32k, False: 2.60k]
  |  Branch (628:32): [True: 1.92k, False: 674]
  ------------------
  629|  3.25k|          break;
  630|    674|        switch (open) {
  631|    230|        case BT_S:
  ------------------
  |  Branch (631:9): [True: 230, False: 444]
  ------------------
  632|    436|        case BT_LF:
  ------------------
  |  Branch (632:9): [True: 206, False: 468]
  ------------------
  633|    638|        case BT_CR:
  ------------------
  |  Branch (633:9): [True: 202, False: 472]
  ------------------
  634|    638|          break;
  635|     36|        default:
  ------------------
  |  Branch (635:9): [True: 36, False: 638]
  ------------------
  636|     36|          *nextTokPtr = ptr;
  637|     36|          return XML_TOK_INVALID;
  ------------------
  |  |   57|     36|#  define XML_TOK_INVALID 0
  ------------------
  638|    674|        }
  639|    674|      }
  640|  3.25k|      ptr += MINBPC(enc);
  ------------------
  |  |  698|  3.25k|#define MINBPC(enc) 2
  ------------------
  641|       |      /* in attribute value */
  642|  22.2k|      for (;;) {
  643|  22.2k|        int t;
  644|  22.2k|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  22.2k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  22.2k|    {                                                                          \
  |  |  |  |  135|  22.2k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  22.2k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|  22.2k|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 45, False: 22.1k]
  |  |  |  |  ------------------
  |  |  |  |  136|     45|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     45|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|     45|      }                                                                        \
  |  |  |  |  138|  22.2k|    }
  |  |  ------------------
  ------------------
  645|  22.1k|        t = BYTE_TYPE(enc, ptr);
  ------------------
  |  |  700|  22.1k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  22.1k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  9.61k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 9.61k, False: 12.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  646|  22.1k|        if (t == open)
  ------------------
  |  Branch (646:13): [True: 3.16k, False: 19.0k]
  ------------------
  647|  3.16k|          break;
  648|  19.0k|        switch (t) {
  649|  2.96k|          INVALID_CASES(ptr, nextTokPtr)
  ------------------
  |  |   60|      0|    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 0, False: 19.0k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      0|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      0|    }                                                                          \
  |  |  |  |   56|      0|    ptr += n;                                                                  \
  |  |  |  |   57|      0|    break;
  |  |  ------------------
  |  |   61|      0|    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 0, False: 19.0k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      0|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      0|    }                                                                          \
  |  |  |  |   56|      0|    ptr += n;                                                                  \
  |  |  |  |   57|      0|    break;
  |  |  ------------------
  |  |   62|  1.48k|    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|  1.48k|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 1.48k, False: 17.5k]
  |  |  |  |  ------------------
  |  |  |  |   50|  1.48k|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 1, False: 1.47k]
  |  |  |  |  ------------------
  |  |  |  |   51|  1.45k|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|  1.47k|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|  1.47k|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|  1.47k|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 1.47k, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 28, False: 1.45k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     28|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     28|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     28|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     28|    }                                                                          \
  |  |  |  |   56|  1.47k|    ptr += n;                                                                  \
  |  |  |  |   57|  1.45k|    break;
  |  |  ------------------
  |  |   63|  1.45k|  case BT_NONXML:                                                              \
  |  |  ------------------
  |  |  |  Branch (63:3): [True: 1, False: 19.0k]
  |  |  ------------------
  |  |   64|      1|  case BT_MALFORM:                                                             \
  |  |  ------------------
  |  |  |  Branch (64:3): [True: 0, False: 19.0k]
  |  |  ------------------
  |  |   65|      5|  case BT_TRAIL:                                                               \
  |  |  ------------------
  |  |  |  Branch (65:3): [True: 4, False: 19.0k]
  |  |  ------------------
  |  |   66|      5|    *(nextTokPtr) = (ptr);                                                     \
  |  |   67|      5|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      5|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
  650|    568|        case BT_AMP: {
  ------------------
  |  Branch (650:9): [True: 568, False: 18.4k]
  ------------------
  651|    568|          int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr);
  ------------------
  |  |  697|    568|#define PREFIX(ident) little2_##ident
  ------------------
                        int tok = PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, &ptr);
  ------------------
  |  |  698|    568|#define MINBPC(enc) 2
  ------------------
  652|    568|          if (tok <= 0) {
  ------------------
  |  Branch (652:15): [True: 9, False: 559]
  ------------------
  653|      9|            if (tok == XML_TOK_INVALID)
  ------------------
  |  |   57|      9|#  define XML_TOK_INVALID 0
  ------------------
  |  Branch (653:17): [True: 7, False: 2]
  ------------------
  654|      7|              *nextTokPtr = ptr;
  655|      9|            return tok;
  656|      9|          }
  657|    559|          break;
  658|    568|        }
  659|    559|        case BT_LT:
  ------------------
  |  Branch (659:9): [True: 1, False: 19.0k]
  ------------------
  660|      1|          *nextTokPtr = ptr;
  661|      1|          return XML_TOK_INVALID;
  ------------------
  |  |   57|      1|#  define XML_TOK_INVALID 0
  ------------------
  662|  16.9k|        default:
  ------------------
  |  Branch (662:9): [True: 16.9k, False: 2.05k]
  ------------------
  663|  16.9k|          ptr += MINBPC(enc);
  ------------------
  |  |  698|  16.9k|#define MINBPC(enc) 2
  ------------------
  664|  16.9k|          break;
  665|  19.0k|        }
  666|  19.0k|      }
  667|  3.16k|      ptr += MINBPC(enc);
  ------------------
  |  |  698|  3.16k|#define MINBPC(enc) 2
  ------------------
  668|  3.16k|      REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  3.16k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  3.16k|    {                                                                          \
  |  |  |  |  135|  3.16k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  3.16k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|  3.16k|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 8, False: 3.15k]
  |  |  |  |  ------------------
  |  |  |  |  136|      8|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      8|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      8|      }                                                                        \
  |  |  |  |  138|  3.16k|    }
  |  |  ------------------
  ------------------
  669|  3.15k|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  3.15k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  3.15k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  3.12k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 3.12k, False: 27]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  670|  2.12k|      case BT_S:
  ------------------
  |  Branch (670:7): [True: 2.12k, False: 1.02k]
  ------------------
  671|  2.21k|      case BT_CR:
  ------------------
  |  Branch (671:7): [True: 85, False: 3.06k]
  ------------------
  672|  2.31k|      case BT_LF:
  ------------------
  |  Branch (672:7): [True: 101, False: 3.05k]
  ------------------
  673|  2.31k|        break;
  674|     90|      case BT_SOL:
  ------------------
  |  Branch (674:7): [True: 90, False: 3.06k]
  ------------------
  675|     90|        goto sol;
  676|    725|      case BT_GT:
  ------------------
  |  Branch (676:7): [True: 725, False: 2.42k]
  ------------------
  677|    725|        goto gt;
  678|     27|      default:
  ------------------
  |  Branch (678:7): [True: 27, False: 3.12k]
  ------------------
  679|     27|        *nextTokPtr = ptr;
  680|     27|        return XML_TOK_INVALID;
  ------------------
  |  |   57|     27|#  define XML_TOK_INVALID 0
  ------------------
  681|  3.15k|      }
  682|       |      /* ptr points to closing quote */
  683|  2.87k|      for (;;) {
  684|  2.87k|        ptr += MINBPC(enc);
  ------------------
  |  |  698|  2.87k|#define MINBPC(enc) 2
  ------------------
  685|  2.87k|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  2.87k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  2.87k|    {                                                                          \
  |  |  |  |  135|  2.87k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  2.87k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|  2.87k|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 4, False: 2.87k]
  |  |  |  |  ------------------
  |  |  |  |  136|      4|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      4|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      4|      }                                                                        \
  |  |  |  |  138|  2.87k|    }
  |  |  ------------------
  ------------------
  686|  2.87k|        switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  2.87k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  2.87k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    879|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 879, False: 1.99k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  687|  5.96k|          CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|  2.08k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 1.97k, False: 899]
  |  |  ------------------
  |  |  111|  2.08k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  706|  1.97k|#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  689|  1.97k|  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|  1.97k|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 23, False: 1.94k]
  |  |  ------------------
  |  |  112|     23|      *nextTokPtr = ptr;                                                       \
  |  |  113|     23|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     23|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|     23|    }                                                                          \
  |  |  115|  2.08k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|  1.94k|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|  2.01k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 71, False: 2.79k]
  |  |  ------------------
  |  |  117|  2.08k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 67, False: 2.80k]
  |  |  ------------------
  |  |  118|  2.08k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  2.08k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |  119|  2.08k|    break;                                                                     \
  |  |  120|  2.08k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 2.87k]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  121|      0|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 2.87k]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  122|     12|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|     12|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 12, False: 2.85k]
  |  |  |  |  ------------------
  |  |  |  |  100|     12|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 1, False: 11]
  |  |  |  |  ------------------
  |  |  |  |  101|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|     11|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|     11|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     22|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 11, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 11, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|     11|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|     11|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|     11|    }                                                                          \
  |  |  |  |  106|     11|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  688|    269|        case BT_S:
  ------------------
  |  Branch (688:9): [True: 269, False: 2.60k]
  ------------------
  689|    483|        case BT_CR:
  ------------------
  |  Branch (689:9): [True: 214, False: 2.65k]
  ------------------
  690|    562|        case BT_LF:
  ------------------
  |  Branch (690:9): [True: 79, False: 2.79k]
  ------------------
  691|    562|          continue;
  692|    112|        case BT_GT:
  ------------------
  |  Branch (692:9): [True: 112, False: 2.75k]
  ------------------
  693|    837|        gt:
  694|    837|          *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|    837|#define MINBPC(enc) 2
  ------------------
  695|    837|          return XML_TOK_START_TAG_WITH_ATTS;
  ------------------
  |  |   62|    837|#  define XML_TOK_START_TAG_WITH_ATTS 1
  ------------------
  696|     67|        case BT_SOL:
  ------------------
  |  Branch (696:9): [True: 67, False: 2.80k]
  ------------------
  697|    157|        sol:
  698|    157|          ptr += MINBPC(enc);
  ------------------
  |  |  698|    157|#define MINBPC(enc) 2
  ------------------
  699|    157|          REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    157|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    157|    {                                                                          \
  |  |  |  |  135|    157|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    157|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|    157|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 1, False: 156]
  |  |  |  |  ------------------
  |  |  |  |  136|      1|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      1|      }                                                                        \
  |  |  |  |  138|    157|    }
  |  |  ------------------
  ------------------
  700|    156|          if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  702|    156|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    156|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 154, False: 2]
  |  |  |  |  |  Branch (685:52): [True: 153, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  701|      3|            *nextTokPtr = ptr;
  702|      3|            return XML_TOK_INVALID;
  ------------------
  |  |   57|      3|#  define XML_TOK_INVALID 0
  ------------------
  703|      3|          }
  704|    153|          *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|    153|#define MINBPC(enc) 2
  ------------------
  705|    153|          return XML_TOK_EMPTY_ELEMENT_WITH_ATTS;
  ------------------
  |  |   64|    153|#  define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag <e/> */
  ------------------
  706|      8|        default:
  ------------------
  |  Branch (706:9): [True: 8, False: 2.86k]
  ------------------
  707|      8|          *nextTokPtr = ptr;
  708|      8|          return XML_TOK_INVALID;
  ------------------
  |  |   57|      8|#  define XML_TOK_INVALID 0
  ------------------
  709|  2.87k|        }
  710|  2.08k|        break;
  711|  2.87k|      }
  712|  2.08k|      break;
  713|  2.31k|    }
  714|  2.08k|    default:
  ------------------
  |  Branch (714:5): [True: 11, False: 5.67k]
  ------------------
  715|     11|      *nextTokPtr = ptr;
  716|     11|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     11|#  define XML_TOK_INVALID 0
  ------------------
  717|  5.68k|    }
  718|  5.68k|  }
  719|      4|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      4|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  720|  1.39k|}
xmltok.c:little2_scanRef:
  545|  2.55k|                const char **nextTokPtr) {
  546|  2.55k|  REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  2.55k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  2.55k|    {                                                                          \
  |  |  |  |  135|  2.55k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  2.55k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|  2.55k|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 2, False: 2.55k]
  |  |  |  |  ------------------
  |  |  |  |  136|      2|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      2|      }                                                                        \
  |  |  |  |  138|  2.55k|    }
  |  |  ------------------
  ------------------
  547|  2.55k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  2.55k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  2.55k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  2.20k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 2.20k, False: 347]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  548|  1.45k|    CHECK_NMSTRT_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |  110|  1.10k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (110:3): [True: 335, False: 2.22k]
  |  |  ------------------
  |  |  111|  1.10k|    if (! IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {                                   \
  |  |  ------------------
  |  |  |  |  706|    335|#define IS_NMSTRT_CHAR_MINBPC(enc, p) LITTLE2_IS_NMSTRT_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  689|    335|  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|    335|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (111:9): [True: 18, False: 317]
  |  |  ------------------
  |  |  112|     18|      *nextTokPtr = ptr;                                                       \
  |  |  113|     18|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     18|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |  114|     18|    }                                                                          \
  |  |  115|  1.10k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|    317|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |  116|    789|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (116:3): [True: 472, False: 2.08k]
  |  |  ------------------
  |  |  117|  1.10k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (117:3): [True: 319, False: 2.23k]
  |  |  ------------------
  |  |  118|  1.10k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  1.10k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |  119|  1.10k|    break;                                                                     \
  |  |  120|  1.10k|    CHECK_NMSTRT_CASE(2, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 2.55k]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  121|      0|    CHECK_NMSTRT_CASE(3, enc, ptr, end, nextTokPtr)                            \
  |  |  ------------------
  |  |  |  |   99|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 0, False: 2.55k]
  |  |  |  |  ------------------
  |  |  |  |  100|      0|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  101|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      0|    }                                                                          \
  |  |  |  |  106|      0|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  |  |  122|      7|    CHECK_NMSTRT_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   99|      7|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (99:3): [True: 7, False: 2.54k]
  |  |  |  |  ------------------
  |  |  |  |  100|      7|    if ((end) - (ptr) < (n))                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (100:9): [True: 2, False: 5]
  |  |  |  |  ------------------
  |  |  |  |  101|      2|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      2|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |  102|      5|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      5|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     10|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 5, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 5, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) {       \
  |  |  |  |  ------------------
  |  |  |  |  |  |  705|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (102:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  103|      5|      *nextTokPtr = ptr;                                                       \
  |  |  |  |  104|      5|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      5|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |  105|      5|    }                                                                          \
  |  |  |  |  106|      5|    ptr += n;                                                                  \
  |  |  |  |  107|      0|    break;
  |  |  ------------------
  ------------------
  549|  1.41k|  case BT_NUM:
  ------------------
  |  Branch (549:3): [True: 1.41k, False: 1.13k]
  ------------------
  550|  1.41k|    return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|  1.41k|#define PREFIX(ident) little2_##ident
  ------------------
                  return PREFIX(scanCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|  1.41k|#define MINBPC(enc) 2
  ------------------
  551|      5|  default:
  ------------------
  |  Branch (551:3): [True: 5, False: 2.55k]
  ------------------
  552|      5|    *nextTokPtr = ptr;
  553|      5|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      5|#  define XML_TOK_INVALID 0
  ------------------
  554|  2.55k|  }
  555|  3.75k|  while (HAS_CHAR(enc, ptr, end)) {
  556|  3.75k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  3.75k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  3.75k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  3.28k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 3.28k, False: 467]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  557|  9.47k|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|  2.64k|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 451, False: 3.30k]
  |  |  ------------------
  |  |   82|  2.64k|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  704|    451|#define IS_NAME_CHAR_MINBPC(enc, p) LITTLE2_IS_NAME_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  687|    451|  UCS2_GET_NAMING(namePages, (unsigned char)p[1], (unsigned char)p[0])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|    451|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 59, False: 392]
  |  |  ------------------
  |  |   83|     59|      *nextTokPtr = ptr;                                                       \
  |  |   84|     59|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|     59|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|     59|    }                                                                          \
  |  |   86|  2.64k|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|    392|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|  1.85k|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 1.45k, False: 2.29k]
  |  |  ------------------
  |  |   88|  2.05k|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 200, False: 3.55k]
  |  |  ------------------
  |  |   89|  2.25k|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 202, False: 3.55k]
  |  |  ------------------
  |  |   90|  2.45k|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 198, False: 3.55k]
  |  |  ------------------
  |  |   91|  2.64k|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 195, False: 3.55k]
  |  |  ------------------
  |  |   92|  2.64k|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  698|  2.64k|#define MINBPC(enc) 2
  |  |  ------------------
  |  |   93|  2.64k|    break;                                                                     \
  |  |   94|  2.64k|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 3.75k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   95|      0|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 3.75k]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   96|     11|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|     11|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 11, False: 3.74k]
  |  |  |  |  ------------------
  |  |  |  |   71|     11|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 1, False: 10]
  |  |  |  |  ------------------
  |  |  |  |   72|      1|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      1|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|     10|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|     10|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|     20|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 10, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 10, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  703|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|     10|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|     10|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|     10|    }                                                                          \
  |  |  |  |   77|     10|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
  558|  1.03k|    case BT_SEMI:
  ------------------
  |  Branch (558:5): [True: 1.03k, False: 2.72k]
  ------------------
  559|  1.03k|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|  1.03k|#define MINBPC(enc) 2
  ------------------
  560|  1.03k|      return XML_TOK_ENTITY_REF;
  ------------------
  |  |   70|  1.03k|#  define XML_TOK_ENTITY_REF 9
  ------------------
  561|      5|    default:
  ------------------
  |  Branch (561:5): [True: 5, False: 3.74k]
  ------------------
  562|      5|      *nextTokPtr = ptr;
  563|      5|      return XML_TOK_INVALID;
  ------------------
  |  |   57|      5|#  define XML_TOK_INVALID 0
  ------------------
  564|  3.75k|    }
  565|  3.75k|  }
  566|      2|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  567|  1.10k|}
xmltok.c:little2_scanCharRef:
  514|  1.41k|                    const char **nextTokPtr) {
  515|  1.41k|  if (HAS_CHAR(enc, ptr, end)) {
  ------------------
  |  |  131|  1.41k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  1.41k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|  1.41k|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (129:5): [True: 1.41k, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  516|  1.41k|    if (CHAR_MATCHES(enc, ptr, ASCII_x))
  ------------------
  |  |  702|  1.41k|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|  1.41k|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 1.40k, False: 10]
  |  |  |  |  |  Branch (685:52): [True: 1.00k, False: 400]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|  1.00k|      return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|  1.00k|#define PREFIX(ident) little2_##ident
  ------------------
                    return PREFIX(scanHexCharRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|  1.00k|#define MINBPC(enc) 2
  ------------------
  518|    410|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|    410|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|    410|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    400|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 400, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  519|    398|    case BT_DIGIT:
  ------------------
  |  Branch (519:5): [True: 398, False: 12]
  ------------------
  520|    398|      break;
  521|     12|    default:
  ------------------
  |  Branch (521:5): [True: 12, False: 398]
  ------------------
  522|     12|      *nextTokPtr = ptr;
  523|     12|      return XML_TOK_INVALID;
  ------------------
  |  |   57|     12|#  define XML_TOK_INVALID 0
  ------------------
  524|    410|    }
  525|    996|    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  698|    398|#define MINBPC(enc) 2
  ------------------
                  for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  698|    599|#define MINBPC(enc) 2
  ------------------
  526|    996|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|    996|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|    996|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    981|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 981, False: 15]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  527|    599|      case BT_DIGIT:
  ------------------
  |  Branch (527:7): [True: 599, False: 397]
  ------------------
  528|    599|        break;
  529|    382|      case BT_SEMI:
  ------------------
  |  Branch (529:7): [True: 382, False: 614]
  ------------------
  530|    382|        *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|    382|#define MINBPC(enc) 2
  ------------------
  531|    382|        return XML_TOK_CHAR_REF;
  ------------------
  |  |   71|    382|#  define XML_TOK_CHAR_REF 10 /* numeric character reference */
  ------------------
  532|     15|      default:
  ------------------
  |  Branch (532:7): [True: 15, False: 981]
  ------------------
  533|     15|        *nextTokPtr = ptr;
  534|     15|        return XML_TOK_INVALID;
  ------------------
  |  |   57|     15|#  define XML_TOK_INVALID 0
  ------------------
  535|    996|      }
  536|    996|    }
  537|    398|  }
  538|      2|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  539|  1.41k|}
xmltok.c:little2_scanHexCharRef:
  483|  1.00k|                       const char **nextTokPtr) {
  484|  1.00k|  if (HAS_CHAR(enc, ptr, end)) {
  ------------------
  |  |  131|  1.00k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  1.00k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|  1.00k|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (129:5): [True: 1.00k, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  485|  1.00k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  1.00k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  1.00k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  1.00k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 1.00k, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  486|    349|    case BT_DIGIT:
  ------------------
  |  Branch (486:5): [True: 349, False: 656]
  ------------------
  487|    998|    case BT_HEX:
  ------------------
  |  Branch (487:5): [True: 649, False: 356]
  ------------------
  488|    998|      break;
  489|      7|    default:
  ------------------
  |  Branch (489:5): [True: 7, False: 998]
  ------------------
  490|      7|      *nextTokPtr = ptr;
  491|      7|      return XML_TOK_INVALID;
  ------------------
  |  |   57|      7|#  define XML_TOK_INVALID 0
  ------------------
  492|  1.00k|    }
  493|  4.27k|    for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  698|    998|#define MINBPC(enc) 2
  ------------------
                  for (ptr += MINBPC(enc); HAS_CHAR(enc, ptr, end); ptr += MINBPC(enc)) {
  ------------------
  |  |  698|  3.27k|#define MINBPC(enc) 2
  ------------------
  494|  4.27k|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  4.27k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  4.27k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  4.24k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 4.24k, False: 26]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  495|  1.56k|      case BT_DIGIT:
  ------------------
  |  Branch (495:7): [True: 1.56k, False: 2.70k]
  ------------------
  496|  3.27k|      case BT_HEX:
  ------------------
  |  Branch (496:7): [True: 1.71k, False: 2.55k]
  ------------------
  497|  3.27k|        break;
  498|    970|      case BT_SEMI:
  ------------------
  |  Branch (498:7): [True: 970, False: 3.30k]
  ------------------
  499|    970|        *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|    970|#define MINBPC(enc) 2
  ------------------
  500|    970|        return XML_TOK_CHAR_REF;
  ------------------
  |  |   71|    970|#  define XML_TOK_CHAR_REF 10 /* numeric character reference */
  ------------------
  501|     26|      default:
  ------------------
  |  Branch (501:7): [True: 26, False: 4.24k]
  ------------------
  502|     26|        *nextTokPtr = ptr;
  503|     26|        return XML_TOK_INVALID;
  ------------------
  |  |   57|     26|#  define XML_TOK_INVALID 0
  ------------------
  504|  4.27k|      }
  505|  4.27k|    }
  506|    998|  }
  507|      3|  return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      3|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  508|  1.00k|}
xmltok.c:little2_cdataSectionTok:
  356|  4.55k|                        const char **nextTokPtr) {
  357|  4.55k|  if (ptr >= end)
  ------------------
  |  Branch (357:7): [True: 109, False: 4.45k]
  ------------------
  358|    109|    return XML_TOK_NONE;
  ------------------
  |  |   51|    109|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
  359|  4.45k|  if (MINBPC(enc) > 1) {
  ------------------
  |  |  698|  4.45k|#define MINBPC(enc) 2
  ------------------
  |  Branch (359:7): [True: 4.45k, Folded]
  ------------------
  360|  4.45k|    size_t n = end - ptr;
  361|  4.45k|    if (n & (MINBPC(enc) - 1)) {
  ------------------
  |  |  698|  4.45k|#define MINBPC(enc) 2
  ------------------
  |  Branch (361:9): [True: 1.47k, False: 2.97k]
  ------------------
  362|  1.47k|      n &= ~(MINBPC(enc) - 1);
  ------------------
  |  |  698|  1.47k|#define MINBPC(enc) 2
  ------------------
  363|  1.47k|      if (n == 0)
  ------------------
  |  Branch (363:11): [True: 55, False: 1.41k]
  ------------------
  364|     55|        return XML_TOK_PARTIAL;
  ------------------
  |  |   56|     55|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
  365|  1.41k|      end = ptr + n;
  366|  1.41k|    }
  367|  4.45k|  }
  368|  4.39k|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  4.39k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  4.39k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  3.17k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 3.17k, False: 1.22k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  369|  1.43k|  case BT_RSQB:
  ------------------
  |  Branch (369:3): [True: 1.43k, False: 2.95k]
  ------------------
  370|  1.43k|    ptr += MINBPC(enc);
  ------------------
  |  |  698|  1.43k|#define MINBPC(enc) 2
  ------------------
  371|  1.43k|    REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|  1.43k|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|  1.43k|    {                                                                          \
  |  |  |  |  135|  1.43k|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|  1.43k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|  1.43k|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 2, False: 1.43k]
  |  |  |  |  ------------------
  |  |  |  |  136|      2|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      2|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      2|      }                                                                        \
  |  |  |  |  138|  1.43k|    }
  |  |  ------------------
  ------------------
  372|  1.43k|    if (! CHAR_MATCHES(enc, ptr, ASCII_RSQB))
  ------------------
  |  |  702|  1.43k|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|  1.43k|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 999, False: 438]
  |  |  |  |  |  Branch (685:52): [True: 780, False: 219]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  373|    657|      break;
  374|    780|    ptr += MINBPC(enc);
  ------------------
  |  |  698|    780|#define MINBPC(enc) 2
  ------------------
  375|    780|    REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    780|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    780|    {                                                                          \
  |  |  |  |  135|    780|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    780|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|    780|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 6, False: 774]
  |  |  |  |  ------------------
  |  |  |  |  136|      6|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      6|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      6|      }                                                                        \
  |  |  |  |  138|    780|    }
  |  |  ------------------
  ------------------
  376|    774|    if (! CHAR_MATCHES(enc, ptr, ASCII_GT)) {
  ------------------
  |  |  702|    774|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    774|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 543, False: 231]
  |  |  |  |  |  Branch (685:52): [True: 68, False: 475]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  377|    706|      ptr -= MINBPC(enc);
  ------------------
  |  |  698|    706|#define MINBPC(enc) 2
  ------------------
  378|    706|      break;
  379|    706|    }
  380|     68|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|     68|#define MINBPC(enc) 2
  ------------------
  381|     68|    return XML_TOK_CDATA_SECT_CLOSE;
  ------------------
  |  |  113|     68|#  define XML_TOK_CDATA_SECT_CLOSE 40
  ------------------
  382|    952|  case BT_CR:
  ------------------
  |  Branch (382:3): [True: 952, False: 3.44k]
  ------------------
  383|    952|    ptr += MINBPC(enc);
  ------------------
  |  |  698|    952|#define MINBPC(enc) 2
  ------------------
  384|    952|    REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|    952|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|    952|    {                                                                          \
  |  |  |  |  135|    952|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|    952|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  698|    952|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 6, False: 946]
  |  |  |  |  ------------------
  |  |  |  |  136|      6|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      6|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      6|      }                                                                        \
  |  |  |  |  138|    952|    }
  |  |  ------------------
  ------------------
  385|    946|    if (BYTE_TYPE(enc, ptr) == BT_LF)
  ------------------
  |  |  700|    946|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|    946|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    451|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 451, False: 495]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (385:9): [True: 68, False: 878]
  ------------------
  386|     68|      ptr += MINBPC(enc);
  ------------------
  |  |  698|     68|#define MINBPC(enc) 2
  ------------------
  387|    946|    *nextTokPtr = ptr;
  388|    946|    return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|    946|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
  389|    725|  case BT_LF:
  ------------------
  |  Branch (389:3): [True: 725, False: 3.67k]
  ------------------
  390|    725|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|    725|#define MINBPC(enc) 2
  ------------------
  391|    725|    return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|    725|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
  392|    725|    INVALID_CASES(ptr, nextTokPtr)
  ------------------
  |  |   60|      0|    INVALID_LEAD_CASE(2, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 0, False: 4.39k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      0|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      0|    }                                                                          \
  |  |  |  |   56|      0|    ptr += n;                                                                  \
  |  |  |  |   57|      0|    break;
  |  |  ------------------
  |  |   61|      0|    INVALID_LEAD_CASE(3, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 0, False: 4.39k]
  |  |  |  |  ------------------
  |  |  |  |   50|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   51|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|      0|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|      0|    }                                                                          \
  |  |  |  |   56|      0|    ptr += n;                                                                  \
  |  |  |  |   57|      0|    break;
  |  |  ------------------
  |  |   62|    313|    INVALID_LEAD_CASE(4, ptr, nextTokPtr)                                      \
  |  |  ------------------
  |  |  |  |   49|    313|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (49:3): [True: 313, False: 4.08k]
  |  |  |  |  ------------------
  |  |  |  |   50|    313|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (50:9): [True: 4, False: 309]
  |  |  |  |  ------------------
  |  |  |  |   51|    259|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      4|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   52|    309|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  707|    309|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  694|    309|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (694:4): [True: 309, Folded]
  |  |  |  |  |  |  |  |  |  Branch (694:16): [True: 50, False: 259]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   53|     50|      *(nextTokPtr) = (ptr);                                                   \
  |  |  |  |   54|     50|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     50|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   55|     50|    }                                                                          \
  |  |  |  |   56|    309|    ptr += n;                                                                  \
  |  |  |  |   57|    259|    break;
  |  |  ------------------
  |  |   63|    259|  case BT_NONXML:                                                              \
  |  |  ------------------
  |  |  |  Branch (63:3): [True: 5, False: 4.39k]
  |  |  ------------------
  |  |   64|      5|  case BT_MALFORM:                                                             \
  |  |  ------------------
  |  |  |  Branch (64:3): [True: 0, False: 4.39k]
  |  |  ------------------
  |  |   65|     13|  case BT_TRAIL:                                                               \
  |  |  ------------------
  |  |  |  Branch (65:3): [True: 8, False: 4.38k]
  |  |  ------------------
  |  |   66|     13|    *(nextTokPtr) = (ptr);                                                     \
  |  |   67|     13|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|     13|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
  393|    953|  default:
  ------------------
  |  Branch (393:3): [True: 953, False: 3.44k]
  ------------------
  394|    953|    ptr += MINBPC(enc);
  ------------------
  |  |  698|    953|#define MINBPC(enc) 2
  ------------------
  395|    953|    break;
  396|  4.39k|  }
  397|  7.30k|  while (HAS_CHAR(enc, ptr, end)) {
  398|  7.30k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  7.30k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  7.30k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  3.51k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 3.51k, False: 3.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  399|      0|#  define LEAD_CASE(n)                                                         \
  400|      0|  case BT_LEAD##n:                                                             \
  401|      0|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  402|      0|      *nextTokPtr = ptr;                                                       \
  403|      0|      return XML_TOK_DATA_CHARS;                                               \
  404|      0|    }                                                                          \
  405|      0|    ptr += n;                                                                  \
  406|      0|    break;
  407|      0|      LEAD_CASE(2)
  ------------------
  |  |  400|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (400:3): [True: 0, False: 7.30k]
  |  |  ------------------
  |  |  401|      0|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  |  |  ------------------
  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (401:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  402|      0|      *nextTokPtr = ptr;                                                       \
  |  |  403|      0|      return XML_TOK_DATA_CHARS;                                               \
  |  |  ------------------
  |  |  |  |   67|      0|#  define XML_TOK_DATA_CHARS 6
  |  |  ------------------
  |  |  404|      0|    }                                                                          \
  |  |  405|      0|    ptr += n;                                                                  \
  |  |  406|      0|    break;
  ------------------
  408|      0|      LEAD_CASE(3)
  ------------------
  |  |  400|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (400:3): [True: 0, False: 7.30k]
  |  |  ------------------
  |  |  401|      0|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  |  |  ------------------
  |  |  |  |  707|      0|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  694|      0|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (694:4): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (694:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (401:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  402|      0|      *nextTokPtr = ptr;                                                       \
  |  |  403|      0|      return XML_TOK_DATA_CHARS;                                               \
  |  |  ------------------
  |  |  |  |   67|      0|#  define XML_TOK_DATA_CHARS 6
  |  |  ------------------
  |  |  404|      0|    }                                                                          \
  |  |  405|      0|    ptr += n;                                                                  \
  |  |  406|      0|    break;
  ------------------
  409|    450|      LEAD_CASE(4)
  ------------------
  |  |  400|    450|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (400:3): [True: 450, False: 6.85k]
  |  |  ------------------
  |  |  401|    450|    if (end - ptr < n || IS_INVALID_CHAR(enc, ptr, n)) {                       \
  |  |  ------------------
  |  |  |  |  707|    446|#define IS_INVALID_CHAR(enc, p, n) LITTLE2_IS_INVALID_CHAR(p, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  694|    446|  ((n) == 4 && ((unsigned char)(p)[3] & 0xFC) != 0xDC)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (694:4): [True: 446, Folded]
  |  |  |  |  |  |  |  Branch (694:16): [True: 46, False: 400]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (401:9): [True: 4, False: 446]
  |  |  ------------------
  |  |  402|     50|      *nextTokPtr = ptr;                                                       \
  |  |  403|     50|      return XML_TOK_DATA_CHARS;                                               \
  |  |  ------------------
  |  |  |  |   67|     50|#  define XML_TOK_DATA_CHARS 6
  |  |  ------------------
  |  |  404|     50|    }                                                                          \
  |  |  405|    400|    ptr += n;                                                                  \
  |  |  406|    400|    break;
  ------------------
  410|      0|#  undef LEAD_CASE
  411|      3|    case BT_NONXML:
  ------------------
  |  Branch (411:5): [True: 3, False: 7.30k]
  ------------------
  412|      3|    case BT_MALFORM:
  ------------------
  |  Branch (412:5): [True: 0, False: 7.30k]
  ------------------
  413|      7|    case BT_TRAIL:
  ------------------
  |  Branch (413:5): [True: 4, False: 7.30k]
  ------------------
  414|    509|    case BT_CR:
  ------------------
  |  Branch (414:5): [True: 502, False: 6.80k]
  ------------------
  415|  1.03k|    case BT_LF:
  ------------------
  |  Branch (415:5): [True: 527, False: 6.78k]
  ------------------
  416|  2.36k|    case BT_RSQB:
  ------------------
  |  Branch (416:5): [True: 1.33k, False: 5.97k]
  ------------------
  417|  2.36k|      *nextTokPtr = ptr;
  418|  2.36k|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|  2.36k|#  define XML_TOK_DATA_CHARS 6
  ------------------
  419|  4.49k|    default:
  ------------------
  |  Branch (419:5): [True: 4.49k, False: 2.81k]
  ------------------
  420|  4.49k|      ptr += MINBPC(enc);
  ------------------
  |  |  698|  4.49k|#define MINBPC(enc) 2
  ------------------
  421|  4.49k|      break;
  422|  7.30k|    }
  423|  7.30k|  }
  424|    157|  *nextTokPtr = ptr;
  425|    157|  return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|    157|#  define XML_TOK_DATA_CHARS 6
  ------------------
  426|  2.57k|}
xmltok.c:little2_attributeValueTok:
 1262|  4.45k|                          const char **nextTokPtr) {
 1263|  4.45k|  const char *start;
 1264|  4.45k|  if (ptr >= end)
  ------------------
  |  Branch (1264:7): [True: 474, False: 3.98k]
  ------------------
 1265|    474|    return XML_TOK_NONE;
  ------------------
  |  |   51|    474|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
 1266|  3.98k|  else if (! HAS_CHAR(enc, ptr, end)) {
  ------------------
  |  |  131|  3.98k|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|  3.98k|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|  3.98k|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1266:12): [True: 0, False: 3.98k]
  ------------------
 1267|       |    /* This line cannot be executed.  The incoming data has already
 1268|       |     * been tokenized once, so incomplete characters like this have
 1269|       |     * already been eliminated from the input.  Retaining the paranoia
 1270|       |     * check is still valuable, however.
 1271|       |     */
 1272|      0|    return XML_TOK_PARTIAL; /* LCOV_EXCL_LINE */
  ------------------
  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
 1273|      0|  }
 1274|  3.98k|  start = ptr;
 1275|  8.37k|  while (HAS_CHAR(enc, ptr, end)) {
 1276|  8.37k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  8.37k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  8.37k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  4.19k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 4.19k, False: 4.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1277|      0|#  define LEAD_CASE(n)                                                         \
 1278|      0|  case BT_LEAD##n:                                                             \
 1279|      0|    ptr += n; /* NOTE: The encoding has already been validated. */             \
 1280|      0|    break;
 1281|      0|      LEAD_CASE(2)
  ------------------
  |  | 1278|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1278:3): [True: 0, False: 8.37k]
  |  |  ------------------
  |  | 1279|      0|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1280|      0|    break;
  ------------------
 1282|      0|      LEAD_CASE(3)
  ------------------
  |  | 1278|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1278:3): [True: 0, False: 8.37k]
  |  |  ------------------
  |  | 1279|      0|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1280|      0|    break;
  ------------------
 1283|    393|      LEAD_CASE(4)
  ------------------
  |  | 1278|    393|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1278:3): [True: 393, False: 7.98k]
  |  |  ------------------
  |  | 1279|    393|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1280|    393|    break;
  ------------------
 1284|      0|#  undef LEAD_CASE
 1285|    489|    case BT_AMP:
  ------------------
  |  Branch (1285:5): [True: 489, False: 7.88k]
  ------------------
 1286|    489|      if (ptr == start)
  ------------------
  |  Branch (1286:11): [True: 370, False: 119]
  ------------------
 1287|    370|        return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  697|    370|#define PREFIX(ident) little2_##ident
  ------------------
                      return PREFIX(scanRef)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  698|    370|#define MINBPC(enc) 2
  ------------------
 1288|    119|      *nextTokPtr = ptr;
 1289|    119|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|    119|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1290|      0|    case BT_LT:
  ------------------
  |  Branch (1290:5): [True: 0, False: 8.37k]
  ------------------
 1291|       |      /* this is for inside entity references */
 1292|      0|      *nextTokPtr = ptr;
 1293|      0|      return XML_TOK_INVALID;
  ------------------
  |  |   57|      0|#  define XML_TOK_INVALID 0
  ------------------
 1294|    641|    case BT_LF:
  ------------------
  |  Branch (1294:5): [True: 641, False: 7.73k]
  ------------------
 1295|    641|      if (ptr == start) {
  ------------------
  |  Branch (1295:11): [True: 414, False: 227]
  ------------------
 1296|    414|        *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|    414|#define MINBPC(enc) 2
  ------------------
 1297|    414|        return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|    414|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
 1298|    414|      }
 1299|    227|      *nextTokPtr = ptr;
 1300|    227|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|    227|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1301|    953|    case BT_CR:
  ------------------
  |  Branch (1301:5): [True: 953, False: 7.42k]
  ------------------
 1302|    953|      if (ptr == start) {
  ------------------
  |  Branch (1302:11): [True: 721, False: 232]
  ------------------
 1303|    721|        ptr += MINBPC(enc);
  ------------------
  |  |  698|    721|#define MINBPC(enc) 2
  ------------------
 1304|    721|        if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|    721|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|    721|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  698|    721|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1304:13): [True: 73, False: 648]
  ------------------
 1305|     73|          return XML_TOK_TRAILING_CR;
  ------------------
  |  |   53|     73|    -3                            /* A CR at the end of the scan;              \
  ------------------
 1306|    648|        if (BYTE_TYPE(enc, ptr) == BT_LF)
  ------------------
  |  |  700|    648|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|    648|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    418|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 418, False: 230]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1306:13): [True: 66, False: 582]
  ------------------
 1307|     66|          ptr += MINBPC(enc);
  ------------------
  |  |  698|     66|#define MINBPC(enc) 2
  ------------------
 1308|    648|        *nextTokPtr = ptr;
 1309|    648|        return XML_TOK_DATA_NEWLINE;
  ------------------
  |  |   68|    648|#  define XML_TOK_DATA_NEWLINE 7
  ------------------
 1310|    721|      }
 1311|    232|      *nextTokPtr = ptr;
 1312|    232|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|    232|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1313|  1.69k|    case BT_S:
  ------------------
  |  Branch (1313:5): [True: 1.69k, False: 6.68k]
  ------------------
 1314|  1.69k|      if (ptr == start) {
  ------------------
  |  Branch (1314:11): [True: 1.05k, False: 633]
  ------------------
 1315|  1.05k|        *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|  1.05k|#define MINBPC(enc) 2
  ------------------
 1316|  1.05k|        return XML_TOK_ATTRIBUTE_VALUE_S;
  ------------------
  |  |  110|  1.05k|#  define XML_TOK_ATTRIBUTE_VALUE_S 39
  ------------------
 1317|  1.05k|      }
 1318|    633|      *nextTokPtr = ptr;
 1319|    633|      return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|    633|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1320|  4.20k|    default:
  ------------------
  |  Branch (1320:5): [True: 4.20k, False: 4.16k]
  ------------------
 1321|  4.20k|      ptr += MINBPC(enc);
  ------------------
  |  |  698|  4.20k|#define MINBPC(enc) 2
  ------------------
 1322|  4.20k|      break;
 1323|  8.37k|    }
 1324|  8.37k|  }
 1325|    206|  *nextTokPtr = ptr;
 1326|    206|  return XML_TOK_DATA_CHARS;
  ------------------
  |  |   67|    206|#  define XML_TOK_DATA_CHARS 6
  ------------------
 1327|  3.98k|}
xmltok.c:little2_nameMatchesAscii:
 1715|     40|                         const char *end1, const char *ptr2) {
 1716|     40|  UNUSED_P(enc);
  ------------------
  |  |  101|     40|#    define UNUSED_P(p) (void)p
  ------------------
 1717|     54|  for (; *ptr2; ptr1 += MINBPC(enc), ptr2++) {
  ------------------
  |  |  698|     14|#define MINBPC(enc) 2
  ------------------
  |  Branch (1717:10): [True: 54, False: 0]
  ------------------
 1718|     54|    if (end1 - ptr1 < MINBPC(enc)) {
  ------------------
  |  |  698|     54|#define MINBPC(enc) 2
  ------------------
  |  Branch (1718:9): [True: 7, False: 47]
  ------------------
 1719|       |      /* This line cannot be executed.  The incoming data has already
 1720|       |       * been tokenized once, so incomplete characters like this have
 1721|       |       * already been eliminated from the input.  Retaining the
 1722|       |       * paranoia check is still valuable, however.
 1723|       |       */
 1724|      7|      return 0; /* LCOV_EXCL_LINE */
 1725|      7|    }
 1726|     47|    if (! CHAR_MATCHES(enc, ptr1, *ptr2))
  ------------------
  |  |  702|     47|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|     47|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 47, False: 0]
  |  |  |  |  |  Branch (685:52): [True: 14, False: 33]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1727|     33|      return 0;
 1728|     47|  }
 1729|      0|  return ptr1 == end1;
 1730|     40|}
xmltok.c:little2_nameLength:
 1733|  6.32k|PREFIX(nameLength)(const ENCODING *enc, const char *ptr) {
 1734|  6.32k|  const char *start = ptr;
 1735|  18.8k|  for (;;) {
 1736|  18.8k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  18.8k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  18.8k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  8.98k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 8.98k, False: 9.82k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1737|      0|#  define LEAD_CASE(n)                                                         \
 1738|      0|  case BT_LEAD##n:                                                             \
 1739|      0|    ptr += n; /* NOTE: The encoding has already been validated. */             \
 1740|      0|    break;
 1741|      0|      LEAD_CASE(2)
  ------------------
  |  | 1738|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1738:3): [True: 0, False: 18.8k]
  |  |  ------------------
  |  | 1739|      0|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1740|      0|    break;
  ------------------
 1742|      0|      LEAD_CASE(3)
  ------------------
  |  | 1738|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1738:3): [True: 0, False: 18.8k]
  |  |  ------------------
  |  | 1739|      0|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1740|      0|    break;
  ------------------
 1743|      0|      LEAD_CASE(4)
  ------------------
  |  | 1738|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1738:3): [True: 0, False: 18.8k]
  |  |  ------------------
  |  | 1739|      0|    ptr += n; /* NOTE: The encoding has already been validated. */             \
  |  | 1740|      0|    break;
  ------------------
 1744|      0|#  undef LEAD_CASE
 1745|  9.82k|    case BT_NONASCII:
  ------------------
  |  Branch (1745:5): [True: 9.82k, False: 8.98k]
  ------------------
 1746|  11.0k|    case BT_NMSTRT:
  ------------------
  |  Branch (1746:5): [True: 1.21k, False: 17.5k]
  ------------------
 1747|  11.0k|#  ifdef XML_NS
 1748|  11.2k|    case BT_COLON:
  ------------------
  |  Branch (1748:5): [True: 196, False: 18.6k]
  ------------------
 1749|  11.2k|#  endif
 1750|  11.9k|    case BT_HEX:
  ------------------
  |  Branch (1750:5): [True: 670, False: 18.1k]
  ------------------
 1751|  11.9k|    case BT_DIGIT:
  ------------------
  |  Branch (1751:5): [True: 51, False: 18.7k]
  ------------------
 1752|  12.2k|    case BT_NAME:
  ------------------
  |  Branch (1752:5): [True: 299, False: 18.5k]
  ------------------
 1753|  12.4k|    case BT_MINUS:
  ------------------
  |  Branch (1753:5): [True: 221, False: 18.5k]
  ------------------
 1754|  12.4k|      ptr += MINBPC(enc);
  ------------------
  |  |  698|  12.4k|#define MINBPC(enc) 2
  ------------------
 1755|  12.4k|      break;
 1756|  6.32k|    default:
  ------------------
  |  Branch (1756:5): [True: 6.32k, False: 12.4k]
  ------------------
 1757|  6.32k|      return (int)(ptr - start);
 1758|  18.8k|    }
 1759|  18.8k|  }
 1760|  6.32k|}
xmltok.c:little2_getAtts:
 1510|  4.46k|                ATTRIBUTE *atts) {
 1511|  4.46k|  enum { other, inName, inValue } state = inName;
 1512|  4.46k|  int nAtts = 0;
 1513|  4.46k|  int open = 0; /* defined when state == inValue;
 1514|       |                   initialization just to shut up compilers */
 1515|       |
 1516|  58.7k|  for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) {
  ------------------
  |  |  698|  4.46k|#define MINBPC(enc) 2
  ------------------
                for (ptr += MINBPC(enc);; ptr += MINBPC(enc)) {
  ------------------
  |  |  698|  54.3k|#define MINBPC(enc) 2
  ------------------
 1517|  58.7k|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  700|  58.7k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  58.7k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|  33.8k|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 33.8k, False: 24.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1518|      0|#  define START_NAME                                                           \
 1519|      0|    if (state == other) {                                                      \
 1520|      0|      if (nAtts < attsMax) {                                                   \
 1521|      0|        atts[nAtts].name = ptr;                                                \
 1522|      0|        atts[nAtts].normalized = 1;                                            \
 1523|      0|      }                                                                        \
 1524|      0|      state = inName;                                                          \
 1525|      0|    }
 1526|      0|#  define LEAD_CASE(n)                                                         \
 1527|      0|  case BT_LEAD##n: /* NOTE: The encoding has already been validated. */        \
 1528|      0|    START_NAME ptr += (n - MINBPC(enc));                                       \
 1529|      0|    break;
 1530|      0|      LEAD_CASE(2)
  ------------------
  |  | 1527|      0|  case BT_LEAD##n: /* NOTE: The encoding has already been validated. */        \
  |  |  ------------------
  |  |  |  Branch (1527:3): [True: 0, False: 58.7k]
  |  |  ------------------
  |  | 1528|      0|    START_NAME ptr += (n - MINBPC(enc));                                       \
  |  |  ------------------
  |  |  |  | 1519|      0|    if (state == other) {                                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1519:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1520|      0|      if (nAtts < attsMax) {                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1520:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1521|      0|        atts[nAtts].name = ptr;                                                \
  |  |  |  | 1522|      0|        atts[nAtts].normalized = 1;                                            \
  |  |  |  | 1523|      0|      }                                                                        \
  |  |  |  | 1524|      0|      state = inName;                                                          \
  |  |  |  | 1525|      0|    }
  |  |  ------------------
  |  |                   START_NAME ptr += (n - MINBPC(enc));                                       \
  |  |  ------------------
  |  |  |  |  698|      0|#define MINBPC(enc) 2
  |  |  ------------------
  |  | 1529|      0|    break;
  ------------------
 1531|      0|      LEAD_CASE(3)
  ------------------
  |  | 1527|      0|  case BT_LEAD##n: /* NOTE: The encoding has already been validated. */        \
  |  |  ------------------
  |  |  |  Branch (1527:3): [True: 0, False: 58.7k]
  |  |  ------------------
  |  | 1528|      0|    START_NAME ptr += (n - MINBPC(enc));                                       \
  |  |  ------------------
  |  |  |  | 1519|      0|    if (state == other) {                                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1519:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1520|      0|      if (nAtts < attsMax) {                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1520:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1521|      0|        atts[nAtts].name = ptr;                                                \
  |  |  |  | 1522|      0|        atts[nAtts].normalized = 1;                                            \
  |  |  |  | 1523|      0|      }                                                                        \
  |  |  |  | 1524|      0|      state = inName;                                                          \
  |  |  |  | 1525|      0|    }
  |  |  ------------------
  |  |                   START_NAME ptr += (n - MINBPC(enc));                                       \
  |  |  ------------------
  |  |  |  |  698|      0|#define MINBPC(enc) 2
  |  |  ------------------
  |  | 1529|      0|    break;
  ------------------
 1532|  1.36k|      LEAD_CASE(4)
  ------------------
  |  | 1527|  1.36k|  case BT_LEAD##n: /* NOTE: The encoding has already been validated. */        \
  |  |  ------------------
  |  |  |  Branch (1527:3): [True: 1.36k, False: 57.4k]
  |  |  ------------------
  |  | 1528|  1.36k|    START_NAME ptr += (n - MINBPC(enc));                                       \
  |  |  ------------------
  |  |  |  | 1519|  1.36k|    if (state == other) {                                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1519:9): [True: 0, False: 1.36k]
  |  |  |  |  ------------------
  |  |  |  | 1520|      0|      if (nAtts < attsMax) {                                                   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1520:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1521|      0|        atts[nAtts].name = ptr;                                                \
  |  |  |  | 1522|      0|        atts[nAtts].normalized = 1;                                            \
  |  |  |  | 1523|      0|      }                                                                        \
  |  |  |  | 1524|      0|      state = inName;                                                          \
  |  |  |  | 1525|      0|    }
  |  |  ------------------
  |  |                   START_NAME ptr += (n - MINBPC(enc));                                       \
  |  |  ------------------
  |  |  |  |  698|  1.36k|#define MINBPC(enc) 2
  |  |  ------------------
  |  | 1529|  1.36k|    break;
  ------------------
 1533|      0|#  undef LEAD_CASE
 1534|  23.5k|    case BT_NONASCII:
  ------------------
  |  Branch (1534:5): [True: 23.5k, False: 35.2k]
  ------------------
 1535|  25.3k|    case BT_NMSTRT:
  ------------------
  |  Branch (1535:5): [True: 1.84k, False: 56.9k]
  ------------------
 1536|  26.2k|    case BT_HEX:
  ------------------
  |  Branch (1536:5): [True: 840, False: 57.9k]
  ------------------
 1537|  26.2k|      START_NAME
  ------------------
  |  | 1519|  26.2k|    if (state == other) {                                                      \
  |  |  ------------------
  |  |  |  Branch (1519:9): [True: 3.85k, False: 22.3k]
  |  |  ------------------
  |  | 1520|  3.85k|      if (nAtts < attsMax) {                                                   \
  |  |  ------------------
  |  |  |  Branch (1520:11): [True: 3.47k, False: 377]
  |  |  ------------------
  |  | 1521|  3.47k|        atts[nAtts].name = ptr;                                                \
  |  | 1522|  3.47k|        atts[nAtts].normalized = 1;                                            \
  |  | 1523|  3.47k|      }                                                                        \
  |  | 1524|  3.85k|      state = inName;                                                          \
  |  | 1525|  3.85k|    }
  ------------------
 1538|  26.2k|      break;
 1539|      0|#  undef START_NAME
 1540|  3.38k|    case BT_QUOT:
  ------------------
  |  Branch (1540:5): [True: 3.38k, False: 55.3k]
  ------------------
 1541|  3.38k|      if (state != inValue) {
  ------------------
  |  Branch (1541:11): [True: 1.57k, False: 1.81k]
  ------------------
 1542|  1.57k|        if (nAtts < attsMax)
  ------------------
  |  Branch (1542:13): [True: 1.42k, False: 146]
  ------------------
 1543|  1.42k|          atts[nAtts].valuePtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|  1.42k|#define MINBPC(enc) 2
  ------------------
 1544|  1.57k|        state = inValue;
 1545|  1.57k|        open = BT_QUOT;
 1546|  1.81k|      } else if (open == BT_QUOT) {
  ------------------
  |  Branch (1546:18): [True: 1.57k, False: 240]
  ------------------
 1547|  1.57k|        state = other;
 1548|  1.57k|        if (nAtts < attsMax)
  ------------------
  |  Branch (1548:13): [True: 1.42k, False: 146]
  ------------------
 1549|  1.42k|          atts[nAtts].valueEnd = ptr;
 1550|  1.57k|        nAtts++;
 1551|  1.57k|      }
 1552|  3.38k|      break;
 1553|  4.76k|    case BT_APOS:
  ------------------
  |  Branch (1553:5): [True: 4.76k, False: 54.0k]
  ------------------
 1554|  4.76k|      if (state != inValue) {
  ------------------
  |  Branch (1554:11): [True: 2.28k, False: 2.48k]
  ------------------
 1555|  2.28k|        if (nAtts < attsMax)
  ------------------
  |  Branch (1555:13): [True: 2.05k, False: 231]
  ------------------
 1556|  2.05k|          atts[nAtts].valuePtr = ptr + MINBPC(enc);
  ------------------
  |  |  698|  2.05k|#define MINBPC(enc) 2
  ------------------
 1557|  2.28k|        state = inValue;
 1558|  2.28k|        open = BT_APOS;
 1559|  2.48k|      } else if (open == BT_APOS) {
  ------------------
  |  Branch (1559:18): [True: 2.28k, False: 201]
  ------------------
 1560|  2.28k|        state = other;
 1561|  2.28k|        if (nAtts < attsMax)
  ------------------
  |  Branch (1561:13): [True: 2.05k, False: 231]
  ------------------
 1562|  2.05k|          atts[nAtts].valueEnd = ptr;
 1563|  2.28k|        nAtts++;
 1564|  2.28k|      }
 1565|  4.76k|      break;
 1566|    590|    case BT_AMP:
  ------------------
  |  Branch (1566:5): [True: 590, False: 58.1k]
  ------------------
 1567|    590|      if (nAtts < attsMax)
  ------------------
  |  Branch (1567:11): [True: 517, False: 73]
  ------------------
 1568|    517|        atts[nAtts].normalized = 0;
 1569|    590|      break;
 1570|  7.97k|    case BT_S:
  ------------------
  |  Branch (1570:5): [True: 7.97k, False: 50.8k]
  ------------------
 1571|  7.97k|      if (state == inName)
  ------------------
  |  Branch (1571:11): [True: 1.22k, False: 6.75k]
  ------------------
 1572|  1.22k|        state = other;
 1573|  6.75k|      else if (state == inValue && nAtts < attsMax && atts[nAtts].normalized
  ------------------
  |  Branch (1573:16): [True: 2.87k, False: 3.88k]
  |  Branch (1573:36): [True: 2.62k, False: 245]
  |  Branch (1573:55): [True: 1.95k, False: 677]
  ------------------
 1574|  1.95k|               && (ptr == atts[nAtts].valuePtr
  ------------------
  |  Branch (1574:20): [True: 401, False: 1.54k]
  ------------------
 1575|  1.54k|                   || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE
  ------------------
  |  |  701|  1.54k|#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(p)
  |  |  ------------------
  |  |  |  |  684|  1.54k|#define LITTLE2_BYTE_TO_ASCII(p) ((p)[1] == 0 ? (p)[0] : -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (684:35): [True: 1.54k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                 || BYTE_TO_ASCII(enc, ptr) != ASCII_SPACE
  ------------------
  |  |  104|  3.49k|#define ASCII_SPACE 0x20
  ------------------
  |  Branch (1575:23): [True: 67, False: 1.48k]
  ------------------
 1576|  1.48k|                   || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE
  ------------------
  |  |  701|  1.48k|#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(p)
  |  |  ------------------
  |  |  |  |  684|  1.48k|#define LITTLE2_BYTE_TO_ASCII(p) ((p)[1] == 0 ? (p)[0] : -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (684:35): [True: 373, False: 1.10k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                                 || BYTE_TO_ASCII(enc, ptr + MINBPC(enc)) == ASCII_SPACE
  ------------------
  |  |  104|  3.43k|#define ASCII_SPACE 0x20
  ------------------
  |  Branch (1576:23): [True: 79, False: 1.40k]
  ------------------
 1577|  1.40k|                   || BYTE_TYPE(enc, ptr + MINBPC(enc)) == open))
  ------------------
  |  |  700|  1.40k|#define BYTE_TYPE(enc, p) LITTLE2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  683|  1.40k|  ((p)[1] == 0 ? SB_BYTE_TYPE(enc, p) : unicode_byte_type((p)[1], (p)[0]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|    294|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (683:4): [True: 294, False: 1.10k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1577:23): [True: 115, False: 1.28k]
  ------------------
 1578|    662|        atts[nAtts].normalized = 0;
 1579|  7.97k|      break;
 1580|  1.33k|    case BT_CR:
  ------------------
  |  Branch (1580:5): [True: 1.33k, False: 57.4k]
  ------------------
 1581|  2.59k|    case BT_LF:
  ------------------
  |  Branch (1581:5): [True: 1.25k, False: 57.5k]
  ------------------
 1582|       |      /* This case ensures that the first attribute name is counted
 1583|       |         Apart from that we could just change state on the quote. */
 1584|  2.59k|      if (state == inName)
  ------------------
  |  Branch (1584:11): [True: 273, False: 2.31k]
  ------------------
 1585|    273|        state = other;
 1586|  2.31k|      else if (state == inValue && nAtts < attsMax)
  ------------------
  |  Branch (1586:16): [True: 1.59k, False: 725]
  |  Branch (1586:36): [True: 1.39k, False: 194]
  ------------------
 1587|  1.39k|        atts[nAtts].normalized = 0;
 1588|  2.59k|      break;
 1589|  4.00k|    case BT_GT:
  ------------------
  |  Branch (1589:5): [True: 4.00k, False: 54.7k]
  ------------------
 1590|  5.33k|    case BT_SOL:
  ------------------
  |  Branch (1590:5): [True: 1.33k, False: 57.4k]
  ------------------
 1591|  5.33k|      if (state != inValue)
  ------------------
  |  Branch (1591:11): [True: 4.46k, False: 873]
  ------------------
 1592|  4.46k|        return nAtts;
 1593|    873|      break;
 1594|  6.55k|    default:
  ------------------
  |  Branch (1594:5): [True: 6.55k, False: 52.2k]
  ------------------
 1595|  6.55k|      break;
 1596|  58.7k|    }
 1597|  58.7k|  }
 1598|       |  /* not reached */
 1599|  4.46k|}
xmltok.c:little2_charRefNumber:
 1602|  1.18k|PREFIX(charRefNumber)(const ENCODING *enc, const char *ptr) {
 1603|  1.18k|  int result = 0;
 1604|       |  /* skip &# */
 1605|  1.18k|  UNUSED_P(enc);
  ------------------
  |  |  101|  1.18k|#    define UNUSED_P(p) (void)p
  ------------------
 1606|  1.18k|  ptr += 2 * MINBPC(enc);
  ------------------
  |  |  698|  1.18k|#define MINBPC(enc) 2
  ------------------
 1607|  1.18k|  if (CHAR_MATCHES(enc, ptr, ASCII_x)) {
  ------------------
  |  |  702|  1.18k|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|  1.18k|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 1.18k, False: 0]
  |  |  |  |  |  Branch (685:52): [True: 934, False: 254]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1608|  4.87k|    for (ptr += MINBPC(enc); ! CHAR_MATCHES(enc, ptr, ASCII_SEMI);
  ------------------
  |  |  698|    934|#define MINBPC(enc) 2
  ------------------
                  for (ptr += MINBPC(enc); ! CHAR_MATCHES(enc, ptr, ASCII_SEMI);
  ------------------
  |  |  702|  4.87k|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|  4.87k|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 4.87k, False: 0]
  |  |  |  |  |  Branch (685:52): [True: 931, False: 3.94k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1609|  3.94k|         ptr += MINBPC(enc)) {
  ------------------
  |  |  698|  3.94k|#define MINBPC(enc) 2
  ------------------
 1610|  3.94k|      int c = BYTE_TO_ASCII(enc, ptr);
  ------------------
  |  |  701|  3.94k|#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(p)
  |  |  ------------------
  |  |  |  |  684|  3.94k|#define LITTLE2_BYTE_TO_ASCII(p) ((p)[1] == 0 ? (p)[0] : -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (684:35): [True: 3.94k, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1611|  3.94k|      switch (c) {
  ------------------
  |  Branch (1611:15): [True: 3.94k, False: 0]
  ------------------
 1612|    546|      case ASCII_0:
  ------------------
  |  |   92|    546|#define ASCII_0 0x30
  ------------------
  |  Branch (1612:7): [True: 546, False: 3.39k]
  ------------------
 1613|    777|      case ASCII_1:
  ------------------
  |  |   93|    777|#define ASCII_1 0x31
  ------------------
  |  Branch (1613:7): [True: 231, False: 3.71k]
  ------------------
 1614|    868|      case ASCII_2:
  ------------------
  |  |   94|    868|#define ASCII_2 0x32
  ------------------
  |  Branch (1614:7): [True: 91, False: 3.85k]
  ------------------
 1615|  1.08k|      case ASCII_3:
  ------------------
  |  |   95|  1.08k|#define ASCII_3 0x33
  ------------------
  |  Branch (1615:7): [True: 212, False: 3.73k]
  ------------------
 1616|  1.16k|      case ASCII_4:
  ------------------
  |  |   96|  1.16k|#define ASCII_4 0x34
  ------------------
  |  Branch (1616:7): [True: 84, False: 3.86k]
  ------------------
 1617|  1.25k|      case ASCII_5:
  ------------------
  |  |   97|  1.25k|#define ASCII_5 0x35
  ------------------
  |  Branch (1617:7): [True: 90, False: 3.85k]
  ------------------
 1618|  1.33k|      case ASCII_6:
  ------------------
  |  |   98|  1.33k|#define ASCII_6 0x36
  ------------------
  |  Branch (1618:7): [True: 76, False: 3.86k]
  ------------------
 1619|  1.40k|      case ASCII_7:
  ------------------
  |  |   99|  1.40k|#define ASCII_7 0x37
  ------------------
  |  Branch (1619:7): [True: 76, False: 3.86k]
  ------------------
 1620|  1.61k|      case ASCII_8:
  ------------------
  |  |  100|  1.61k|#define ASCII_8 0x38
  ------------------
  |  Branch (1620:7): [True: 213, False: 3.73k]
  ------------------
 1621|  1.74k|      case ASCII_9:
  ------------------
  |  |  101|  1.74k|#define ASCII_9 0x39
  ------------------
  |  Branch (1621:7): [True: 122, False: 3.82k]
  ------------------
 1622|  1.74k|        result <<= 4;
 1623|  1.74k|        result |= (c - ASCII_0);
  ------------------
  |  |   92|  1.74k|#define ASCII_0 0x30
  ------------------
 1624|  1.74k|        break;
 1625|     78|      case ASCII_A:
  ------------------
  |  |   38|     78|#define ASCII_A 0x41
  ------------------
  |  Branch (1625:7): [True: 78, False: 3.86k]
  ------------------
 1626|    156|      case ASCII_B:
  ------------------
  |  |   39|    156|#define ASCII_B 0x42
  ------------------
  |  Branch (1626:7): [True: 78, False: 3.86k]
  ------------------
 1627|    357|      case ASCII_C:
  ------------------
  |  |   40|    357|#define ASCII_C 0x43
  ------------------
  |  Branch (1627:7): [True: 201, False: 3.74k]
  ------------------
 1628|    451|      case ASCII_D:
  ------------------
  |  |   41|    451|#define ASCII_D 0x44
  ------------------
  |  Branch (1628:7): [True: 94, False: 3.85k]
  ------------------
 1629|    548|      case ASCII_E:
  ------------------
  |  |   42|    548|#define ASCII_E 0x45
  ------------------
  |  Branch (1629:7): [True: 97, False: 3.84k]
  ------------------
 1630|    829|      case ASCII_F:
  ------------------
  |  |   43|    829|#define ASCII_F 0x46
  ------------------
  |  Branch (1630:7): [True: 281, False: 3.66k]
  ------------------
 1631|    829|        result <<= 4;
 1632|    829|        result += 10 + (c - ASCII_A);
  ------------------
  |  |   38|    829|#define ASCII_A 0x41
  ------------------
 1633|    829|        break;
 1634|     98|      case ASCII_a:
  ------------------
  |  |   65|     98|#define ASCII_a 0x61
  ------------------
  |  Branch (1634:7): [True: 98, False: 3.84k]
  ------------------
 1635|    173|      case ASCII_b:
  ------------------
  |  |   66|    173|#define ASCII_b 0x62
  ------------------
  |  Branch (1635:7): [True: 75, False: 3.86k]
  ------------------
 1636|    376|      case ASCII_c:
  ------------------
  |  |   67|    376|#define ASCII_c 0x63
  ------------------
  |  Branch (1636:7): [True: 203, False: 3.74k]
  ------------------
 1637|    682|      case ASCII_d:
  ------------------
  |  |   68|    682|#define ASCII_d 0x64
  ------------------
  |  Branch (1637:7): [True: 306, False: 3.63k]
  ------------------
 1638|  1.01k|      case ASCII_e:
  ------------------
  |  |   69|  1.01k|#define ASCII_e 0x65
  ------------------
  |  Branch (1638:7): [True: 335, False: 3.60k]
  ------------------
 1639|  1.37k|      case ASCII_f:
  ------------------
  |  |   70|  1.37k|#define ASCII_f 0x66
  ------------------
  |  Branch (1639:7): [True: 357, False: 3.58k]
  ------------------
 1640|  1.37k|        result <<= 4;
 1641|  1.37k|        result += 10 + (c - ASCII_a);
  ------------------
  |  |   65|  1.37k|#define ASCII_a 0x61
  ------------------
 1642|  1.37k|        break;
 1643|  3.94k|      }
 1644|  3.94k|      if (result >= 0x110000)
  ------------------
  |  Branch (1644:11): [True: 3, False: 3.94k]
  ------------------
 1645|      3|        return -1;
 1646|  3.94k|    }
 1647|    934|  } else {
 1648|    963|    for (; ! CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) {
  ------------------
  |  |  702|    963|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    963|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 963, False: 0]
  |  |  |  |  |  Branch (685:52): [True: 253, False: 710]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
                  for (; ! CHAR_MATCHES(enc, ptr, ASCII_SEMI); ptr += MINBPC(enc)) {
  ------------------
  |  |  698|    709|#define MINBPC(enc) 2
  ------------------
 1649|    710|      int c = BYTE_TO_ASCII(enc, ptr);
  ------------------
  |  |  701|    710|#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(p)
  |  |  ------------------
  |  |  |  |  684|    710|#define LITTLE2_BYTE_TO_ASCII(p) ((p)[1] == 0 ? (p)[0] : -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (684:35): [True: 710, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1650|    710|      result *= 10;
 1651|    710|      result += (c - ASCII_0);
  ------------------
  |  |   92|    710|#define ASCII_0 0x30
  ------------------
 1652|    710|      if (result >= 0x110000)
  ------------------
  |  Branch (1652:11): [True: 1, False: 709]
  ------------------
 1653|      1|        return -1;
 1654|    710|    }
 1655|    254|  }
 1656|  1.18k|  return checkCharRefNumber(result);
 1657|  1.18k|}
xmltok.c:little2_predefinedEntityName:
 1661|    636|                             const char *end) {
 1662|    636|  UNUSED_P(enc);
  ------------------
  |  |  101|    636|#    define UNUSED_P(p) (void)p
  ------------------
 1663|    636|  switch ((end - ptr) / MINBPC(enc)) {
  ------------------
  |  |  698|    636|#define MINBPC(enc) 2
  ------------------
  |  Branch (1663:11): [True: 607, False: 29]
  ------------------
 1664|    230|  case 2:
  ------------------
  |  Branch (1664:3): [True: 230, False: 406]
  ------------------
 1665|    230|    if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_t)) {
  ------------------
  |  |  702|    230|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    230|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 227, False: 3]
  |  |  |  |  |  Branch (685:52): [True: 225, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1666|    225|      switch (BYTE_TO_ASCII(enc, ptr)) {
  ------------------
  |  |  701|    225|#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(p)
  |  |  ------------------
  |  |  |  |  684|    225|#define LITTLE2_BYTE_TO_ASCII(p) ((p)[1] == 0 ? (p)[0] : -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (684:34): [True: 206, False: 19]
  |  |  |  |  |  Branch (684:35): [True: 224, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1667|    173|      case ASCII_l:
  ------------------
  |  |   76|    173|#define ASCII_l 0x6C
  ------------------
  |  Branch (1667:7): [True: 173, False: 52]
  ------------------
 1668|    173|        return ASCII_LT;
  ------------------
  |  |  113|    173|#define ASCII_LT 0x3C
  ------------------
 1669|     33|      case ASCII_g:
  ------------------
  |  |   71|     33|#define ASCII_g 0x67
  ------------------
  |  Branch (1669:7): [True: 33, False: 192]
  ------------------
 1670|     33|        return ASCII_GT;
  ------------------
  |  |  115|     33|#define ASCII_GT 0x3E
  ------------------
 1671|    225|      }
 1672|    225|    }
 1673|     24|    break;
 1674|    177|  case 3:
  ------------------
  |  Branch (1674:3): [True: 177, False: 459]
  ------------------
 1675|    177|    if (CHAR_MATCHES(enc, ptr, ASCII_a)) {
  ------------------
  |  |  702|    177|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    177|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 176, False: 1]
  |  |  |  |  |  Branch (685:52): [True: 168, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1676|    168|      ptr += MINBPC(enc);
  ------------------
  |  |  698|    168|#define MINBPC(enc) 2
  ------------------
 1677|    168|      if (CHAR_MATCHES(enc, ptr, ASCII_m)) {
  ------------------
  |  |  702|    168|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    168|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 165, False: 3]
  |  |  |  |  |  Branch (685:52): [True: 160, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1678|    160|        ptr += MINBPC(enc);
  ------------------
  |  |  698|    160|#define MINBPC(enc) 2
  ------------------
 1679|    160|        if (CHAR_MATCHES(enc, ptr, ASCII_p))
  ------------------
  |  |  702|    160|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|    160|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 157, False: 3]
  |  |  |  |  |  Branch (685:52): [True: 155, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1680|    155|          return ASCII_AMP;
  ------------------
  |  |  107|    155|#define ASCII_AMP 0x26
  ------------------
 1681|    160|      }
 1682|    168|    }
 1683|     22|    break;
 1684|    200|  case 4:
  ------------------
  |  Branch (1684:3): [True: 200, False: 436]
  ------------------
 1685|    200|    switch (BYTE_TO_ASCII(enc, ptr)) {
  ------------------
  |  |  701|    200|#define BYTE_TO_ASCII(enc, p) LITTLE2_BYTE_TO_ASCII(p)
  |  |  ------------------
  |  |  |  |  684|    200|#define LITTLE2_BYTE_TO_ASCII(p) ((p)[1] == 0 ? (p)[0] : -1)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (684:34): [True: 193, False: 7]
  |  |  |  |  |  Branch (684:35): [True: 194, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1686|     97|    case ASCII_q:
  ------------------
  |  |   81|     97|#define ASCII_q 0x71
  ------------------
  |  Branch (1686:5): [True: 97, False: 103]
  ------------------
 1687|     97|      ptr += MINBPC(enc);
  ------------------
  |  |  698|     97|#define MINBPC(enc) 2
  ------------------
 1688|     97|      if (CHAR_MATCHES(enc, ptr, ASCII_u)) {
  ------------------
  |  |  702|     97|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|     97|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 95, False: 2]
  |  |  |  |  |  Branch (685:52): [True: 87, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1689|     87|        ptr += MINBPC(enc);
  ------------------
  |  |  698|     87|#define MINBPC(enc) 2
  ------------------
 1690|     87|        if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
  ------------------
  |  |  702|     87|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|     87|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 86, False: 1]
  |  |  |  |  |  Branch (685:52): [True: 84, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1691|     84|          ptr += MINBPC(enc);
  ------------------
  |  |  698|     84|#define MINBPC(enc) 2
  ------------------
 1692|     84|          if (CHAR_MATCHES(enc, ptr, ASCII_t))
  ------------------
  |  |  702|     84|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|     84|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 77, False: 7]
  |  |  |  |  |  Branch (685:52): [True: 69, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1693|     69|            return ASCII_QUOT;
  ------------------
  |  |  106|     69|#define ASCII_QUOT 0x22
  ------------------
 1694|     84|        }
 1695|     87|      }
 1696|     28|      break;
 1697|     96|    case ASCII_a:
  ------------------
  |  |   65|     96|#define ASCII_a 0x61
  ------------------
  |  Branch (1697:5): [True: 96, False: 104]
  ------------------
 1698|     96|      ptr += MINBPC(enc);
  ------------------
  |  |  698|     96|#define MINBPC(enc) 2
  ------------------
 1699|     96|      if (CHAR_MATCHES(enc, ptr, ASCII_p)) {
  ------------------
  |  |  702|     96|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|     96|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 92, False: 4]
  |  |  |  |  |  Branch (685:52): [True: 85, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1700|     85|        ptr += MINBPC(enc);
  ------------------
  |  |  698|     85|#define MINBPC(enc) 2
  ------------------
 1701|     85|        if (CHAR_MATCHES(enc, ptr, ASCII_o)) {
  ------------------
  |  |  702|     85|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|     85|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 78, False: 7]
  |  |  |  |  |  Branch (685:52): [True: 73, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1702|     73|          ptr += MINBPC(enc);
  ------------------
  |  |  698|     73|#define MINBPC(enc) 2
  ------------------
 1703|     73|          if (CHAR_MATCHES(enc, ptr, ASCII_s))
  ------------------
  |  |  702|     73|#define CHAR_MATCHES(enc, p, c) LITTLE2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  685|     73|#define LITTLE2_CHAR_MATCHES(p, c) ((p)[1] == 0 && (p)[0] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (685:37): [True: 72, False: 1]
  |  |  |  |  |  Branch (685:52): [True: 66, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1704|     66|            return ASCII_APOS;
  ------------------
  |  |  108|     66|#define ASCII_APOS 0x27
  ------------------
 1705|     73|        }
 1706|     85|      }
 1707|     30|      break;
 1708|    200|    }
 1709|    636|  }
 1710|    140|  return 0;
 1711|    636|}
xmltok.c:big2_prologTok:
 1018|     25|                  const char **nextTokPtr) {
 1019|     25|  int tok;
 1020|     25|  if (ptr >= end)
  ------------------
  |  Branch (1020:7): [True: 0, False: 25]
  ------------------
 1021|      0|    return XML_TOK_NONE;
  ------------------
  |  |   51|      0|#  define XML_TOK_NONE -4 /* The string to be scanned is empty */
  ------------------
 1022|     25|  if (MINBPC(enc) > 1) {
  ------------------
  |  |  799|     25|#define MINBPC(enc) 2
  ------------------
  |  Branch (1022:7): [True: 25, Folded]
  ------------------
 1023|     25|    size_t n = end - ptr;
 1024|     25|    if (n & (MINBPC(enc) - 1)) {
  ------------------
  |  |  799|     25|#define MINBPC(enc) 2
  ------------------
  |  Branch (1024:9): [True: 16, False: 9]
  ------------------
 1025|     16|      n &= ~(MINBPC(enc) - 1);
  ------------------
  |  |  799|     16|#define MINBPC(enc) 2
  ------------------
 1026|     16|      if (n == 0)
  ------------------
  |  Branch (1026:11): [True: 0, False: 16]
  ------------------
 1027|      0|        return XML_TOK_PARTIAL;
  ------------------
  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  ------------------
 1028|     16|      end = ptr + n;
 1029|     16|    }
 1030|     25|  }
 1031|     25|  switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  801|     25|#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  784|     25|  ((p)[0] == 0 ? SB_BYTE_TYPE(enc, p + 1) : unicode_byte_type((p)[0], (p)[1]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|      0|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (784:4): [True: 0, False: 25]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1032|      0|  case BT_QUOT:
  ------------------
  |  Branch (1032:3): [True: 0, False: 25]
  ------------------
 1033|      0|    return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  798|      0|#define PREFIX(ident) big2_##ident
  ------------------
                  return PREFIX(scanLit)(BT_QUOT, enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1034|      0|  case BT_APOS:
  ------------------
  |  Branch (1034:3): [True: 0, False: 25]
  ------------------
 1035|      0|    return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  798|      0|#define PREFIX(ident) big2_##ident
  ------------------
                  return PREFIX(scanLit)(BT_APOS, enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1036|      0|  case BT_LT: {
  ------------------
  |  Branch (1036:3): [True: 0, False: 25]
  ------------------
 1037|      0|    ptr += MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1038|      0|    REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|      0|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|      0|    {                                                                          \
  |  |  |  |  135|      0|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|      0|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  799|      0|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  136|      0|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      0|      }                                                                        \
  |  |  |  |  138|      0|    }
  |  |  ------------------
  ------------------
 1039|      0|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  801|      0|#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  784|      0|  ((p)[0] == 0 ? SB_BYTE_TYPE(enc, p + 1) : unicode_byte_type((p)[0], (p)[1]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|      0|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (784:3): [True: 0, False: 0]
  |  |  |  |  |  Branch (784:4): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1040|      0|    case BT_EXCL:
  ------------------
  |  Branch (1040:5): [True: 0, False: 0]
  ------------------
 1041|      0|      return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  798|      0|#define PREFIX(ident) big2_##ident
  ------------------
                    return PREFIX(scanDecl)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1042|      0|    case BT_QUEST:
  ------------------
  |  Branch (1042:5): [True: 0, False: 0]
  ------------------
 1043|      0|      return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  798|      0|#define PREFIX(ident) big2_##ident
  ------------------
                    return PREFIX(scanPi)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1044|      0|    case BT_NMSTRT:
  ------------------
  |  Branch (1044:5): [True: 0, False: 0]
  ------------------
 1045|      0|    case BT_HEX:
  ------------------
  |  Branch (1045:5): [True: 0, False: 0]
  ------------------
 1046|      0|    case BT_NONASCII:
  ------------------
  |  Branch (1046:5): [True: 0, False: 0]
  ------------------
 1047|      0|    case BT_LEAD2:
  ------------------
  |  Branch (1047:5): [True: 0, False: 0]
  ------------------
 1048|      0|    case BT_LEAD3:
  ------------------
  |  Branch (1048:5): [True: 0, False: 0]
  ------------------
 1049|      0|    case BT_LEAD4:
  ------------------
  |  Branch (1049:5): [True: 0, False: 0]
  ------------------
 1050|      0|      *nextTokPtr = ptr - MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1051|      0|      return XML_TOK_INSTANCE_START;
  ------------------
  |  |   96|      0|#  define XML_TOK_INSTANCE_START 29
  ------------------
 1052|      0|    }
 1053|      0|    *nextTokPtr = ptr;
 1054|      0|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      0|#  define XML_TOK_INVALID 0
  ------------------
 1055|      0|  }
 1056|      0|  case BT_CR:
  ------------------
  |  Branch (1056:3): [True: 0, False: 25]
  ------------------
 1057|      0|    if (ptr + MINBPC(enc) == end) {
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
  |  Branch (1057:9): [True: 0, False: 0]
  ------------------
 1058|      0|      *nextTokPtr = end;
 1059|       |      /* indicate that this might be part of a CR/LF pair */
 1060|      0|      return -XML_TOK_PROLOG_S;
  ------------------
  |  |   82|      0|#  define XML_TOK_PROLOG_S 15
  ------------------
 1061|      0|    }
 1062|      0|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1063|      0|  case BT_S:
  ------------------
  |  Branch (1063:3): [True: 0, False: 25]
  ------------------
 1064|      0|  case BT_LF:
  ------------------
  |  Branch (1064:3): [True: 0, False: 25]
  ------------------
 1065|      0|    for (;;) {
 1066|      0|      ptr += MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1067|      0|      if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|      0|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|      0|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1067:11): [True: 0, False: 0]
  ------------------
 1068|      0|        break;
 1069|      0|      switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  801|      0|#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  784|      0|  ((p)[0] == 0 ? SB_BYTE_TYPE(enc, p + 1) : unicode_byte_type((p)[0], (p)[1]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|      0|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (784:4): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1070|      0|      case BT_S:
  ------------------
  |  Branch (1070:7): [True: 0, False: 0]
  ------------------
 1071|      0|      case BT_LF:
  ------------------
  |  Branch (1071:7): [True: 0, False: 0]
  ------------------
 1072|      0|        break;
 1073|      0|      case BT_CR:
  ------------------
  |  Branch (1073:7): [True: 0, False: 0]
  ------------------
 1074|       |        /* don't split CR/LF pair */
 1075|      0|        if (ptr + MINBPC(enc) != end)
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
  |  Branch (1075:13): [True: 0, False: 0]
  ------------------
 1076|      0|          break;
 1077|      0|        EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1078|      0|      default:
  ------------------
  |  Branch (1078:7): [True: 0, False: 0]
  ------------------
 1079|      0|        *nextTokPtr = ptr;
 1080|      0|        return XML_TOK_PROLOG_S;
  ------------------
  |  |   82|      0|#  define XML_TOK_PROLOG_S 15
  ------------------
 1081|      0|      }
 1082|      0|    }
 1083|      0|    *nextTokPtr = ptr;
 1084|      0|    return XML_TOK_PROLOG_S;
  ------------------
  |  |   82|      0|#  define XML_TOK_PROLOG_S 15
  ------------------
 1085|      0|  case BT_PERCNT:
  ------------------
  |  Branch (1085:3): [True: 0, False: 25]
  ------------------
 1086|      0|    return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  798|      0|#define PREFIX(ident) big2_##ident
  ------------------
                  return PREFIX(scanPercent)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1087|      0|  case BT_COMMA:
  ------------------
  |  Branch (1087:3): [True: 0, False: 25]
  ------------------
 1088|      0|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1089|      0|    return XML_TOK_COMMA;
  ------------------
  |  |  107|      0|#  define XML_TOK_COMMA 38
  ------------------
 1090|      0|  case BT_LSQB:
  ------------------
  |  Branch (1090:3): [True: 0, False: 25]
  ------------------
 1091|      0|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1092|      0|    return XML_TOK_OPEN_BRACKET;
  ------------------
  |  |   92|      0|#  define XML_TOK_OPEN_BRACKET 25
  ------------------
 1093|      0|  case BT_RSQB:
  ------------------
  |  Branch (1093:3): [True: 0, False: 25]
  ------------------
 1094|      0|    ptr += MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1095|      0|    if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|      0|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|      0|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1095:9): [True: 0, False: 0]
  ------------------
 1096|      0|      return -XML_TOK_CLOSE_BRACKET;
  ------------------
  |  |   93|      0|#  define XML_TOK_CLOSE_BRACKET 26
  ------------------
 1097|      0|    if (CHAR_MATCHES(enc, ptr, ASCII_RSQB)) {
  ------------------
  |  |  803|      0|#define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  786|      0|#define BIG2_CHAR_MATCHES(p, c) ((p)[0] == 0 && (p)[1] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (786:34): [True: 0, False: 0]
  |  |  |  |  |  Branch (786:49): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1098|      0|      REQUIRE_CHARS(enc, ptr, end, 2);
  ------------------
  |  |  134|      0|    {                                                                          \
  |  |  135|      0|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  ------------------
  |  |  |  |  129|      0|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (135:11): [True: 0, False: 0]
  |  |  ------------------
  |  |  136|      0|        return XML_TOK_PARTIAL;                                                \
  |  |  ------------------
  |  |  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  ------------------
  |  |  137|      0|      }                                                                        \
  |  |  138|      0|    }
  ------------------
 1099|      0|      if (CHAR_MATCHES(enc, ptr + MINBPC(enc), ASCII_GT)) {
  ------------------
  |  |  803|      0|#define CHAR_MATCHES(enc, p, c) BIG2_CHAR_MATCHES(p, c)
  |  |  ------------------
  |  |  |  |  786|      0|#define BIG2_CHAR_MATCHES(p, c) ((p)[0] == 0 && (p)[1] == (c))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (786:34): [True: 0, False: 0]
  |  |  |  |  |  Branch (786:49): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1100|      0|        *nextTokPtr = ptr + 2 * MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1101|      0|        return XML_TOK_COND_SECT_CLOSE;
  ------------------
  |  |  103|      0|#  define XML_TOK_COND_SECT_CLOSE 34      /* ]]> */
  ------------------
 1102|      0|      }
 1103|      0|    }
 1104|      0|    *nextTokPtr = ptr;
 1105|      0|    return XML_TOK_CLOSE_BRACKET;
  ------------------
  |  |   93|      0|#  define XML_TOK_CLOSE_BRACKET 26
  ------------------
 1106|      0|  case BT_LPAR:
  ------------------
  |  Branch (1106:3): [True: 0, False: 25]
  ------------------
 1107|      0|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1108|      0|    return XML_TOK_OPEN_PAREN;
  ------------------
  |  |   90|      0|#  define XML_TOK_OPEN_PAREN 23
  ------------------
 1109|      0|  case BT_RPAR:
  ------------------
  |  Branch (1109:3): [True: 0, False: 25]
  ------------------
 1110|      0|    ptr += MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1111|      0|    if (! HAS_CHAR(enc, ptr, end))
  ------------------
  |  |  131|      0|#  define HAS_CHAR(enc, ptr, end) HAS_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  129|      0|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  799|      0|#define MINBPC(enc) 2
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1111:9): [True: 0, False: 0]
  ------------------
 1112|      0|      return -XML_TOK_CLOSE_PAREN;
  ------------------
  |  |   91|      0|#  define XML_TOK_CLOSE_PAREN 24
  ------------------
 1113|      0|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  801|      0|#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  784|      0|  ((p)[0] == 0 ? SB_BYTE_TYPE(enc, p + 1) : unicode_byte_type((p)[0], (p)[1]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|      0|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (784:3): [True: 0, False: 0]
  |  |  |  |  |  Branch (784:4): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1114|      0|    case BT_AST:
  ------------------
  |  Branch (1114:5): [True: 0, False: 0]
  ------------------
 1115|      0|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1116|      0|      return XML_TOK_CLOSE_PAREN_ASTERISK;
  ------------------
  |  |  105|      0|#  define XML_TOK_CLOSE_PAREN_ASTERISK 36 /* )* */
  ------------------
 1117|      0|    case BT_QUEST:
  ------------------
  |  Branch (1117:5): [True: 0, False: 0]
  ------------------
 1118|      0|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1119|      0|      return XML_TOK_CLOSE_PAREN_QUESTION;
  ------------------
  |  |  104|      0|#  define XML_TOK_CLOSE_PAREN_QUESTION 35 /* )? */
  ------------------
 1120|      0|    case BT_PLUS:
  ------------------
  |  Branch (1120:5): [True: 0, False: 0]
  ------------------
 1121|      0|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1122|      0|      return XML_TOK_CLOSE_PAREN_PLUS;
  ------------------
  |  |  106|      0|#  define XML_TOK_CLOSE_PAREN_PLUS 37     /* )+ */
  ------------------
 1123|      0|    case BT_CR:
  ------------------
  |  Branch (1123:5): [True: 0, False: 0]
  ------------------
 1124|      0|    case BT_LF:
  ------------------
  |  Branch (1124:5): [True: 0, False: 0]
  ------------------
 1125|      0|    case BT_S:
  ------------------
  |  Branch (1125:5): [True: 0, False: 0]
  ------------------
 1126|      0|    case BT_GT:
  ------------------
  |  Branch (1126:5): [True: 0, False: 0]
  ------------------
 1127|      0|    case BT_COMMA:
  ------------------
  |  Branch (1127:5): [True: 0, False: 0]
  ------------------
 1128|      0|    case BT_VERBAR:
  ------------------
  |  Branch (1128:5): [True: 0, False: 0]
  ------------------
 1129|      0|    case BT_RPAR:
  ------------------
  |  Branch (1129:5): [True: 0, False: 0]
  ------------------
 1130|      0|      *nextTokPtr = ptr;
 1131|      0|      return XML_TOK_CLOSE_PAREN;
  ------------------
  |  |   91|      0|#  define XML_TOK_CLOSE_PAREN 24
  ------------------
 1132|      0|    }
 1133|      0|    *nextTokPtr = ptr;
 1134|      0|    return XML_TOK_INVALID;
  ------------------
  |  |   57|      0|#  define XML_TOK_INVALID 0
  ------------------
 1135|      0|  case BT_VERBAR:
  ------------------
  |  Branch (1135:3): [True: 0, False: 25]
  ------------------
 1136|      0|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1137|      0|    return XML_TOK_OR;
  ------------------
  |  |   88|      0|#  define XML_TOK_OR 21         /* | */
  ------------------
 1138|      0|  case BT_GT:
  ------------------
  |  Branch (1138:3): [True: 0, False: 25]
  ------------------
 1139|      0|    *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1140|      0|    return XML_TOK_DECL_CLOSE;
  ------------------
  |  |   84|      0|#  define XML_TOK_DECL_CLOSE 17 /* > */
  ------------------
 1141|      0|  case BT_NUM:
  ------------------
  |  Branch (1141:3): [True: 0, False: 25]
  ------------------
 1142|      0|    return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  798|      0|#define PREFIX(ident) big2_##ident
  ------------------
                  return PREFIX(scanPoundName)(enc, ptr + MINBPC(enc), end, nextTokPtr);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1143|      0|#  define LEAD_CASE(n)                                                         \
 1144|      0|  case BT_LEAD##n:                                                             \
 1145|      0|    if (end - ptr < n)                                                         \
 1146|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
 1147|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
 1148|      0|      *nextTokPtr = ptr;                                                       \
 1149|      0|      return XML_TOK_INVALID;                                                  \
 1150|      0|    }                                                                          \
 1151|      0|    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
 1152|      0|      ptr += n;                                                                \
 1153|      0|      tok = XML_TOK_NAME;                                                      \
 1154|      0|      break;                                                                   \
 1155|      0|    }                                                                          \
 1156|      0|    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
 1157|      0|      ptr += n;                                                                \
 1158|      0|      tok = XML_TOK_NMTOKEN;                                                   \
 1159|      0|      break;                                                                   \
 1160|      0|    }                                                                          \
 1161|      0|    *nextTokPtr = ptr;                                                         \
 1162|      0|    return XML_TOK_INVALID;
 1163|      0|    LEAD_CASE(2)
  ------------------
  |  | 1144|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1144:3): [True: 0, False: 25]
  |  |  ------------------
  |  | 1145|      0|    if (end - ptr < n)                                                         \
  |  |  ------------------
  |  |  |  Branch (1145:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1146|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  ------------------
  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  ------------------
  |  | 1147|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  ------------------
  |  |  |  |  808|      0|#define IS_INVALID_CHAR(enc, p, n) BIG2_IS_INVALID_CHAR(p, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  795|      0|  ((n) == 4 && ((unsigned char)(p)[2] & 0xFC) != 0xDC)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (795:4): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (795:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1148|      0|      *nextTokPtr = ptr;                                                       \
  |  | 1149|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  | 1150|      0|    }                                                                          \
  |  | 1151|      0|    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
  |  |  ------------------
  |  |  |  |  806|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:35): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1152|      0|      ptr += n;                                                                \
  |  | 1153|      0|      tok = XML_TOK_NAME;                                                      \
  |  |  ------------------
  |  |  |  |   85|      0|#  define XML_TOK_NAME 18
  |  |  ------------------
  |  | 1154|      0|      break;                                                                   \
  |  | 1155|      0|    }                                                                          \
  |  | 1156|      0|    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
  |  |  ------------------
  |  |  |  |  804|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (804:33): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1157|      0|      ptr += n;                                                                \
  |  | 1158|      0|      tok = XML_TOK_NMTOKEN;                                                   \
  |  |  ------------------
  |  |  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  |  |  ------------------
  |  | 1159|      0|      break;                                                                   \
  |  | 1160|      0|    }                                                                          \
  |  | 1161|      0|    *nextTokPtr = ptr;                                                         \
  |  | 1162|      0|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
 1164|      0|    LEAD_CASE(3)
  ------------------
  |  | 1144|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1144:3): [True: 0, False: 25]
  |  |  ------------------
  |  | 1145|      0|    if (end - ptr < n)                                                         \
  |  |  ------------------
  |  |  |  Branch (1145:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1146|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  ------------------
  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  ------------------
  |  | 1147|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  ------------------
  |  |  |  |  808|      0|#define IS_INVALID_CHAR(enc, p, n) BIG2_IS_INVALID_CHAR(p, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  795|      0|  ((n) == 4 && ((unsigned char)(p)[2] & 0xFC) != 0xDC)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (795:4): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (795:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1148|      0|      *nextTokPtr = ptr;                                                       \
  |  | 1149|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  | 1150|      0|    }                                                                          \
  |  | 1151|      0|    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
  |  |  ------------------
  |  |  |  |  806|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:35): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1152|      0|      ptr += n;                                                                \
  |  | 1153|      0|      tok = XML_TOK_NAME;                                                      \
  |  |  ------------------
  |  |  |  |   85|      0|#  define XML_TOK_NAME 18
  |  |  ------------------
  |  | 1154|      0|      break;                                                                   \
  |  | 1155|      0|    }                                                                          \
  |  | 1156|      0|    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
  |  |  ------------------
  |  |  |  |  804|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (804:33): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1157|      0|      ptr += n;                                                                \
  |  | 1158|      0|      tok = XML_TOK_NMTOKEN;                                                   \
  |  |  ------------------
  |  |  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  |  |  ------------------
  |  | 1159|      0|      break;                                                                   \
  |  | 1160|      0|    }                                                                          \
  |  | 1161|      0|    *nextTokPtr = ptr;                                                         \
  |  | 1162|      0|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
 1165|      0|    LEAD_CASE(4)
  ------------------
  |  | 1144|      0|  case BT_LEAD##n:                                                             \
  |  |  ------------------
  |  |  |  Branch (1144:3): [True: 0, False: 25]
  |  |  ------------------
  |  | 1145|      0|    if (end - ptr < n)                                                         \
  |  |  ------------------
  |  |  |  Branch (1145:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1146|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  ------------------
  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  ------------------
  |  | 1147|      0|    if (IS_INVALID_CHAR(enc, ptr, n)) {                                        \
  |  |  ------------------
  |  |  |  |  808|      0|#define IS_INVALID_CHAR(enc, p, n) BIG2_IS_INVALID_CHAR(p, n)
  |  |  |  |  ------------------
  |  |  |  |  |  |  795|      0|  ((n) == 4 && ((unsigned char)(p)[2] & 0xFC) != 0xDC)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (795:4): [True: 0, Folded]
  |  |  |  |  |  |  |  Branch (795:16): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1148|      0|      *nextTokPtr = ptr;                                                       \
  |  | 1149|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  | 1150|      0|    }                                                                          \
  |  | 1151|      0|    if (IS_NMSTRT_CHAR(enc, ptr, n)) {                                         \
  |  |  ------------------
  |  |  |  |  806|      0|#define IS_NMSTRT_CHAR(enc, p, n) (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (806:35): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1152|      0|      ptr += n;                                                                \
  |  | 1153|      0|      tok = XML_TOK_NAME;                                                      \
  |  |  ------------------
  |  |  |  |   85|      0|#  define XML_TOK_NAME 18
  |  |  ------------------
  |  | 1154|      0|      break;                                                                   \
  |  | 1155|      0|    }                                                                          \
  |  | 1156|      0|    if (IS_NAME_CHAR(enc, ptr, n)) {                                           \
  |  |  ------------------
  |  |  |  |  804|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (804:33): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1157|      0|      ptr += n;                                                                \
  |  | 1158|      0|      tok = XML_TOK_NMTOKEN;                                                   \
  |  |  ------------------
  |  |  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  |  |  ------------------
  |  | 1159|      0|      break;                                                                   \
  |  | 1160|      0|    }                                                                          \
  |  | 1161|      0|    *nextTokPtr = ptr;                                                         \
  |  | 1162|      0|    return XML_TOK_INVALID;
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  ------------------
 1166|      0|#  undef LEAD_CASE
 1167|      0|  case BT_NMSTRT:
  ------------------
  |  Branch (1167:3): [True: 0, False: 25]
  ------------------
 1168|      0|  case BT_HEX:
  ------------------
  |  Branch (1168:3): [True: 0, False: 25]
  ------------------
 1169|      0|    tok = XML_TOK_NAME;
  ------------------
  |  |   85|      0|#  define XML_TOK_NAME 18
  ------------------
 1170|      0|    ptr += MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1171|      0|    break;
 1172|      0|  case BT_DIGIT:
  ------------------
  |  Branch (1172:3): [True: 0, False: 25]
  ------------------
 1173|      0|  case BT_NAME:
  ------------------
  |  Branch (1173:3): [True: 0, False: 25]
  ------------------
 1174|      0|  case BT_MINUS:
  ------------------
  |  Branch (1174:3): [True: 0, False: 25]
  ------------------
 1175|      0|#  ifdef XML_NS
 1176|      0|  case BT_COLON:
  ------------------
  |  Branch (1176:3): [True: 0, False: 25]
  ------------------
 1177|      0|#  endif
 1178|      0|    tok = XML_TOK_NMTOKEN;
  ------------------
  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  ------------------
 1179|      0|    ptr += MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1180|      0|    break;
 1181|     25|  case BT_NONASCII:
  ------------------
  |  Branch (1181:3): [True: 25, False: 0]
  ------------------
 1182|     25|    if (IS_NMSTRT_CHAR_MINBPC(enc, ptr)) {
  ------------------
  |  |  807|     25|#define IS_NMSTRT_CHAR_MINBPC(enc, p) BIG2_IS_NMSTRT_CHAR_MINBPC(p)
  |  |  ------------------
  |  |  |  |  790|     25|  UCS2_GET_NAMING(nmstrtPages, (unsigned char)p[0], (unsigned char)p[1])
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|     25|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:3): [True: 0, False: 25]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1183|      0|      ptr += MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1184|      0|      tok = XML_TOK_NAME;
  ------------------
  |  |   85|      0|#  define XML_TOK_NAME 18
  ------------------
 1185|      0|      break;
 1186|      0|    }
 1187|     25|    if (IS_NAME_CHAR_MINBPC(enc, ptr)) {
  ------------------
  |  |  805|     25|#define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(p)
  |  |  ------------------
  |  |  |  |  788|     25|  UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1])
  |  |  |  |  ------------------
  |  |  |  |  |  |   87|     25|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (87:3): [True: 0, False: 25]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|      0|      ptr += MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1189|      0|      tok = XML_TOK_NMTOKEN;
  ------------------
  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  ------------------
 1190|      0|      break;
 1191|      0|    }
 1192|     25|    EXPAT_FALLTHROUGH;
  ------------------
  |  |   47|     25|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  ------------------
 1193|     25|  default:
  ------------------
  |  Branch (1193:3): [True: 0, False: 25]
  ------------------
 1194|     25|    *nextTokPtr = ptr;
 1195|     25|    return XML_TOK_INVALID;
  ------------------
  |  |   57|     25|#  define XML_TOK_INVALID 0
  ------------------
 1196|     25|  }
 1197|      0|  while (HAS_CHAR(enc, ptr, end)) {
 1198|      0|    switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  801|      0|#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  784|      0|  ((p)[0] == 0 ? SB_BYTE_TYPE(enc, p + 1) : unicode_byte_type((p)[0], (p)[1]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|      0|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (784:4): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1199|      0|      CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|      0|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   82|      0|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  805|      0|#define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  788|      0|  UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|      0|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   83|      0|      *nextTokPtr = ptr;                                                       \
  |  |   84|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|      0|    }                                                                          \
  |  |   86|      0|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|      0|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   89|      0|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   90|      0|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   91|      0|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  799|      0|#define MINBPC(enc) 2
  |  |  ------------------
  |  |   93|      0|    break;                                                                     \
  |  |   94|      0|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|#define IS_INVALID_CHAR(enc, p, n) BIG2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  795|      0|  ((n) == 4 && ((unsigned char)(p)[2] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (795:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (795:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  804|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   95|      0|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|#define IS_INVALID_CHAR(enc, p, n) BIG2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  795|      0|  ((n) == 4 && ((unsigned char)(p)[2] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (795:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (795:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  804|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   96|      0|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|#define IS_INVALID_CHAR(enc, p, n) BIG2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  795|      0|  ((n) == 4 && ((unsigned char)(p)[2] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (795:4): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  Branch (795:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  804|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
 1200|      0|    case BT_GT:
  ------------------
  |  Branch (1200:5): [True: 0, False: 0]
  ------------------
 1201|      0|    case BT_RPAR:
  ------------------
  |  Branch (1201:5): [True: 0, False: 0]
  ------------------
 1202|      0|    case BT_COMMA:
  ------------------
  |  Branch (1202:5): [True: 0, False: 0]
  ------------------
 1203|      0|    case BT_VERBAR:
  ------------------
  |  Branch (1203:5): [True: 0, False: 0]
  ------------------
 1204|      0|    case BT_LSQB:
  ------------------
  |  Branch (1204:5): [True: 0, False: 0]
  ------------------
 1205|      0|    case BT_PERCNT:
  ------------------
  |  Branch (1205:5): [True: 0, False: 0]
  ------------------
 1206|      0|    case BT_S:
  ------------------
  |  Branch (1206:5): [True: 0, False: 0]
  ------------------
 1207|      0|    case BT_CR:
  ------------------
  |  Branch (1207:5): [True: 0, False: 0]
  ------------------
 1208|      0|    case BT_LF:
  ------------------
  |  Branch (1208:5): [True: 0, False: 0]
  ------------------
 1209|      0|      *nextTokPtr = ptr;
 1210|      0|      return tok;
 1211|      0|#  ifdef XML_NS
 1212|      0|    case BT_COLON:
  ------------------
  |  Branch (1212:5): [True: 0, False: 0]
  ------------------
 1213|      0|      ptr += MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1214|      0|      switch (tok) {
  ------------------
  |  Branch (1214:15): [True: 0, False: 0]
  ------------------
 1215|      0|      case XML_TOK_NAME:
  ------------------
  |  |   85|      0|#  define XML_TOK_NAME 18
  ------------------
  |  Branch (1215:7): [True: 0, False: 0]
  ------------------
 1216|      0|        REQUIRE_CHAR(enc, ptr, end);
  ------------------
  |  |  140|      0|#  define REQUIRE_CHAR(enc, ptr, end) REQUIRE_CHARS(enc, ptr, end, 1)
  |  |  ------------------
  |  |  |  |  134|      0|    {                                                                          \
  |  |  |  |  135|      0|      if (! HAS_CHARS(enc, ptr, end, count)) {                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  129|      0|    ((end) - (ptr) >= ((count) * MINBPC(enc)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  799|      0|#define MINBPC(enc) 2
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (135:11): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  136|      0|        return XML_TOK_PARTIAL;                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|#  define XML_TOK_PARTIAL -1      /* only part of a token */
  |  |  |  |  ------------------
  |  |  |  |  137|      0|      }                                                                        \
  |  |  |  |  138|      0|    }
  |  |  ------------------
  ------------------
 1217|      0|        tok = XML_TOK_PREFIXED_NAME;
  ------------------
  |  |  118|      0|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
 1218|      0|        switch (BYTE_TYPE(enc, ptr)) {
  ------------------
  |  |  801|      0|#define BYTE_TYPE(enc, p) BIG2_BYTE_TYPE(enc, p)
  |  |  ------------------
  |  |  |  |  784|      0|  ((p)[0] == 0 ? SB_BYTE_TYPE(enc, p + 1) : unicode_byte_type((p)[0], (p)[1]))
  |  |  |  |  ------------------
  |  |  |  |  |  |  231|      0|  (((const struct normal_encoding *)(enc))->type[(unsigned char)*(p)])
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (784:4): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1219|      0|          CHECK_NAME_CASES(enc, ptr, end, nextTokPtr)
  ------------------
  |  |   81|      0|  case BT_NONASCII:                                                            \
  |  |  ------------------
  |  |  |  Branch (81:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   82|      0|    if (! IS_NAME_CHAR_MINBPC(enc, ptr)) {                                     \
  |  |  ------------------
  |  |  |  |  805|      0|#define IS_NAME_CHAR_MINBPC(enc, p) BIG2_IS_NAME_CHAR_MINBPC(p)
  |  |  |  |  ------------------
  |  |  |  |  |  |  788|      0|  UCS2_GET_NAMING(namePages, (unsigned char)p[0], (unsigned char)p[1])
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   87|      0|  (namingBitmap[(pages[hi] << 3) + ((lo) >> 5)] & (1u << ((lo) & 0x1F)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (82:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   83|      0|      *nextTokPtr = ptr;                                                       \
  |  |   84|      0|      return XML_TOK_INVALID;                                                  \
  |  |  ------------------
  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  ------------------
  |  |   85|      0|    }                                                                          \
  |  |   86|      0|    EXPAT_FALLTHROUGH;                                                         \
  |  |  ------------------
  |  |  |  |   47|      0|#      define EXPAT_FALLTHROUGH __attribute__((fallthrough))
  |  |  ------------------
  |  |   87|      0|  case BT_NMSTRT:                                                              \
  |  |  ------------------
  |  |  |  Branch (87:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|  case BT_HEX:                                                                 \
  |  |  ------------------
  |  |  |  Branch (88:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   89|      0|  case BT_DIGIT:                                                               \
  |  |  ------------------
  |  |  |  Branch (89:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   90|      0|  case BT_NAME:                                                                \
  |  |  ------------------
  |  |  |  Branch (90:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   91|      0|  case BT_MINUS:                                                               \
  |  |  ------------------
  |  |  |  Branch (91:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   92|      0|    ptr += MINBPC(enc);                                                        \
  |  |  ------------------
  |  |  |  |  799|      0|#define MINBPC(enc) 2
  |  |  ------------------
  |  |   93|      0|    break;                                                                     \
  |  |   94|      0|    CHECK_NAME_CASE(2, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|#define IS_INVALID_CHAR(enc, p, n) BIG2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  795|      0|  ((n) == 4 && ((unsigned char)(p)[2] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (795:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (795:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  804|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   95|      0|    CHECK_NAME_CASE(3, enc, ptr, end, nextTokPtr)                              \
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|#define IS_INVALID_CHAR(enc, p, n) BIG2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  795|      0|  ((n) == 4 && ((unsigned char)(p)[2] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (795:4): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (795:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  804|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  |  |   96|      0|    CHECK_NAME_CASE(4, enc, ptr, end, nextTokPtr)
  |  |  ------------------
  |  |  |  |   70|      0|  case BT_LEAD##n:                                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (70:3): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   71|      0|    if (end - ptr < n)                                                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (71:9): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   72|      0|      return XML_TOK_PARTIAL_CHAR;                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|#  define XML_TOK_PARTIAL_CHAR -2 /* only part of a multibyte sequence */
  |  |  |  |  ------------------
  |  |  |  |   73|      0|    if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  808|      0|#define IS_INVALID_CHAR(enc, p, n) BIG2_IS_INVALID_CHAR(p, n)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  795|      0|  ((n) == 4 && ((unsigned char)(p)[2] & 0xFC) != 0xDC)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (795:4): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  Branch (795:16): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |                   if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  804|      0|#define IS_NAME_CHAR(enc, p, n) 0
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (73:41): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |   74|      0|      *nextTokPtr = ptr;                                                       \
  |  |  |  |   75|      0|      return XML_TOK_INVALID;                                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|#  define XML_TOK_INVALID 0
  |  |  |  |  ------------------
  |  |  |  |   76|      0|    }                                                                          \
  |  |  |  |   77|      0|    ptr += n;                                                                  \
  |  |  |  |   78|      0|    break;
  |  |  ------------------
  ------------------
 1220|      0|        default:
  ------------------
  |  Branch (1220:9): [True: 0, False: 0]
  ------------------
 1221|      0|          tok = XML_TOK_NMTOKEN;
  ------------------
  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  ------------------
 1222|      0|          break;
 1223|      0|        }
 1224|      0|        break;
 1225|      0|      case XML_TOK_PREFIXED_NAME:
  ------------------
  |  |  118|      0|#  define XML_TOK_PREFIXED_NAME 41
  ------------------
  |  Branch (1225:7): [True: 0, False: 0]
  ------------------
 1226|      0|        tok = XML_TOK_NMTOKEN;
  ------------------
  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  ------------------
 1227|      0|        break;
 1228|      0|      }
 1229|      0|      break;
 1230|      0|#  endif
 1231|      0|    case BT_PLUS:
  ------------------
  |  Branch (1231:5): [True: 0, False: 0]
  ------------------
 1232|      0|      if (tok == XML_TOK_NMTOKEN) {
  ------------------
  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  ------------------
  |  Branch (1232:11): [True: 0, False: 0]
  ------------------
 1233|      0|        *nextTokPtr = ptr;
 1234|      0|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      0|#  define XML_TOK_INVALID 0
  ------------------
 1235|      0|      }
 1236|      0|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1237|      0|      return XML_TOK_NAME_PLUS;
  ------------------
  |  |  101|      0|#  define XML_TOK_NAME_PLUS 32            /* name+ */
  ------------------
 1238|      0|    case BT_AST:
  ------------------
  |  Branch (1238:5): [True: 0, False: 0]
  ------------------
 1239|      0|      if (tok == XML_TOK_NMTOKEN) {
  ------------------
  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  ------------------
  |  Branch (1239:11): [True: 0, False: 0]
  ------------------
 1240|      0|        *nextTokPtr = ptr;
 1241|      0|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      0|#  define XML_TOK_INVALID 0
  ------------------
 1242|      0|      }
 1243|      0|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1244|      0|      return XML_TOK_NAME_ASTERISK;
  ------------------
  |  |  100|      0|#  define XML_TOK_NAME_ASTERISK 31        /* name* */
  ------------------
 1245|      0|    case BT_QUEST:
  ------------------
  |  Branch (1245:5): [True: 0, False: 0]
  ------------------
 1246|      0|      if (tok == XML_TOK_NMTOKEN) {
  ------------------
  |  |   86|      0|#  define XML_TOK_NMTOKEN 19
  ------------------
  |  Branch (1246:11): [True: 0, False: 0]
  ------------------
 1247|      0|        *nextTokPtr = ptr;
 1248|      0|        return XML_TOK_INVALID;
  ------------------
  |  |   57|      0|#  define XML_TOK_INVALID 0
  ------------------
 1249|      0|      }
 1250|      0|      *nextTokPtr = ptr + MINBPC(enc);
  ------------------
  |  |  799|      0|#define MINBPC(enc) 2
  ------------------
 1251|      0|      return XML_TOK_NAME_QUESTION;
  ------------------
  |  |   99|      0|#  define XML_TOK_NAME_QUESTION 30        /* name? */
  ------------------
 1252|      0|    default:
  ------------------
  |  Branch (1252:5): [True: 0, False: 0]
  ------------------
 1253|      0|      *nextTokPtr = ptr;
 1254|      0|      return XML_TOK_INVALID;
  ------------------
  |  |   57|      0|#  define XML_TOK_INVALID 0
  ------------------
 1255|      0|    }
 1256|      0|  }
 1257|      0|  return -tok;
 1258|      0|}

XmlGetUtf8InternalEncoding:
   43|  7.30k|NS(XmlGetUtf8InternalEncoding)(void) {
   44|  7.30k|  return &ns(internal_utf8_encoding).enc;
  ------------------
  |  | 1568|  7.30k|#define ns(x) x
  ------------------
   45|  7.30k|}
XmlInitEncoding:
   83|  19.3k|                    const char *name) {
   84|  19.3k|  int i = getEncodingIndex(name);
   85|  19.3k|  if (i == UNKNOWN_ENC)
  ------------------
  |  Branch (85:7): [True: 1, False: 19.3k]
  ------------------
   86|      1|    return 0;
   87|  19.3k|  SET_INIT_ENC_INDEX(p, i);
  ------------------
  |  | 1446|  19.3k|#define SET_INIT_ENC_INDEX(enc, i) ((enc)->initEnc.isUtf16 = (char)i)
  ------------------
   88|  19.3k|  p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
  ------------------
  |  |  130|  19.3k|#  define XML_PROLOG_STATE 0
  ------------------
                p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
  ------------------
  |  | 1567|  19.3k|#define NS(x) x
  ------------------
   89|  19.3k|  p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
  ------------------
  |  |  131|  19.3k|#  define XML_CONTENT_STATE 1
  ------------------
                p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
  ------------------
  |  | 1567|  19.3k|#define NS(x) x
  ------------------
   90|  19.3k|  p->initEnc.updatePosition = initUpdatePosition;
   91|  19.3k|  p->encPtr = encPtr;
   92|  19.3k|  *encPtr = &(p->initEnc);
   93|  19.3k|  return 1;
   94|  19.3k|}
XmlParseXmlDecl:
  119|    212|                    int *standalone) {
  120|    212|  return doParseXmlDecl(NS(findEncoding), isGeneralTextEntity, enc, ptr, end,
  ------------------
  |  | 1567|    212|#define NS(x) x
  ------------------
  121|    212|                        badPtr, versionPtr, versionEndPtr, encodingName,
  122|    212|                        encoding, standalone);
  123|    212|}
XmlGetUtf8InternalEncodingNS:
   43|  4.76k|NS(XmlGetUtf8InternalEncoding)(void) {
   44|  4.76k|  return &ns(internal_utf8_encoding).enc;
  ------------------
  |  | 1578|  4.76k|#  define ns(x) x##_ns
  ------------------
   45|  4.76k|}
XmlInitEncodingNS:
   83|  4.76k|                    const char *name) {
   84|  4.76k|  int i = getEncodingIndex(name);
   85|  4.76k|  if (i == UNKNOWN_ENC)
  ------------------
  |  Branch (85:7): [True: 1, False: 4.76k]
  ------------------
   86|      1|    return 0;
   87|  4.76k|  SET_INIT_ENC_INDEX(p, i);
  ------------------
  |  | 1446|  4.76k|#define SET_INIT_ENC_INDEX(enc, i) ((enc)->initEnc.isUtf16 = (char)i)
  ------------------
   88|  4.76k|  p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
  ------------------
  |  |  130|  4.76k|#  define XML_PROLOG_STATE 0
  ------------------
                p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
  ------------------
  |  | 1577|  4.76k|#  define NS(x) x##NS
  ------------------
   89|  4.76k|  p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
  ------------------
  |  |  131|  4.76k|#  define XML_CONTENT_STATE 1
  ------------------
                p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
  ------------------
  |  | 1577|  4.76k|#  define NS(x) x##NS
  ------------------
   90|  4.76k|  p->initEnc.updatePosition = initUpdatePosition;
   91|  4.76k|  p->encPtr = encPtr;
   92|  4.76k|  *encPtr = &(p->initEnc);
   93|  4.76k|  return 1;
   94|  4.76k|}
XmlParseXmlDeclNS:
  119|    269|                    int *standalone) {
  120|    269|  return doParseXmlDecl(NS(findEncoding), isGeneralTextEntity, enc, ptr, end,
  ------------------
  |  | 1577|    269|#  define NS(x) x##NS
  ------------------
  121|    269|                        badPtr, versionPtr, versionEndPtr, encodingName,
  122|    269|                        encoding, standalone);
  123|    269|}
xmltok.c:initScanProlog:
   69|  7.30k|                   const char **nextTokPtr) {
   70|  7.30k|  return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE,
  ------------------
  |  | 1567|  7.30k|#define NS(x) x
  ------------------
                return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE,
  ------------------
  |  |  130|  7.30k|#  define XML_PROLOG_STATE 0
  ------------------
   71|  7.30k|                  ptr, end, nextTokPtr);
   72|  7.30k|}
xmltok.c:findEncoding:
   97|     31|NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) {
   98|     31|#  define ENCODING_MAX 128
   99|     31|  char buf[ENCODING_MAX] = "";
  100|     31|  char *p = buf;
  101|     31|  int i;
  102|     31|  XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
  ------------------
  |  |  275|     31|    (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim))
  ------------------
  103|     31|  if (ptr != end)
  ------------------
  |  Branch (103:7): [True: 1, False: 30]
  ------------------
  104|      1|    return NULL;
  105|     30|  *p = 0;
  106|     30|  if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2)
  ------------------
  |  Branch (106:7): [True: 1, False: 29]
  |  Branch (106:34): [True: 0, False: 1]
  ------------------
  107|      0|    return enc;
  108|     30|  i = getEncodingIndex(buf);
  109|     30|  if (i == UNKNOWN_ENC)
  ------------------
  |  Branch (109:7): [True: 26, False: 4]
  ------------------
  110|     26|    return NULL;
  111|      4|  return NS(encodings)[i];
  ------------------
  |  | 1567|      4|#define NS(x) x
  ------------------
  112|     30|}
xmltok.c:initScanPrologNS:
   69|  4.76k|                   const char **nextTokPtr) {
   70|  4.76k|  return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE,
  ------------------
  |  | 1577|  4.76k|#  define NS(x) x##NS
  ------------------
                return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE,
  ------------------
  |  |  130|  4.76k|#  define XML_PROLOG_STATE 0
  ------------------
   71|  4.76k|                  ptr, end, nextTokPtr);
   72|  4.76k|}
xmltok.c:findEncodingNS:
   97|     37|NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) {
   98|     37|#  define ENCODING_MAX 128
   99|     37|  char buf[ENCODING_MAX] = "";
  100|     37|  char *p = buf;
  101|     37|  int i;
  102|     37|  XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
  ------------------
  |  |  275|     37|    (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim))
  ------------------
  103|     37|  if (ptr != end)
  ------------------
  |  Branch (103:7): [True: 1, False: 36]
  ------------------
  104|      1|    return NULL;
  105|     36|  *p = 0;
  106|     36|  if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2)
  ------------------
  |  Branch (106:7): [True: 1, False: 35]
  |  Branch (106:34): [True: 0, False: 1]
  ------------------
  107|      0|    return enc;
  108|     36|  i = getEncodingIndex(buf);
  109|     36|  if (i == UNKNOWN_ENC)
  ------------------
  |  Branch (109:7): [True: 33, False: 3]
  ------------------
  110|     33|    return NULL;
  111|      3|  return NS(encodings)[i];
  ------------------
  |  | 1577|      3|#  define NS(x) x##NS
  ------------------
  112|     36|}

_ZN16protobuf_mutator3xml8DocumentD2Ev:
  609|  12.0k|Document::~Document() {
  610|       |  // @@protoc_insertion_point(destructor:protobuf_mutator.xml.Document)
  611|  12.0k|  SharedDtor(*this);
  612|  12.0k|}
_ZNK16protobuf_mutator3xml8Document12GetClassDataEv:
  670|   127k|const ::google::protobuf::internal::ClassData* Document::GetClassData() const {
  671|   127k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
  672|   127k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
  673|   127k|  return _class_data_.base();
  674|   127k|}
_ZN16protobuf_mutator3xml8Document5ClearEv:
  753|      2|PROTOBUF_NOINLINE void Document::Clear() {
  754|       |// @@protoc_insertion_point(message_clear_start:protobuf_mutator.xml.Document)
  755|      2|  ::google::protobuf::internal::TSanWrite(&_impl_);
  756|      2|  ::uint32_t cached_has_bits = 0;
  757|       |  // Prevent compiler warnings about cached_has_bits being unused
  758|      2|  (void) cached_has_bits;
  759|       |
  760|      2|  _impl_.misk1_.Clear();
  761|      2|  _impl_.misk2_.Clear();
  762|      2|  cached_has_bits = _impl_._has_bits_[0];
  763|      2|  if (cached_has_bits & 0x0000000fu) {
  ------------------
  |  Branch (763:7): [True: 0, False: 2]
  ------------------
  764|      0|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (764:9): [True: 0, False: 0]
  ------------------
  765|      0|      _impl_.version_.ClearNonDefaultToEmpty();
  766|      0|    }
  767|      0|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (767:9): [True: 0, False: 0]
  ------------------
  768|      0|      _impl_.encoding_.ClearNonDefaultToEmpty();
  769|      0|    }
  770|      0|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (770:9): [True: 0, False: 0]
  ------------------
  771|      0|      ABSL_DCHECK(_impl_.doctype_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  772|      0|      _impl_.doctype_->Clear();
  773|      0|    }
  774|      0|    if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (774:9): [True: 0, False: 0]
  ------------------
  775|      0|      ABSL_DCHECK(_impl_.element_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  776|      0|      _impl_.element_->Clear();
  777|      0|    }
  778|      0|  }
  779|      2|  _impl_.standalone_ = false;
  780|      2|  _impl_._has_bits_.Clear();
  781|      2|  _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
  782|      2|}
_ZN16protobuf_mutator3xml11DoctypeDeclD2Ev:
 1063|  6.63k|DoctypeDecl::~DoctypeDecl() {
 1064|       |  // @@protoc_insertion_point(destructor:protobuf_mutator.xml.DoctypeDecl)
 1065|  6.63k|  SharedDtor(*this);
 1066|  6.63k|}
_ZNK16protobuf_mutator3xml11DoctypeDecl12GetClassDataEv:
 1119|  72.4k|const ::google::protobuf::internal::ClassData* DoctypeDecl::GetClassData() const {
 1120|  72.4k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 1121|  72.4k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 1122|  72.4k|  return _class_data_.base();
 1123|  72.4k|}
_ZN16protobuf_mutator3xml4MiskD2Ev:
 1433|    423|Misk::~Misk() {
 1434|       |  // @@protoc_insertion_point(destructor:protobuf_mutator.xml.Misk)
 1435|    423|  SharedDtor(*this);
 1436|    423|}
_ZN16protobuf_mutator3xml4Misk7clear__Ev:
 1447|    406|void Misk::clear__() {
 1448|       |// @@protoc_insertion_point(one_of_clear_start:protobuf_mutator.xml.Misk)
 1449|    406|  ::google::protobuf::internal::TSanWrite(&_impl_);
 1450|    406|  switch (__case()) {
  ------------------
  |  Branch (1450:11): [True: 406, False: 0]
  ------------------
 1451|     94|    case kPi: {
  ------------------
  |  Branch (1451:5): [True: 94, False: 312]
  ------------------
 1452|     94|      if (GetArena() == nullptr) {
  ------------------
  |  Branch (1452:11): [True: 94, False: 0]
  ------------------
 1453|     94|        delete _impl_.__.pi_;
 1454|     94|      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
  ------------------
  |  Branch (1454:18): [Folded, False: 0]
  ------------------
 1455|      0|        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.__.pi_);
 1456|      0|      }
 1457|     94|      break;
 1458|      0|    }
 1459|    312|    case kComment: {
  ------------------
  |  Branch (1459:5): [True: 312, False: 94]
  ------------------
 1460|    312|      _impl_.__.comment_.Destroy();
 1461|    312|      break;
 1462|      0|    }
 1463|      0|    case __NOT_SET: {
  ------------------
  |  Branch (1463:5): [True: 0, False: 406]
  ------------------
 1464|      0|      break;
 1465|      0|    }
 1466|    406|  }
 1467|    406|  _impl_._oneof_case_[0] = __NOT_SET;
 1468|    406|}
_ZNK16protobuf_mutator3xml4Misk12GetClassDataEv:
 1501|  4.18k|const ::google::protobuf::internal::ClassData* Misk::GetClassData() const {
 1502|  4.18k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 1503|  4.18k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 1504|  4.18k|  return _class_data_.base();
 1505|  4.18k|}
_ZN16protobuf_mutator3xml7ElementD2Ev:
 1748|  6.98k|Element::~Element() {
 1749|       |  // @@protoc_insertion_point(destructor:protobuf_mutator.xml.Element)
 1750|  6.98k|  SharedDtor(*this);
 1751|  6.98k|}
_ZNK16protobuf_mutator3xml7Element12GetClassDataEv:
 1802|  80.4k|const ::google::protobuf::internal::ClassData* Element::GetClassData() const {
 1803|  80.4k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 1804|  80.4k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 1805|  80.4k|  return _class_data_.base();
 1806|  80.4k|}
_ZN16protobuf_mutator3xml3TagD2Ev:
 2041|  6.96k|Tag::~Tag() {
 2042|       |  // @@protoc_insertion_point(destructor:protobuf_mutator.xml.Tag)
 2043|  6.96k|  SharedDtor(*this);
 2044|  6.96k|}
_ZNK16protobuf_mutator3xml3Tag12GetClassDataEv:
 2095|  70.7k|const ::google::protobuf::internal::ClassData* Tag::GetClassData() const {
 2096|  70.7k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 2097|  70.7k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 2098|  70.7k|  return _class_data_.base();
 2099|  70.7k|}
_ZN16protobuf_mutator3xml9ReferenceD2Ev:
 2331|      1|Reference::~Reference() {
 2332|       |  // @@protoc_insertion_point(destructor:protobuf_mutator.xml.Reference)
 2333|      1|  SharedDtor(*this);
 2334|      1|}
_ZNK16protobuf_mutator3xml9Reference12GetClassDataEv:
 2373|     11|const ::google::protobuf::internal::ClassData* Reference::GetClassData() const {
 2374|     11|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 2375|     11|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 2376|     11|  return _class_data_.base();
 2377|     11|}
_ZN16protobuf_mutator3xml2PiD2Ev:
 2603|     94|Pi::~Pi() {
 2604|       |  // @@protoc_insertion_point(destructor:protobuf_mutator.xml.Pi)
 2605|     94|  SharedDtor(*this);
 2606|     94|}
_ZNK16protobuf_mutator3xml2Pi12GetClassDataEv:
 2646|    974|const ::google::protobuf::internal::ClassData* Pi::GetClassData() const {
 2647|    974|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 2648|    974|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 2649|    974|  return _class_data_.base();
 2650|    974|}
_ZN16protobuf_mutator3xml7ContentD2Ev:
 2938|  3.55k|Content::~Content() {
 2939|       |  // @@protoc_insertion_point(destructor:protobuf_mutator.xml.Content)
 2940|  3.55k|  SharedDtor(*this);
 2941|  3.55k|}
_ZN16protobuf_mutator3xml7Content7clear__Ev:
 2952|  1.05k|void Content::clear__() {
 2953|       |// @@protoc_insertion_point(one_of_clear_start:protobuf_mutator.xml.Content)
 2954|  1.05k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 2955|  1.05k|  switch (__case()) {
  ------------------
  |  Branch (2955:11): [True: 1.05k, False: 0]
  ------------------
 2956|    552|    case kCharData: {
  ------------------
  |  Branch (2956:5): [True: 552, False: 506]
  ------------------
 2957|    552|      _impl_.__.char_data_.Destroy();
 2958|    552|      break;
 2959|      0|    }
 2960|    329|    case kElement: {
  ------------------
  |  Branch (2960:5): [True: 329, False: 729]
  ------------------
 2961|    329|      if (GetArena() == nullptr) {
  ------------------
  |  Branch (2961:11): [True: 329, False: 0]
  ------------------
 2962|    329|        delete _impl_.__.element_;
 2963|    329|      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
  ------------------
  |  Branch (2963:18): [Folded, False: 0]
  ------------------
 2964|      0|        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.__.element_);
 2965|      0|      }
 2966|    329|      break;
 2967|      0|    }
 2968|      1|    case kReference: {
  ------------------
  |  Branch (2968:5): [True: 1, False: 1.05k]
  ------------------
 2969|      1|      if (GetArena() == nullptr) {
  ------------------
  |  Branch (2969:11): [True: 1, False: 0]
  ------------------
 2970|      1|        delete _impl_.__.reference_;
 2971|      1|      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
  ------------------
  |  Branch (2971:18): [Folded, False: 0]
  ------------------
 2972|      0|        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.__.reference_);
 2973|      0|      }
 2974|      1|      break;
 2975|      0|    }
 2976|    175|    case kCdsect: {
  ------------------
  |  Branch (2976:5): [True: 175, False: 883]
  ------------------
 2977|    175|      _impl_.__.cdsect_.Destroy();
 2978|    175|      break;
 2979|      0|    }
 2980|      1|    case kMisk: {
  ------------------
  |  Branch (2980:5): [True: 1, False: 1.05k]
  ------------------
 2981|      1|      if (GetArena() == nullptr) {
  ------------------
  |  Branch (2981:11): [True: 1, False: 0]
  ------------------
 2982|      1|        delete _impl_.__.misk_;
 2983|      1|      } else if (::google::protobuf::internal::DebugHardenClearOneofMessageOnArena()) {
  ------------------
  |  Branch (2983:18): [Folded, False: 0]
  ------------------
 2984|      0|        ::google::protobuf::internal::MaybePoisonAfterClear(_impl_.__.misk_);
 2985|      0|      }
 2986|      1|      break;
 2987|      0|    }
 2988|      0|    case __NOT_SET: {
  ------------------
  |  Branch (2988:5): [True: 0, False: 1.05k]
  ------------------
 2989|      0|      break;
 2990|      0|    }
 2991|  1.05k|  }
 2992|  1.05k|  _impl_._oneof_case_[0] = __NOT_SET;
 2993|  1.05k|}
_ZNK16protobuf_mutator3xml7Content12GetClassDataEv:
 3026|  28.0k|const ::google::protobuf::internal::ClassData* Content::GetClassData() const {
 3027|  28.0k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 3028|  28.0k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 3029|  28.0k|  return _class_data_.base();
 3030|  28.0k|}
_ZN16protobuf_mutator3xml9AttributeD2Ev:
 3344|    383|Attribute::~Attribute() {
 3345|       |  // @@protoc_insertion_point(destructor:protobuf_mutator.xml.Attribute)
 3346|    383|  SharedDtor(*this);
 3347|    383|}
_ZNK16protobuf_mutator3xml9Attribute12GetClassDataEv:
 3387|  4.25k|const ::google::protobuf::internal::ClassData* Attribute::GetClassData() const {
 3388|  4.25k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 3389|  4.25k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 3390|  4.25k|  return _class_data_.base();
 3391|  4.25k|}
_ZN16protobuf_mutator3xml5InputC2EPN6google8protobuf5ArenaE:
 3585|  12.0k|    : ::google::protobuf::Message(arena) {
 3586|  12.0k|#endif  // PROTOBUF_CUSTOM_VTABLE
 3587|  12.0k|  SharedCtor(arena);
 3588|       |  // @@protoc_insertion_point(arena_constructor:protobuf_mutator.xml.Input)
 3589|  12.0k|}
_ZN16protobuf_mutator3xml5InputD2Ev:
 3631|  12.0k|Input::~Input() {
 3632|       |  // @@protoc_insertion_point(destructor:protobuf_mutator.xml.Input)
 3633|  12.0k|  SharedDtor(*this);
 3634|  12.0k|}
_ZNK16protobuf_mutator3xml5Input12GetClassDataEv:
 3673|   146k|const ::google::protobuf::internal::ClassData* Input::GetClassData() const {
 3674|   146k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 3675|   146k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 3676|   146k|  return _class_data_.base();
 3677|   146k|}
_ZN16protobuf_mutator3xml5Input5ClearEv:
 3718|  24.1k|PROTOBUF_NOINLINE void Input::Clear() {
 3719|       |// @@protoc_insertion_point(message_clear_start:protobuf_mutator.xml.Input)
 3720|  24.1k|  ::google::protobuf::internal::TSanWrite(&_impl_);
 3721|  24.1k|  ::uint32_t cached_has_bits = 0;
 3722|       |  // Prevent compiler warnings about cached_has_bits being unused
 3723|  24.1k|  (void) cached_has_bits;
 3724|       |
 3725|  24.1k|  cached_has_bits = _impl_._has_bits_[0];
 3726|  24.1k|  if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (3726:7): [True: 2, False: 24.1k]
  ------------------
 3727|      2|    ABSL_DCHECK(_impl_.document_ != nullptr);
  ------------------
  |  |   47|      2|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      2|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      4|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      2|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      4|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      4|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      2|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      2|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      4|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      4|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3728|      2|    _impl_.document_->Clear();
 3729|      2|  }
 3730|  24.1k|  _impl_.options_ = 0u;
 3731|  24.1k|  _impl_._has_bits_.Clear();
 3732|  24.1k|  _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
 3733|  24.1k|}
_ZN16protobuf_mutator3xml8Document10SharedDtorERN6google8protobuf11MessageLiteE:
  613|  12.0k|inline void Document::SharedDtor(MessageLite& self) {
  614|  12.0k|  Document& this_ = static_cast<Document&>(self);
  615|  12.0k|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
  616|  12.0k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  12.0k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  12.0k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  24.1k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  12.0k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  24.1k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  24.1k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 12.0k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  12.0k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 12.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  12.0k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 12.0k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  24.1k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  24.1k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  617|  12.0k|  this_._impl_.version_.Destroy();
  618|  12.0k|  this_._impl_.encoding_.Destroy();
  619|  12.0k|  delete this_._impl_.doctype_;
  620|  12.0k|  delete this_._impl_.element_;
  621|  12.0k|  this_._impl_.~Impl_();
  622|  12.0k|}
_ZN16protobuf_mutator3xml11DoctypeDecl10SharedDtorERN6google8protobuf11MessageLiteE:
 1067|  6.63k|inline void DoctypeDecl::SharedDtor(MessageLite& self) {
 1068|  6.63k|  DoctypeDecl& this_ = static_cast<DoctypeDecl&>(self);
 1069|  6.63k|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 1070|  6.63k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  6.63k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  6.63k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  13.2k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  6.63k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  13.2k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  13.2k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 6.63k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  6.63k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 6.63k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  6.63k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 6.63k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  13.2k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  13.2k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1071|  6.63k|  this_._impl_.name_.Destroy();
 1072|  6.63k|  this_._impl_.external_id_.Destroy();
 1073|  6.63k|  this_._impl_.int_subset_.Destroy();
 1074|  6.63k|  this_._impl_.~Impl_();
 1075|  6.63k|}
_ZN16protobuf_mutator3xml4Misk10SharedDtorERN6google8protobuf11MessageLiteE:
 1437|    423|inline void Misk::SharedDtor(MessageLite& self) {
 1438|    423|  Misk& this_ = static_cast<Misk&>(self);
 1439|    423|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 1440|    423|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|    423|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    423|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    846|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    423|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    846|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    846|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 423, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    423|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 423]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    423|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 423, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    846|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    846|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1441|    423|  if (this_.has__()) {
  ------------------
  |  Branch (1441:7): [True: 406, False: 17]
  ------------------
 1442|    406|    this_.clear__();
 1443|    406|  }
 1444|    423|  this_._impl_.~Impl_();
 1445|    423|}
_ZN16protobuf_mutator3xml7Element10SharedDtorERN6google8protobuf11MessageLiteE:
 1752|  6.98k|inline void Element::SharedDtor(MessageLite& self) {
 1753|  6.98k|  Element& this_ = static_cast<Element&>(self);
 1754|  6.98k|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 1755|  6.98k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  6.98k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  6.98k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  13.9k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  6.98k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  13.9k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  13.9k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 6.98k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  6.98k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 6.98k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  6.98k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 6.98k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  13.9k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  13.9k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1756|  6.98k|  delete this_._impl_.tag_;
 1757|  6.98k|  this_._impl_.~Impl_();
 1758|  6.98k|}
_ZN16protobuf_mutator3xml3Tag10SharedDtorERN6google8protobuf11MessageLiteE:
 2045|  6.96k|inline void Tag::SharedDtor(MessageLite& self) {
 2046|  6.96k|  Tag& this_ = static_cast<Tag&>(self);
 2047|  6.96k|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 2048|  6.96k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  6.96k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  6.96k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  13.9k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  6.96k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  13.9k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  13.9k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 6.96k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  6.96k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 6.96k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  6.96k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 6.96k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  13.9k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  13.9k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2049|  6.96k|  this_._impl_.name_.Destroy();
 2050|  6.96k|  this_._impl_.~Impl_();
 2051|  6.96k|}
_ZN16protobuf_mutator3xml9Reference10SharedDtorERN6google8protobuf11MessageLiteE:
 2335|      1|inline void Reference::SharedDtor(MessageLite& self) {
 2336|      1|  Reference& this_ = static_cast<Reference&>(self);
 2337|      1|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 2338|      1|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      1|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      1|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      2|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      1|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      2|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      2|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      1|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      1|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      2|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      2|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2339|      1|  this_._impl_.name_.Destroy();
 2340|      1|  this_._impl_.~Impl_();
 2341|      1|}
_ZN16protobuf_mutator3xml2Pi10SharedDtorERN6google8protobuf11MessageLiteE:
 2607|     94|inline void Pi::SharedDtor(MessageLite& self) {
 2608|     94|  Pi& this_ = static_cast<Pi&>(self);
 2609|     94|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 2610|     94|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     94|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     94|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    188|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     94|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    188|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    188|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 94, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     94|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 94]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     94|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 94, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    188|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    188|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2611|     94|  this_._impl_.target_.Destroy();
 2612|     94|  this_._impl_.data_.Destroy();
 2613|     94|  this_._impl_.~Impl_();
 2614|     94|}
_ZN16protobuf_mutator3xml7Content10SharedDtorERN6google8protobuf11MessageLiteE:
 2942|  3.55k|inline void Content::SharedDtor(MessageLite& self) {
 2943|  3.55k|  Content& this_ = static_cast<Content&>(self);
 2944|  3.55k|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 2945|  3.55k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  3.55k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  3.55k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  7.11k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  3.55k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  7.11k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  7.11k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3.55k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  3.55k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3.55k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  3.55k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3.55k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  7.11k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  7.11k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2946|  3.55k|  if (this_.has__()) {
  ------------------
  |  Branch (2946:7): [True: 1.05k, False: 2.49k]
  ------------------
 2947|  1.05k|    this_.clear__();
 2948|  1.05k|  }
 2949|  3.55k|  this_._impl_.~Impl_();
 2950|  3.55k|}
_ZN16protobuf_mutator3xml9Attribute10SharedDtorERN6google8protobuf11MessageLiteE:
 3348|    383|inline void Attribute::SharedDtor(MessageLite& self) {
 3349|    383|  Attribute& this_ = static_cast<Attribute&>(self);
 3350|    383|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 3351|    383|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|    383|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    383|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    766|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    383|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    766|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    766|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 383, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    383|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 383]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    383|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 383, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    766|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    766|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3352|    383|  this_._impl_.name_.Destroy();
 3353|    383|  this_._impl_.value_.Destroy();
 3354|    383|  this_._impl_.~Impl_();
 3355|    383|}
_ZN16protobuf_mutator3xml5Input10SharedCtorEPN6google8protobuf5ArenaE:
 3622|  12.0k|inline void Input::SharedCtor(::_pb::Arena* arena) {
 3623|  12.0k|  new (&_impl_) Impl_(internal_visibility(), arena);
 3624|  12.0k|  ::memset(reinterpret_cast<char *>(&_impl_) +
 3625|  12.0k|               offsetof(Impl_, document_),
 3626|  12.0k|           0,
 3627|  12.0k|           offsetof(Impl_, options_) -
 3628|       |               offsetof(Impl_, document_) +
 3629|  12.0k|               sizeof(Impl_::options_));
 3630|  12.0k|}
_ZN16protobuf_mutator3xml5Input5Impl_C2EN6google8protobuf8internal18InternalVisibilityEPNS4_5ArenaE:
 3620|  12.0k|      : _cached_size_{0} {}
_ZN16protobuf_mutator3xml5Input10SharedDtorERN6google8protobuf11MessageLiteE:
 3635|  12.0k|inline void Input::SharedDtor(MessageLite& self) {
 3636|  12.0k|  Input& this_ = static_cast<Input&>(self);
 3637|  12.0k|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 3638|  12.0k|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|  12.0k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  12.0k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  24.1k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  12.0k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  24.1k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  24.1k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 12.0k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  12.0k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 12.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  12.0k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 12.0k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  24.1k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  24.1k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3639|  12.0k|  delete this_._impl_.document_;
 3640|  12.0k|  this_._impl_.~Impl_();
 3641|  12.0k|}

_ZN16protobuf_mutator3xml5InputC2Ev:
 2273|  12.0k|  inline Input() : Input(nullptr) {}
_ZNK16protobuf_mutator3xml5Input8documentEv:
 4483|  12.0k|inline const ::protobuf_mutator::xml::Document& Input::document() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4484|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Input.document)
 4485|  12.0k|  return _internal_document();
 4486|  12.0k|}
_ZNK16protobuf_mutator3xml5Input18_internal_documentEv:
 4478|  12.0k|inline const ::protobuf_mutator::xml::Document& Input::_internal_document() const {
 4479|  12.0k|  ::google::protobuf::internal::TSanRead(&_impl_);
 4480|  12.0k|  const ::protobuf_mutator::xml::Document* p = _impl_.document_;
 4481|  12.0k|  return p != nullptr ? *p : reinterpret_cast<const ::protobuf_mutator::xml::Document&>(::protobuf_mutator::xml::_Document_default_instance_);
  ------------------
  |  Branch (4481:10): [True: 12.0k, False: 13]
  ------------------
 4482|  12.0k|}
_ZNK16protobuf_mutator3xml5Input7optionsEv:
 4573|  12.0k|inline ::uint32_t Input::options() const {
 4574|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Input.options)
 4575|  12.0k|  return _internal_options();
 4576|  12.0k|}
_ZNK16protobuf_mutator3xml5Input17_internal_optionsEv:
 4582|  12.0k|inline ::uint32_t Input::_internal_options() const {
 4583|  12.0k|  ::google::protobuf::internal::TSanRead(&_impl_);
 4584|  12.0k|  return _impl_.options_;
 4585|  12.0k|}
_ZNK16protobuf_mutator3xml8Document11has_versionEv:
 2495|  12.6k|inline bool Document::has_version() const {
 2496|  12.6k|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
 2497|  12.6k|  return value;
 2498|  12.6k|}
_ZNK16protobuf_mutator3xml8Document7versionEv:
 2505|  1.14k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2506|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Document.version)
 2507|  1.14k|  return _internal_version();
 2508|  1.14k|}
_ZNK16protobuf_mutator3xml8Document17_internal_versionEv:
 2522|  1.14k|inline const std::string& Document::_internal_version() const {
 2523|  1.14k|  ::google::protobuf::internal::TSanRead(&_impl_);
 2524|  1.14k|  return _impl_.version_.Get();
 2525|  1.14k|}
_ZNK16protobuf_mutator3xml8Document12has_encodingEv:
 2564|  12.0k|inline bool Document::has_encoding() const {
 2565|  12.0k|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
 2566|  12.0k|  return value;
 2567|  12.0k|}
_ZNK16protobuf_mutator3xml8Document8encodingEv:
 2574|     92|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2575|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Document.encoding)
 2576|     92|  return _internal_encoding();
 2577|     92|}
_ZNK16protobuf_mutator3xml8Document18_internal_encodingEv:
 2591|     92|inline const std::string& Document::_internal_encoding() const {
 2592|     92|  ::google::protobuf::internal::TSanRead(&_impl_);
 2593|     92|  return _impl_.encoding_.Get();
 2594|     92|}
_ZNK16protobuf_mutator3xml8Document14has_standaloneEv:
 2633|  12.0k|inline bool Document::has_standalone() const {
 2634|  12.0k|  bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0;
 2635|  12.0k|  return value;
 2636|  12.0k|}
_ZNK16protobuf_mutator3xml8Document10standaloneEv:
 2642|      3|inline bool Document::standalone() const {
 2643|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Document.standalone)
 2644|      3|  return _internal_standalone();
 2645|      3|}
_ZNK16protobuf_mutator3xml8Document20_internal_standaloneEv:
 2651|      3|inline bool Document::_internal_standalone() const {
 2652|      3|  ::google::protobuf::internal::TSanRead(&_impl_);
 2653|      3|  return _impl_.standalone_;
 2654|      3|}
_ZNK16protobuf_mutator3xml8Document20_internal_misk1_sizeEv:
 2661|  12.2k|inline int Document::_internal_misk1_size() const {
 2662|  12.2k|  return _internal_misk1().size();
 2663|  12.2k|}
_ZNK16protobuf_mutator3xml8Document10misk1_sizeEv:
 2664|  12.2k|inline int Document::misk1_size() const {
 2665|  12.2k|  return _internal_misk1_size();
 2666|  12.2k|}
_ZNK16protobuf_mutator3xml8Document5misk1Ei:
 2683|    180|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2684|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Document.misk1)
 2685|    180|  return _internal_misk1().Get(index);
 2686|    180|}
_ZNK16protobuf_mutator3xml8Document15_internal_misk1Ev:
 2699|  12.4k|Document::_internal_misk1() const {
 2700|  12.4k|  ::google::protobuf::internal::TSanRead(&_impl_);
 2701|  12.4k|  return _impl_.misk1_;
 2702|  12.4k|}
_ZNK16protobuf_mutator3xml8Document11has_doctypeEv:
 2710|  12.0k|inline bool Document::has_doctype() const {
 2711|  12.0k|  bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0;
 2712|  12.0k|  PROTOBUF_ASSUME(!value || _impl_.doctype_ != nullptr);
  ------------------
  |  |  941|  18.7k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 5.43k, False: 6.63k]
  |  |  |  Branch (941:48): [True: 6.63k, False: 0]
  |  |  ------------------
  ------------------
 2713|  12.0k|  return value;
 2714|  12.0k|}
_ZNK16protobuf_mutator3xml8Document17_internal_doctypeEv:
 2720|  6.63k|inline const ::protobuf_mutator::xml::DoctypeDecl& Document::_internal_doctype() const {
 2721|  6.63k|  ::google::protobuf::internal::TSanRead(&_impl_);
 2722|  6.63k|  const ::protobuf_mutator::xml::DoctypeDecl* p = _impl_.doctype_;
 2723|  6.63k|  return p != nullptr ? *p : reinterpret_cast<const ::protobuf_mutator::xml::DoctypeDecl&>(::protobuf_mutator::xml::_DoctypeDecl_default_instance_);
  ------------------
  |  Branch (2723:10): [True: 6.63k, False: 0]
  ------------------
 2724|  6.63k|}
_ZNK16protobuf_mutator3xml8Document7doctypeEv:
 2725|  6.63k|inline const ::protobuf_mutator::xml::DoctypeDecl& Document::doctype() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2726|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Document.doctype)
 2727|  6.63k|  return _internal_doctype();
 2728|  6.63k|}
_ZNK16protobuf_mutator3xml8Document17_internal_elementEv:
 2816|  12.0k|inline const ::protobuf_mutator::xml::Element& Document::_internal_element() const {
 2817|  12.0k|  ::google::protobuf::internal::TSanRead(&_impl_);
 2818|  12.0k|  const ::protobuf_mutator::xml::Element* p = _impl_.element_;
 2819|  12.0k|  return p != nullptr ? *p : reinterpret_cast<const ::protobuf_mutator::xml::Element&>(::protobuf_mutator::xml::_Element_default_instance_);
  ------------------
  |  Branch (2819:10): [True: 6.65k, False: 5.41k]
  ------------------
 2820|  12.0k|}
_ZNK16protobuf_mutator3xml8Document7elementEv:
 2821|  12.0k|inline const ::protobuf_mutator::xml::Element& Document::element() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2822|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Document.element)
 2823|  12.0k|  return _internal_element();
 2824|  12.0k|}
_ZNK16protobuf_mutator3xml8Document20_internal_misk2_sizeEv:
 2902|  12.3k|inline int Document::_internal_misk2_size() const {
 2903|  12.3k|  return _internal_misk2().size();
 2904|  12.3k|}
_ZNK16protobuf_mutator3xml8Document10misk2_sizeEv:
 2905|  12.3k|inline int Document::misk2_size() const {
 2906|  12.3k|  return _internal_misk2_size();
 2907|  12.3k|}
_ZNK16protobuf_mutator3xml8Document5misk2Ei:
 2924|    241|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2925|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Document.misk2)
 2926|    241|  return _internal_misk2().Get(index);
 2927|    241|}
_ZNK16protobuf_mutator3xml8Document15_internal_misk2Ev:
 2940|  12.5k|Document::_internal_misk2() const {
 2941|  12.5k|  ::google::protobuf::internal::TSanRead(&_impl_);
 2942|  12.5k|  return _impl_.misk2_;
 2943|  12.5k|}
_ZNK16protobuf_mutator3xml11DoctypeDecl4nameEv:
 2965|  6.63k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2966|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.DoctypeDecl.name)
 2967|  6.63k|  return _internal_name();
 2968|  6.63k|}
_ZNK16protobuf_mutator3xml11DoctypeDecl14_internal_nameEv:
 2982|  6.63k|inline const std::string& DoctypeDecl::_internal_name() const {
 2983|  6.63k|  ::google::protobuf::internal::TSanRead(&_impl_);
 2984|  6.63k|  return _impl_.name_.Get();
 2985|  6.63k|}
_ZNK16protobuf_mutator3xml11DoctypeDecl15has_external_idEv:
 3024|  6.63k|inline bool DoctypeDecl::has_external_id() const {
 3025|  6.63k|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
 3026|  6.63k|  return value;
 3027|  6.63k|}
_ZNK16protobuf_mutator3xml11DoctypeDecl11external_idEv:
 3034|    134|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3035|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.DoctypeDecl.external_id)
 3036|    134|  return _internal_external_id();
 3037|    134|}
_ZNK16protobuf_mutator3xml11DoctypeDecl21_internal_external_idEv:
 3051|    134|inline const std::string& DoctypeDecl::_internal_external_id() const {
 3052|    134|  ::google::protobuf::internal::TSanRead(&_impl_);
 3053|    134|  return _impl_.external_id_.Get();
 3054|    134|}
_ZNK16protobuf_mutator3xml11DoctypeDecl14has_int_subsetEv:
 3093|  6.63k|inline bool DoctypeDecl::has_int_subset() const {
 3094|  6.63k|  bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0;
 3095|  6.63k|  return value;
 3096|  6.63k|}
_ZNK16protobuf_mutator3xml11DoctypeDecl10int_subsetEv:
 3103|  1.90k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3104|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.DoctypeDecl.int_subset)
 3105|  1.90k|  return _internal_int_subset();
 3106|  1.90k|}
_ZNK16protobuf_mutator3xml11DoctypeDecl20_internal_int_subsetEv:
 3120|  1.90k|inline const std::string& DoctypeDecl::_internal_int_subset() const {
 3121|  1.90k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3122|  1.90k|  return _impl_.int_subset_.Get();
 3123|  1.90k|}
_ZNK16protobuf_mutator3xml11DoctypeDecl19_internal_misk_sizeEv:
 3162|  6.63k|inline int DoctypeDecl::_internal_misk_size() const {
 3163|  6.63k|  return _internal_misk().size();
 3164|  6.63k|}
_ZNK16protobuf_mutator3xml11DoctypeDecl9misk_sizeEv:
 3165|  6.63k|inline int DoctypeDecl::misk_size() const {
 3166|  6.63k|  return _internal_misk_size();
 3167|  6.63k|}
_ZNK16protobuf_mutator3xml11DoctypeDecl4miskEi:
 3184|      1|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3185|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.DoctypeDecl.misk)
 3186|      1|  return _internal_misk().Get(index);
 3187|      1|}
_ZNK16protobuf_mutator3xml11DoctypeDecl14_internal_miskEv:
 3200|  6.63k|DoctypeDecl::_internal_misk() const {
 3201|  6.63k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3202|  6.63k|  return _impl_.misk_;
 3203|  6.63k|}
_ZNK16protobuf_mutator3xml4Misk6has_piEv:
 3215|    423|inline bool Misk::has_pi() const {
 3216|    423|  return __case() == kPi;
 3217|    423|}
_ZNK16protobuf_mutator3xml4Misk12_internal_piEv:
 3249|    188|inline const ::protobuf_mutator::xml::Pi& Misk::_internal_pi() const {
 3250|    188|  return __case() == kPi ? *_impl_.__.pi_ : reinterpret_cast<::protobuf_mutator::xml::Pi&>(::protobuf_mutator::xml::_Pi_default_instance_);
  ------------------
  |  Branch (3250:10): [True: 188, False: 0]
  ------------------
 3251|    188|}
_ZNK16protobuf_mutator3xml4Misk2piEv:
 3252|    188|inline const ::protobuf_mutator::xml::Pi& Misk::pi() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3253|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Misk.pi)
 3254|    188|  return _internal_pi();
 3255|    188|}
_ZNK16protobuf_mutator3xml4Misk11has_commentEv:
 3294|    423|inline bool Misk::has_comment() const {
 3295|    423|  return __case() == kComment;
 3296|    423|}
_ZNK16protobuf_mutator3xml4Misk7commentEv:
 3308|    312|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3309|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Misk.comment)
 3310|    312|  return _internal_comment();
 3311|    312|}
_ZNK16protobuf_mutator3xml4Misk17_internal_commentEv:
 3330|    312|inline const std::string& Misk::_internal_comment() const {
 3331|    312|  ::google::protobuf::internal::TSanRead(&_impl_);
 3332|    312|  if (__case() != kComment) {
  ------------------
  |  Branch (3332:7): [True: 0, False: 312]
  ------------------
 3333|      0|    return ::google::protobuf::internal::GetEmptyStringAlreadyInited();
 3334|      0|  }
 3335|    312|  return _impl_.__.comment_.Get();
 3336|    312|}
_ZNK16protobuf_mutator3xml4Misk5has__Ev:
 3378|    423|inline bool Misk::has__() const {
 3379|    423|  return __case() != __NOT_SET;
 3380|    423|}
_ZNK16protobuf_mutator3xml4Misk6__caseEv:
 3384|  2.17k|inline Misk::Case Misk::__case() const {
 3385|  2.17k|  return Misk::Case(_impl_._oneof_case_[0]);
 3386|  2.17k|}
_ZNK16protobuf_mutator3xml7Element13_internal_tagEv:
 3402|  25.9k|inline const ::protobuf_mutator::xml::Tag& Element::_internal_tag() const {
 3403|  25.9k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3404|  25.9k|  const ::protobuf_mutator::xml::Tag* p = _impl_.tag_;
 3405|  25.9k|  return p != nullptr ? *p : reinterpret_cast<const ::protobuf_mutator::xml::Tag&>(::protobuf_mutator::xml::_Tag_default_instance_);
  ------------------
  |  Branch (3405:10): [True: 15.0k, False: 10.8k]
  ------------------
 3406|  25.9k|}
_ZNK16protobuf_mutator3xml7Element3tagEv:
 3407|  25.9k|inline const ::protobuf_mutator::xml::Tag& Element::tag() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3408|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Element.tag)
 3409|  25.9k|  return _internal_tag();
 3410|  25.9k|}
_ZNK16protobuf_mutator3xml7Element22_internal_content_sizeEv:
 3488|  19.2k|inline int Element::_internal_content_size() const {
 3489|  19.2k|  return _internal_content().size();
 3490|  19.2k|}
_ZNK16protobuf_mutator3xml7Element12content_sizeEv:
 3491|  19.2k|inline int Element::content_size() const {
 3492|  19.2k|  return _internal_content_size();
 3493|  19.2k|}
_ZNK16protobuf_mutator3xml7Element7contentEi:
 3510|  3.55k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3511|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Element.content)
 3512|  3.55k|  return _internal_content().Get(index);
 3513|  3.55k|}
_ZNK16protobuf_mutator3xml7Element17_internal_contentEv:
 3526|  22.7k|Element::_internal_content() const {
 3527|  22.7k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3528|  22.7k|  return _impl_.content_;
 3529|  22.7k|}
_ZNK16protobuf_mutator3xml3Tag4nameEv:
 3551|  12.3k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3552|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Tag.name)
 3553|  12.3k|  return _internal_name();
 3554|  12.3k|}
_ZNK16protobuf_mutator3xml3Tag14_internal_nameEv:
 3568|  12.3k|inline const std::string& Tag::_internal_name() const {
 3569|  12.3k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3570|  12.3k|  return _impl_.name_.Get();
 3571|  12.3k|}
_ZNK16protobuf_mutator3xml3Tag24_internal_attribute_sizeEv:
 3610|  12.7k|inline int Tag::_internal_attribute_size() const {
 3611|  12.7k|  return _internal_attribute().size();
 3612|  12.7k|}
_ZNK16protobuf_mutator3xml3Tag14attribute_sizeEv:
 3613|  12.7k|inline int Tag::attribute_size() const {
 3614|  12.7k|  return _internal_attribute_size();
 3615|  12.7k|}
_ZNK16protobuf_mutator3xml3Tag9attributeEi:
 3632|    766|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3633|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Tag.attribute)
 3634|    766|  return _internal_attribute().Get(index);
 3635|    766|}
_ZNK16protobuf_mutator3xml3Tag19_internal_attributeEv:
 3648|  13.5k|Tag::_internal_attribute() const {
 3649|  13.5k|  ::google::protobuf::internal::TSanRead(&_impl_);
 3650|  13.5k|  return _impl_.attribute_;
 3651|  13.5k|}
_ZNK16protobuf_mutator3xml9Reference4nameEv:
 3673|      1|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3674|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Reference.name)
 3675|      1|  return _internal_name();
 3676|      1|}
_ZNK16protobuf_mutator3xml9Reference14_internal_nameEv:
 3690|      1|inline const std::string& Reference::_internal_name() const {
 3691|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
 3692|      1|  return _impl_.name_.Get();
 3693|      1|}
_ZNK16protobuf_mutator3xml9Reference5entryEv:
 3741|      1|inline bool Reference::entry() const {
 3742|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Reference.entry)
 3743|      1|  return _internal_entry();
 3744|      1|}
_ZNK16protobuf_mutator3xml9Reference15_internal_entryEv:
 3750|      1|inline bool Reference::_internal_entry() const {
 3751|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
 3752|      1|  return _impl_.entry_;
 3753|      1|}
_ZNK16protobuf_mutator3xml2Pi6targetEv:
 3774|     94|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3775|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Pi.target)
 3776|     94|  return _internal_target();
 3777|     94|}
_ZNK16protobuf_mutator3xml2Pi16_internal_targetEv:
 3791|     94|inline const std::string& Pi::_internal_target() const {
 3792|     94|  ::google::protobuf::internal::TSanRead(&_impl_);
 3793|     94|  return _impl_.target_.Get();
 3794|     94|}
_ZNK16protobuf_mutator3xml2Pi4dataEv:
 3843|     94|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3844|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Pi.data)
 3845|     94|  return _internal_data();
 3846|     94|}
_ZNK16protobuf_mutator3xml2Pi14_internal_dataEv:
 3860|     94|inline const std::string& Pi::_internal_data() const {
 3861|     94|  ::google::protobuf::internal::TSanRead(&_impl_);
 3862|     94|  return _impl_.data_.Get();
 3863|     94|}
_ZNK16protobuf_mutator3xml7Content13has_char_dataEv:
 3906|  3.55k|inline bool Content::has_char_data() const {
 3907|  3.55k|  return __case() == kCharData;
 3908|  3.55k|}
_ZNK16protobuf_mutator3xml7Content9char_dataEv:
 3920|    552|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3921|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Content.char_data)
 3922|    552|  return _internal_char_data();
 3923|    552|}
_ZNK16protobuf_mutator3xml7Content19_internal_char_dataEv:
 3942|    552|inline const std::string& Content::_internal_char_data() const {
 3943|    552|  ::google::protobuf::internal::TSanRead(&_impl_);
 3944|    552|  if (__case() != kCharData) {
  ------------------
  |  Branch (3944:7): [True: 0, False: 552]
  ------------------
 3945|      0|    return ::google::protobuf::internal::GetEmptyStringAlreadyInited();
 3946|      0|  }
 3947|    552|  return _impl_.__.char_data_.Get();
 3948|    552|}
_ZNK16protobuf_mutator3xml7Content11has_elementEv:
 3991|  3.55k|inline bool Content::has_element() const {
 3992|  3.55k|  return __case() == kElement;
 3993|  3.55k|}
_ZNK16protobuf_mutator3xml7Content17_internal_elementEv:
 4025|    329|inline const ::protobuf_mutator::xml::Element& Content::_internal_element() const {
 4026|    329|  return __case() == kElement ? *_impl_.__.element_ : reinterpret_cast<::protobuf_mutator::xml::Element&>(::protobuf_mutator::xml::_Element_default_instance_);
  ------------------
  |  Branch (4026:10): [True: 329, False: 0]
  ------------------
 4027|    329|}
_ZNK16protobuf_mutator3xml7Content7elementEv:
 4028|    329|inline const ::protobuf_mutator::xml::Element& Content::element() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4029|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Content.element)
 4030|    329|  return _internal_element();
 4031|    329|}
_ZNK16protobuf_mutator3xml7Content13has_referenceEv:
 4070|  3.55k|inline bool Content::has_reference() const {
 4071|  3.55k|  return __case() == kReference;
 4072|  3.55k|}
_ZNK16protobuf_mutator3xml7Content19_internal_referenceEv:
 4104|      2|inline const ::protobuf_mutator::xml::Reference& Content::_internal_reference() const {
 4105|      2|  return __case() == kReference ? *_impl_.__.reference_ : reinterpret_cast<::protobuf_mutator::xml::Reference&>(::protobuf_mutator::xml::_Reference_default_instance_);
  ------------------
  |  Branch (4105:10): [True: 2, False: 0]
  ------------------
 4106|      2|}
_ZNK16protobuf_mutator3xml7Content9referenceEv:
 4107|      2|inline const ::protobuf_mutator::xml::Reference& Content::reference() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4108|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Content.reference)
 4109|      2|  return _internal_reference();
 4110|      2|}
_ZNK16protobuf_mutator3xml7Content10has_cdsectEv:
 4149|  3.55k|inline bool Content::has_cdsect() const {
 4150|  3.55k|  return __case() == kCdsect;
 4151|  3.55k|}
_ZNK16protobuf_mutator3xml7Content6cdsectEv:
 4163|    175|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4164|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Content.cdsect)
 4165|    175|  return _internal_cdsect();
 4166|    175|}
_ZNK16protobuf_mutator3xml7Content16_internal_cdsectEv:
 4185|    175|inline const std::string& Content::_internal_cdsect() const {
 4186|    175|  ::google::protobuf::internal::TSanRead(&_impl_);
 4187|    175|  if (__case() != kCdsect) {
  ------------------
  |  Branch (4187:7): [True: 0, False: 175]
  ------------------
 4188|      0|    return ::google::protobuf::internal::GetEmptyStringAlreadyInited();
 4189|      0|  }
 4190|    175|  return _impl_.__.cdsect_.Get();
 4191|    175|}
_ZNK16protobuf_mutator3xml7Content8has_miskEv:
 4234|  3.55k|inline bool Content::has_misk() const {
 4235|  3.55k|  return __case() == kMisk;
 4236|  3.55k|}
_ZNK16protobuf_mutator3xml7Content14_internal_miskEv:
 4268|      1|inline const ::protobuf_mutator::xml::Misk& Content::_internal_misk() const {
 4269|      1|  return __case() == kMisk ? *_impl_.__.misk_ : reinterpret_cast<::protobuf_mutator::xml::Misk&>(::protobuf_mutator::xml::_Misk_default_instance_);
  ------------------
  |  Branch (4269:10): [True: 1, False: 0]
  ------------------
 4270|      1|}
_ZNK16protobuf_mutator3xml7Content4miskEv:
 4271|      1|inline const ::protobuf_mutator::xml::Misk& Content::misk() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4272|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Content.misk)
 4273|      1|  return _internal_misk();
 4274|      1|}
_ZNK16protobuf_mutator3xml7Content5has__Ev:
 4312|  3.55k|inline bool Content::has__() const {
 4313|  3.55k|  return __case() != __NOT_SET;
 4314|  3.55k|}
_ZNK16protobuf_mutator3xml7Content6__caseEv:
 4318|  23.4k|inline Content::Case Content::__case() const {
 4319|  23.4k|  return Content::Case(_impl_._oneof_case_[0]);
 4320|  23.4k|}
_ZNK16protobuf_mutator3xml9Attribute4nameEv:
 4336|    383|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4337|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Attribute.name)
 4338|    383|  return _internal_name();
 4339|    383|}
_ZNK16protobuf_mutator3xml9Attribute14_internal_nameEv:
 4353|    383|inline const std::string& Attribute::_internal_name() const {
 4354|    383|  ::google::protobuf::internal::TSanRead(&_impl_);
 4355|    383|  return _impl_.name_.Get();
 4356|    383|}
_ZNK16protobuf_mutator3xml9Attribute5valueEv:
 4405|    383|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 4406|       |  // @@protoc_insertion_point(field_get:protobuf_mutator.xml.Attribute.value)
 4407|    383|  return _internal_value();
 4408|    383|}
_ZNK16protobuf_mutator3xml9Attribute15_internal_valueEv:
 4422|    383|inline const std::string& Attribute::_internal_value() const {
 4423|    383|  ::google::protobuf::internal::TSanRead(&_impl_);
 4424|    383|  return _impl_.value_.Get();
 4425|    383|}

_ZN4absl12lts_2024011620PrefetchToLocalCacheEPKv:
  146|  1.28M|    const void* addr) {
  147|  1.28M|  __builtin_prefetch(addr, 0, 3);
  148|  1.28M|}

_ZN4absl12lts_2024011611countl_zeroIjEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeES4_:
  103|    888|    countl_zero(T x) noexcept {
  104|    888|  return numeric_internal::CountLeadingZeroes(x);
  105|    888|}

_ZN4absl12lts_2024011616numeric_internal20CountLeadingZeroes32Ej:
  133|    888|CountLeadingZeroes32(uint32_t x) {
  134|    888|#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_clz)
  135|       |  // Use __builtin_clz, which uses the following instructions:
  136|       |  //  x86: bsr, lzcnt
  137|       |  //  ARM64: clz
  138|       |  //  PPC: cntlzd
  139|       |
  140|    888|  static_assert(sizeof(unsigned int) == sizeof(x),
  141|    888|                "__builtin_clz does not take 32-bit arg");
  142|       |  // Handle 0 as a special case because __builtin_clz(0) is undefined.
  143|    888|  return x == 0 ? 32 : __builtin_clz(x);
  ------------------
  |  Branch (143:10): [True: 0, False: 888]
  ------------------
  144|       |#elif defined(_MSC_VER) && !defined(__clang__)
  145|       |  unsigned long result = 0;  // NOLINT(runtime/int)
  146|       |  if (_BitScanReverse(&result, x)) {
  147|       |    return 31 - result;
  148|       |  }
  149|       |  return 32;
  150|       |#else
  151|       |  int zeroes = 28;
  152|       |  if (x >> 16) {
  153|       |    zeroes -= 16;
  154|       |    x >>= 16;
  155|       |  }
  156|       |  if (x >> 8) {
  157|       |    zeroes -= 8;
  158|       |    x >>= 8;
  159|       |  }
  160|       |  if (x >> 4) {
  161|       |    zeroes -= 4;
  162|       |    x >>= 4;
  163|       |  }
  164|       |  return "\4\3\2\2\1\1\1\1\0\0\0\0\0\0\0"[x] + zeroes;
  165|       |#endif
  166|    888|}
_ZN4absl12lts_2024011616numeric_internal18CountLeadingZeroesIjEEiT_:
  234|    888|CountLeadingZeroes(T x) {
  235|    888|  static_assert(std::is_unsigned<T>::value, "T must be unsigned");
  236|    888|  static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
  237|    888|                "T must have a power-of-2 size");
  238|    888|  static_assert(sizeof(T) <= sizeof(uint64_t), "T too large");
  239|    888|  return sizeof(T) <= sizeof(uint16_t)
  ------------------
  |  Branch (239:10): [Folded, False: 888]
  ------------------
  240|    888|             ? CountLeadingZeroes16(static_cast<uint16_t>(x)) -
  241|      0|                   (std::numeric_limits<uint16_t>::digits -
  242|      0|                    std::numeric_limits<T>::digits)
  243|    888|             : (sizeof(T) <= sizeof(uint32_t)
  ------------------
  |  Branch (243:17): [True: 888, Folded]
  ------------------
  244|    888|                    ? CountLeadingZeroes32(static_cast<uint32_t>(x)) -
  245|    888|                          (std::numeric_limits<uint32_t>::digits -
  246|    888|                           std::numeric_limits<T>::digits)
  247|    888|                    : CountLeadingZeroes64(x));
  248|    888|}

_ZN6google8protobuf3Any10descriptorEv:
  113|  98.3k|  static const ::google::protobuf::Descriptor* descriptor() {
  114|  98.3k|    return GetDescriptor();
  115|  98.3k|  }
_ZN6google8protobuf3Any13GetDescriptorEv:
  116|  98.3k|  static const ::google::protobuf::Descriptor* GetDescriptor() {
  117|  98.3k|    return default_instance().GetMetadata().descriptor;
  118|  98.3k|  }
_ZN6google8protobuf3Any16default_instanceEv:
  122|  98.3k|  static const Any& default_instance() {
  123|  98.3k|    return *internal_default_instance();
  124|  98.3k|  }
_ZN6google8protobuf3Any25internal_default_instanceEv:
  125|  98.3k|  static inline const Any* internal_default_instance() {
  126|  98.3k|    return reinterpret_cast<const Any*>(
  127|  98.3k|        &_Any_default_instance_);
  128|  98.3k|  }

_ZN6google8protobuf5Arena15AllocateAlignedEmm:
  264|    436|  void* AllocateAligned(size_t size, size_t align = 8) {
  265|    436|    if (align <= internal::ArenaAlignDefault::align) {
  ------------------
  |  Branch (265:9): [True: 436, False: 0]
  ------------------
  266|    436|      return Allocate(internal::ArenaAlignDefault::Ceil(size));
  267|    436|    } else {
  268|       |      // We are wasting space by over allocating align - 8 bytes. Compared
  269|       |      // to a dedicated function that takes current alignment in consideration.
  270|       |      // Such a scheme would only waste (align - 8)/2 bytes on average, but
  271|       |      // requires a dedicated function in the outline arena allocation
  272|       |      // functions. Possibly re-evaluate tradeoffs later.
  273|      0|      auto align_as = internal::ArenaAlignAs(align);
  274|      0|      return align_as.Ceil(Allocate(align_as.Padded(size)));
  275|      0|    }
  276|    436|  }

_ZN6google8protobuf8internal17ArenaAlignDefault4CeilEm:
   79|    561|  static inline PROTOBUF_ALWAYS_INLINE constexpr size_t Ceil(size_t n) {
   80|    561|    return (n + align - 1) & ~(align - 1);
   81|    561|  }

_ZN6google8protobuf8internal15TaggedStringPtrC2EPNS1_21ExplicitlyConstructedINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEELm8EEE:
  111|  1.08k|      : ptr_(ptr) {}
_ZNK6google8protobuf8internal15TaggedStringPtr9IsDefaultEv:
  144|  17.9k|  inline bool IsDefault() const { return (as_int() & kMask) == kDefault; }
_ZNK6google8protobuf8internal15TaggedStringPtr3GetEv:
  167|  25.7k|  inline std::string* Get() const {
  168|  25.7k|    return reinterpret_cast<std::string*>(as_int() & ~kMask);
  169|  25.7k|  }
_ZNK6google8protobuf8internal15TaggedStringPtr6as_intEv:
  203|  98.7k|  uintptr_t as_int() const { return reinterpret_cast<uintptr_t>(ptr_); }
_ZN6google8protobuf8internal14ArenaStringPtrC2EPNS0_5ArenaE:
  242|     50|      : tagged_ptr_(&fixed_address_empty_string) {
  243|     50|    if (DebugHardenForceCopyDefaultString()) {
  ------------------
  |  Branch (243:9): [Folded, False: 50]
  ------------------
  244|      0|      Set(absl::string_view(""), arena);
  245|      0|    }
  246|     50|  }
_ZNK6google8protobuf8internal14ArenaStringPtr3GetEv:
  335|  25.7k|  PROTOBUF_NDEBUG_INLINE const std::string& Get() const {
  336|       |    // Unconditionally mask away the tag.
  337|  25.7k|    return *tagged_ptr_.Get();
  338|  25.7k|  }
_ZN6google8protobuf8internal14ArenaStringPtr11InitDefaultEv:
  451|  1.03k|inline void ArenaStringPtr::InitDefault() {
  452|  1.03k|  tagged_ptr_ = TaggedStringPtr(&fixed_address_empty_string);
  453|  1.03k|}

_ZNK6google8protobuf10Descriptor4fileEv:
 2510|  63.7k|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor11field_countEv:
 2510|   469k|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor5fieldEi:
 2529|   366k|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|   366k|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|   366k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|   366k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|   366k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 366k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|   366k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|   366k|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|   366k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|   366k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|   366k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 366k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|   366k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|   366k|    return FIELD##s_ + index;                              \
 2533|   366k|  }
_ZNK6google8protobuf10Descriptor7optionsEv:
 2536|   285k|  inline const TYPE& CLASS::options() const { return *options_; }
_ZNK6google8protobuf15OneofDescriptor11field_countEv:
 2510|  2.93k|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14EnumDescriptor11value_countEv:
 2510|    540|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14EnumDescriptor5valueEi:
 2529|    536|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|    536|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|    536|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|    536|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    536|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 536]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    536|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|    536|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|    536|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    536|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    536|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 536]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    536|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|    536|    return FIELD##s_ + index;                              \
 2533|    536|  }
_ZNK6google8protobuf19EnumValueDescriptor4typeEv:
 2510|    821|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14FileDescriptor4poolEv:
 2510|      1|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15FieldDescriptor16containing_oneofEv:
 2711|   133k|inline const OneofDescriptor* FieldDescriptor::containing_oneof() const {
 2712|   133k|  if (is_oneof_) {
  ------------------
  |  Branch (2712:7): [True: 71.2k, False: 62.6k]
  ------------------
 2713|  71.2k|    auto* res = scope_.containing_oneof;
 2714|  71.2k|    PROTOBUF_ASSUME(res != nullptr);
  ------------------
  |  |  941|  71.2k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
 2715|  71.2k|    return res;
 2716|  71.2k|  }
 2717|  62.6k|  return nullptr;
 2718|   133k|}
_ZNK6google8protobuf15FieldDescriptor4typeEv:
 2734|  1.09M|inline FieldDescriptor::Type FieldDescriptor::type() const {
 2735|  1.09M|  return static_cast<Type>(type_);
 2736|  1.09M|}
_ZNK6google8protobuf15FieldDescriptor11is_repeatedEv:
 2742|   388k|inline bool FieldDescriptor::is_repeated() const {
 2743|   388k|  ABSL_DCHECK_EQ(is_repeated_, label() == LABEL_REPEATED);
  ------------------
  |  |   74|   388k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|   388k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|   388k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 388k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|   388k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2744|   388k|  return is_repeated_;
 2745|   388k|}
_ZNK6google8protobuf19EnumValueDescriptor5indexEv:
 2813|     86|inline int EnumValueDescriptor::index() const {
 2814|     86|  return static_cast<int>(this - type_->values_);
 2815|     86|}
_ZNK6google8protobuf15FieldDescriptor8cpp_typeEv:
 2833|   746k|inline FieldDescriptor::CppType FieldDescriptor::cpp_type() const {
 2834|   746k|  return kTypeToCppTypeMap[type()];
 2835|   746k|}

_ZNK6google8protobuf14MessageOptions9map_entryEv:
17247|   285k|inline bool MessageOptions::map_entry() const {
17248|       |  // @@protoc_insertion_point(field_get:google.protobuf.MessageOptions.map_entry)
17249|   285k|  return _internal_map_entry();
17250|   285k|}
_ZNK6google8protobuf14MessageOptions19_internal_map_entryEv:
17256|   285k|inline bool MessageOptions::_internal_map_entry() const {
17257|   285k|  ::google::protobuf::internal::TSanRead(&_impl_);
17258|   285k|  return _impl_.map_entry_;
17259|   285k|}

_ZNK6google8protobuf8internal21ExplicitlyConstructedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEELm8EE3getEv:
   49|     57|  constexpr const T& get() const { return reinterpret_cast<const T&>(union_); }

_ZNK6google8protobuf8internal7HasBitsILi1EEixEi:
   45|  69.8k|  PROTOBUF_NDEBUG_INLINE const uint32_t& operator[](int index) const {
   46|  69.8k|    return has_bits_[index];
   47|  69.8k|  }
_ZN6google8protobuf8internal7HasBitsILi1EEixEi:
   41|  25.7k|  PROTOBUF_NDEBUG_INLINE uint32_t& operator[](int index) {
   42|  25.7k|    return has_bits_[index];
   43|  25.7k|  }
_ZN6google8protobuf8internal7HasBitsILi1EEC2Ev:
   31|  12.3k|  PROTOBUF_NDEBUG_INLINE constexpr HasBits() : has_bits_{} {}
_ZN6google8protobuf8internal7HasBitsILi1EE5ClearEv:
   37|  24.2k|  PROTOBUF_NDEBUG_INLINE void Clear() {
   38|  24.2k|    memset(has_bits_, 0, sizeof(has_bits_));
   39|  24.2k|  }

_ZN6google8protobuf8internal18InternalVisibilityC2Ev:
   38|  12.9k|inline constexpr InternalVisibility::InternalVisibility() = default;

_ZN6google8protobuf2io19EpsCopyOutputStream11EnsureSpaceEPh:
  662|  2.19k|  PROTOBUF_NODISCARD uint8_t* EnsureSpace(uint8_t* ptr) {
  663|  2.19k|    if (PROTOBUF_PREDICT_FALSE(ptr >= end_)) {
  ------------------
  |  |  365|  2.19k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 2.19k]
  |  |  |  Branch (365:54): [Folded, False: 2.19k]
  |  |  |  Branch (365:63): [True: 0, False: 2.19k]
  |  |  ------------------
  ------------------
  664|      0|      return EnsureSpaceFallback(ptr);
  665|      0|    }
  666|  2.19k|    return ptr;
  667|  2.19k|  }
_ZN6google8protobuf2io19EpsCopyOutputStream23WriteStringMaybeAliasedEjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPh:
  697|     29|                                   uint8_t* ptr) {
  698|     29|    std::ptrdiff_t size = s.size();
  699|     29|    if (PROTOBUF_PREDICT_FALSE(
  ------------------
  |  |  365|     57|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 1, False: 28]
  |  |  |  Branch (365:54): [Folded, False: 29]
  |  |  |  Branch (365:64): [True: 1, False: 28]
  |  |  |  Branch (365:64): [True: 0, False: 28]
  |  |  ------------------
  ------------------
  700|     29|            size >= 128 || end_ - ptr + 16 - TagSize(num << 3) - 1 < size)) {
  701|      1|      return WriteStringMaybeAliasedOutline(num, s, ptr);
  702|      1|    }
  703|     28|    ptr = UnsafeVarint((num << 3) | 2, ptr);
  704|     28|    *ptr++ = static_cast<uint8_t>(size);
  705|     28|    std::memcpy(ptr, s.data(), size);
  706|     28|    return ptr + size;
  707|     29|  }
_ZN6google8protobuf2io19EpsCopyOutputStream7TagSizeEj:
  843|     28|  static constexpr int TagSize(uint32_t tag) {
  844|     28|    return (tag < (1 << 7))    ? 1
  ------------------
  |  Branch (844:12): [True: 24, False: 4]
  ------------------
  845|     28|           : (tag < (1 << 14)) ? 2
  ------------------
  |  Branch (845:14): [True: 4, False: 0]
  ------------------
  846|      4|           : (tag < (1 << 21)) ? 3
  ------------------
  |  Branch (846:14): [True: 0, False: 0]
  ------------------
  847|      0|           : (tag < (1 << 28)) ? 4
  ------------------
  |  Branch (847:14): [True: 0, False: 0]
  ------------------
  848|      0|                               : 5;
  849|     28|  }
_ZN6google8protobuf2io17CodedOutputStream20WriteVarint32ToArrayEjPh:
 1641|  2.85k|                                                        uint8_t* target) {
 1642|  2.85k|  return EpsCopyOutputStream::UnsafeVarint(value, target);
 1643|  2.85k|}
_ZN6google8protobuf2io17CodedOutputStream15WriteTagToArrayEjPh:
 1716|  2.19k|                                                   uint8_t* target) {
 1717|  2.19k|  return WriteVarint32ToArray(value, target);
 1718|  2.19k|}
_ZN6google8protobuf2io17CodedOutputStream12VarintSize32Ej:
 1730|    888|inline size_t CodedOutputStream::VarintSize32(uint32_t value) {
 1731|    888|#if PROTOBUF_CODED_STREAM_H_PREFER_BSR
 1732|       |  // Explicit OR 0x1 to avoid calling absl::countl_zero(0), which
 1733|       |  // requires a branch to check for on platforms without a clz instruction.
 1734|    888|  uint32_t log2value = (std::numeric_limits<uint32_t>::digits - 1) -
 1735|    888|                       absl::countl_zero(value | 0x1);
 1736|    888|  return static_cast<size_t>((log2value * 9 + (64 + 9)) / 64);
 1737|       |#else
 1738|       |  uint32_t clz = absl::countl_zero(value);
 1739|       |  return static_cast<size_t>(
 1740|       |      ((std::numeric_limits<uint32_t>::digits * 9 + 64) - (clz * 9)) / 64);
 1741|       |#endif
 1742|    888|}
_ZN6google8protobuf2io19EpsCopyOutputStream12UnsafeVarintIjEEPhT_S4_:
  898|  2.88k|  PROTOBUF_ALWAYS_INLINE static uint8_t* UnsafeVarint(T value, uint8_t* ptr) {
  899|  2.88k|    static_assert(std::is_unsigned<T>::value,
  900|  2.88k|                  "Varint serialization must be unsigned");
  901|  3.16k|    while (PROTOBUF_PREDICT_FALSE(value >= 0x80)) {
  ------------------
  |  |  365|  3.16k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 273, False: 2.88k]
  |  |  |  Branch (365:54): [Folded, False: 3.16k]
  |  |  |  Branch (365:63): [True: 273, False: 2.88k]
  |  |  ------------------
  ------------------
  902|    273|      *ptr = static_cast<uint8_t>(value | 0x80);
  903|    273|      value >>= 7;
  904|    273|      ++ptr;
  905|    273|    }
  906|  2.88k|    *ptr++ = static_cast<uint8_t>(value);
  907|  2.88k|    return ptr;
  908|  2.88k|  }

_ZNK6google8protobuf7Message3NewEPNS0_5ArenaE:
  264|  37.0k|  Message* New(Arena* arena) const {
  265|  37.0k|    return static_cast<Message*>(MessageLite::New(arena));
  266|  37.0k|  }
_ZNK6google8protobuf7Message13GetDescriptorEv:
  363|   335k|  const Descriptor* GetDescriptor() const { return GetMetadata().descriptor; }
_ZNK6google8protobuf7Message13GetReflectionEv:
  369|   161k|  const Reflection* GetReflection() const { return GetMetadata().reflection; }

_ZN6google8protobuf8internal10CachedSizeC2Ei:
  173|  12.9k|  constexpr CachedSize(Scalar desired) noexcept : atom_(desired) {}
_ZNK6google8protobuf8internal10CachedSize3GetEv:
  178|    612|  Scalar Get() const noexcept {
  179|    612|    return __atomic_load_n(&atom_, __ATOMIC_RELAXED);
  180|    612|  }
_ZNK6google8protobuf8internal13ClassDataFull4baseEv:
  454|   635k|  constexpr const ClassData* base() const { return this; }
_ZNK6google8protobuf11MessageLite8GetArenaEv:
  531|  57.1k|  Arena* GetArena() const { return _internal_metadata_.arena(); }
_ZN6google8protobuf11MessageLite19internal_visibilityEv:
  816|  12.9k|  static constexpr internal::InternalVisibility internal_visibility() {
  817|  12.9k|    return internal::InternalVisibility{};
  818|  12.9k|  }
_ZN6google8protobuf11MessageLiteC2EPNS0_5ArenaE:
  879|  12.9k|  explicit MessageLite(Arena* arena) : _internal_metadata_(arena) {}
_ZN6google8protobuf8internal27GetEmptyStringAlreadyInitedEv:
  314|     57|PROTOBUF_EXPORT constexpr const std::string& GetEmptyStringAlreadyInited() {
  315|     57|  return fixed_address_empty_string.get();
  316|     57|}
_ZNK6google8protobuf8internal9ClassData4fullEv:
  474|   595k|inline const ClassDataFull& ClassData::full() const {
  475|   595k|  ABSL_DCHECK(!is_lite);
  ------------------
  |  |   47|   595k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|   595k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.19M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|   595k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.19M|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.19M|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 595k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|   595k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 595k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|   595k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 595k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.19M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.19M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  476|   595k|  return *static_cast<const ClassDataFull*>(this);
  477|   595k|}
_ZN6google8protobuf11MessageLiteD2Ev:
  511|  50.9k|  PROTOBUF_VIRTUAL ~MessageLite() = default;

_ZN6google8protobuf8internal16InternalMetadataC2EPNS0_5ArenaE:
   46|  12.9k|  explicit InternalMetadata(Arena* arena) {
   47|  12.9k|    ptr_ = reinterpret_cast<intptr_t>(arena);
   48|  12.9k|  }
_ZNK6google8protobuf8internal16InternalMetadata5arenaEv:
   65|  57.1k|  PROTOBUF_NDEBUG_INLINE Arena* arena() const {
   66|  57.1k|    if (PROTOBUF_PREDICT_FALSE(have_unknown_fields())) {
  ------------------
  |  |  365|  57.1k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 57.1k]
  |  |  |  Branch (365:54): [Folded, False: 57.1k]
  |  |  |  Branch (365:63): [True: 0, False: 57.1k]
  |  |  ------------------
  ------------------
   67|      0|      return PtrValue<ContainerBase>()->arena;
   68|  57.1k|    } else {
   69|  57.1k|      return PtrValue<Arena>();
   70|  57.1k|    }
   71|  57.1k|  }
_ZNK6google8protobuf8internal16InternalMetadata19have_unknown_fieldsEv:
   73|   135k|  PROTOBUF_NDEBUG_INLINE bool have_unknown_fields() const {
   74|   135k|    return HasUnknownFieldsTag();
   75|   135k|  }
_ZN6google8protobuf8internal16InternalMetadata12InternalSwapEPS2_:
  114|    230|      InternalMetadata* PROTOBUF_RESTRICT other) {
  115|    230|    std::swap(ptr_, other->ptr_);
  116|    230|  }
_ZNK6google8protobuf8internal16InternalMetadata19HasUnknownFieldsTagEv:
  141|   135k|  PROTOBUF_ALWAYS_INLINE bool HasUnknownFieldsTag() const {
  142|   135k|    return ptr_ & kUnknownFieldsTagMask;
  143|   135k|  }
_ZNK6google8protobuf8internal16InternalMetadata8PtrValueINS0_5ArenaEEEPT_v:
  146|  57.1k|  U* PtrValue() const {
  147|  57.1k|    return reinterpret_cast<U*>(ptr_ & kPtrValueMask);
  148|  57.1k|  }
_ZNK6google8protobuf8internal16InternalMetadata14unknown_fieldsINS0_15UnknownFieldSetEEERKT_PFS7_vE:
   83|     19|      const T& (*default_instance)()) const {
   84|     19|    if (PROTOBUF_PREDICT_FALSE(have_unknown_fields())) {
  ------------------
  |  |  365|     19|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 19]
  |  |  |  Branch (365:54): [Folded, False: 19]
  |  |  |  Branch (365:63): [True: 0, False: 19]
  |  |  ------------------
  ------------------
   85|      0|      return PtrValue<Container<T>>()->unknown_fields;
   86|     19|    } else {
   87|     19|      return default_instance();
   88|     19|    }
   89|     19|  }
_ZN6google8protobuf8internal16InternalMetadata6DeleteINS0_15UnknownFieldSetEEEvv:
   58|  50.9k|  void Delete() {
   59|       |    // Note that Delete<> should be called not more than once.
   60|  50.9k|    if (have_unknown_fields()) {
  ------------------
  |  Branch (60:9): [True: 0, False: 50.9k]
  ------------------
   61|      0|      DeleteOutOfLineHelper<T>();
   62|      0|    }
   63|  50.9k|  }
_ZN6google8protobuf8internal16InternalMetadata9MergeFromINS0_15UnknownFieldSetEEEvRKS2_:
  119|  1.70k|  PROTOBUF_NDEBUG_INLINE void MergeFrom(const InternalMetadata& other) {
  120|  1.70k|    if (other.have_unknown_fields()) {
  ------------------
  |  Branch (120:9): [True: 0, False: 1.70k]
  ------------------
  121|      0|      DoMergeFrom<T>(other.unknown_fields<T>(nullptr));
  122|      0|    }
  123|  1.70k|  }
_ZN6google8protobuf8internal16InternalMetadata5ClearINS0_15UnknownFieldSetEEEvv:
  126|  24.2k|  PROTOBUF_NDEBUG_INLINE void Clear() {
  127|  24.2k|    if (have_unknown_fields()) {
  ------------------
  |  Branch (127:9): [True: 0, False: 24.2k]
  ------------------
  128|      0|      DoClear<T>();
  129|      0|    }
  130|  24.2k|  }

_ZN6google8protobuf8internal8TSanReadEPKv:
  365|   726k|inline PROTOBUF_ALWAYS_INLINE void TSanRead(const void*) {}
_ZN6google8protobuf8internal24Prefetch5LinesFrom7LinesEPKv:
  314|  1.04k|inline PROTOBUF_ALWAYS_INLINE void Prefetch5LinesFrom7Lines(const void* ptr) {
  315|  1.04k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 448);
  ------------------
  |  |  670|  1.04k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  316|  1.04k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 512);
  ------------------
  |  |  670|  1.04k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  317|  1.04k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 576);
  ------------------
  |  |  670|  1.04k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  318|  1.04k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 640);
  ------------------
  |  |  670|  1.04k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  319|  1.04k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 704);
  ------------------
  |  |  670|  1.04k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  320|  1.04k|}
_ZN6google8protobuf8internal9TSanWriteEPKv:
  366|  25.6k|inline PROTOBUF_ALWAYS_INLINE void TSanWrite(const void*) {}
_ZN6google8protobuf8internal20PrefetchToLocalCacheEPKv:
  371|  1.27M|inline void PrefetchToLocalCache(const void* ptr) {
  372|  1.27M|  absl::PrefetchToLocalCache(ptr);
  373|  1.27M|}

_ZN6google8protobuf8internal20RepeatedPtrFieldBaseC2EPNS0_5ArenaE:
  146|     87|      : tagged_rep_or_elem_(nullptr),
  147|     87|        current_size_(0),
  148|     87|        capacity_proxy_(0),
  149|     87|        arena_(arena) {}
_ZN6google8protobuf8internal20RepeatedPtrFieldBaseD2Ev:
  154|  45.2k|  ~RepeatedPtrFieldBase() {
  155|       |#ifndef NDEBUG
  156|       |    // Try to trigger segfault / asan failure in non-opt builds if arena_
  157|       |    // lifetime has ended before the destructor.
  158|       |    if (arena_) (void)arena_->SpaceAllocated();
  159|       |#endif
  160|  45.2k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase4sizeEv:
  163|   160k|  int size() const { return current_size_; }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase12NeedsDestroyEv:
  239|  45.2k|  inline bool NeedsDestroy() const {
  240|       |    // Either there is an allocated element in SSO buffer or there is an
  241|       |    // allocated Rep.
  242|  45.2k|    return tagged_rep_or_elem_ != nullptr;
  243|  45.2k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase8raw_dataEv:
  347|  1.09k|  void* const* raw_data() const { return elements(); }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase19ExchangeCurrentSizeEi:
  602|  5.24k|  inline int ExchangeCurrentSize(int new_size) {
  603|  5.24k|    return std::exchange(current_size_, new_size);
  604|  5.24k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase8elementsEv:
  625|  1.09k|  void* const* elements() const {
  626|  1.09k|    return using_sso() ? &tagged_rep_or_elem_ : +rep()->elements;
  ------------------
  |  Branch (626:12): [True: 916, False: 182]
  ------------------
  627|  1.09k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase8elementsEv:
  628|  4.11k|  void** elements() {
  629|  4.11k|    return using_sso() ? &tagged_rep_or_elem_ : +rep()->elements;
  ------------------
  |  Branch (629:12): [True: 3.78k, False: 328]
  ------------------
  630|  4.11k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase10element_atEi:
  632|  21.0k|  void*& element_at(int index) {
  633|  21.0k|    if (using_sso()) {
  ------------------
  |  Branch (633:9): [True: 15.9k, False: 5.15k]
  ------------------
  634|  15.9k|      ABSL_DCHECK_EQ(index, 0);
  ------------------
  |  |   74|  15.9k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|  15.9k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  15.9k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 15.9k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  15.9k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  635|  15.9k|      return tagged_rep_or_elem_;
  636|  15.9k|    }
  637|  5.15k|    return rep()->elements[index];
  638|  21.0k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase10element_atEi:
  639|  12.3k|  const void* element_at(int index) const {
  640|  12.3k|    return const_cast<RepeatedPtrFieldBase*>(this)->element_at(index);
  641|  12.3k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase3repEv:
  647|  7.90k|  Rep* rep() {
  648|  7.90k|    ABSL_DCHECK(!using_sso());
  ------------------
  |  |   47|  7.90k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  7.90k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  15.8k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  7.90k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  15.8k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  15.8k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 7.90k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  7.90k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 7.90k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  7.90k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 7.90k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  15.8k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  15.8k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  649|  7.90k|    return reinterpret_cast<Rep*>(
  650|  7.90k|        reinterpret_cast<uintptr_t>(tagged_rep_or_elem_) - 1);
  651|  7.90k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3repEv:
  652|    889|  const Rep* rep() const {
  653|    889|    return const_cast<RepeatedPtrFieldBase*>(this)->rep();
  654|    889|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase9using_ssoEv:
  656|  52.3k|  bool using_sso() const {
  657|  52.3k|    return (reinterpret_cast<uintptr_t>(tagged_rep_or_elem_) & 1) == 0;
  658|  52.3k|  }
_ZNK6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml4MiskEE4sizeEv:
 1340|  31.1k|inline int RepeatedPtrField<Element>::size() const {
 1341|  31.1k|  return RepeatedPtrFieldBase::size();
 1342|  31.1k|}
_ZN6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml4MiskEE5ClearEv:
 1469|      4|inline void RepeatedPtrField<Element>::Clear() {
 1470|      4|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|      4|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerIN16protobuf_mutator3xml4MiskEEEEEvv:
  265|      4|  void Clear() {
  266|      4|    const int n = current_size_;
  267|      4|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|      4|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|      4|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      4|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|      4|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 4]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|      4|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_11MessageLiteEEEEEPNT_4TypeEPv:
  661|  4.80k|  static inline Value<TypeHandler>* cast(void* element) {
  662|  4.80k|    return reinterpret_cast<Value<TypeHandler>*>(element);
  663|  4.80k|  }
_ZNK6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml4MiskEE3GetEi:
 1346|    422|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|    422|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|    422|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerIN16protobuf_mutator3xml4MiskEEEEERKNT_4TypeEi:
  252|    422|  const Value<TypeHandler>& Get(int index) const {
  253|    422|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|    422|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    422|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    422|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 422]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    422|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|    422|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|    422|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    422|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    422|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 422]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    422|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|    422|    return *cast<TypeHandler>(element_at(index));
  256|    422|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerIN16protobuf_mutator3xml4MiskEEEEEPKNT_4TypeEPKv:
  665|    422|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|    422|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|    422|  }
_ZNK6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml7ContentEE4sizeEv:
 1340|  19.2k|inline int RepeatedPtrField<Element>::size() const {
 1341|  19.2k|  return RepeatedPtrFieldBase::size();
 1342|  19.2k|}
_ZNK6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml7ContentEE3GetEi:
 1346|  3.55k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|  3.55k|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|  3.55k|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerIN16protobuf_mutator3xml7ContentEEEEERKNT_4TypeEi:
  252|  3.55k|  const Value<TypeHandler>& Get(int index) const {
  253|  3.55k|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|  3.55k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|  3.55k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  3.55k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 3.55k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  3.55k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|  3.55k|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|  3.55k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|  3.55k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  3.55k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 3.55k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  3.55k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|  3.55k|    return *cast<TypeHandler>(element_at(index));
  256|  3.55k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerIN16protobuf_mutator3xml7ContentEEEEEPKNT_4TypeEPKv:
  665|  3.55k|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|  3.55k|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|  3.55k|  }
_ZNK6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml9AttributeEE4sizeEv:
 1340|  12.7k|inline int RepeatedPtrField<Element>::size() const {
 1341|  12.7k|  return RepeatedPtrFieldBase::size();
 1342|  12.7k|}
_ZNK6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml9AttributeEE3GetEi:
 1346|    766|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|    766|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|    766|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerIN16protobuf_mutator3xml9AttributeEEEEERKNT_4TypeEi:
  252|    766|  const Value<TypeHandler>& Get(int index) const {
  253|    766|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|    766|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    766|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    766|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 766]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    766|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|    766|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|    766|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    766|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    766|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 766]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    766|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|    766|    return *cast<TypeHandler>(element_at(index));
  256|    766|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerIN16protobuf_mutator3xml9AttributeEEEEEPKNT_4TypeEPKv:
  665|    766|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|    766|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|    766|  }
_ZN6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml4MiskEE19StaticValidityCheckEv:
  938|  30.7k|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|  30.7k|    static_assert(
  940|  30.7k|        absl::disjunction<
  941|  30.7k|            internal::is_supported_string_type<Element>,
  942|  30.7k|            internal::is_supported_message_type<Element>>::value,
  943|  30.7k|        "We only support string and Message types in RepeatedPtrField.");
  944|  30.7k|  }
_ZN6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml4MiskEED2Ev:
 1285|  30.7k|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|  30.7k|  StaticValidityCheck();
 1287|  30.7k|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 30.3k, False: 415]
  ------------------
 1288|    415|#ifdef __cpp_if_constexpr
 1289|    415|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|    415|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|    415|}
_ZN6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml7ContentEE19StaticValidityCheckEv:
  938|  6.98k|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|  6.98k|    static_assert(
  940|  6.98k|        absl::disjunction<
  941|  6.98k|            internal::is_supported_string_type<Element>,
  942|  6.98k|            internal::is_supported_message_type<Element>>::value,
  943|  6.98k|        "We only support string and Message types in RepeatedPtrField.");
  944|  6.98k|  }
_ZN6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml7ContentEED2Ev:
 1285|  6.98k|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|  6.98k|  StaticValidityCheck();
 1287|  6.98k|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 3.72k, False: 3.26k]
  ------------------
 1288|  3.26k|#ifdef __cpp_if_constexpr
 1289|  3.26k|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|  3.26k|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|  3.26k|}
_ZN6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml9AttributeEE19StaticValidityCheckEv:
  938|  6.96k|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|  6.96k|    static_assert(
  940|  6.96k|        absl::disjunction<
  941|  6.96k|            internal::is_supported_string_type<Element>,
  942|  6.96k|            internal::is_supported_message_type<Element>>::value,
  943|  6.96k|        "We only support string and Message types in RepeatedPtrField.");
  944|  6.96k|  }
_ZN6google8protobuf16RepeatedPtrFieldIN16protobuf_mutator3xml9AttributeEED2Ev:
 1285|  6.96k|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|  6.96k|  StaticValidityCheck();
 1287|  6.96k|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 6.65k, False: 306]
  ------------------
 1288|    306|#ifdef __cpp_if_constexpr
 1289|    306|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|    306|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|    306|}

_ZN6google8protobuf10TextFormat6Parser19AllowPartialMessageEb:
  703|  12.0k|    void AllowPartialMessage(bool allow) { allow_partial_ = allow; }
_ZN6google8protobuf10TextFormat6Parser17AllowUnknownFieldEb:
  734|  12.0k|    void AllowUnknownField(bool allow) { allow_unknown_field_ = allow; }
_ZN6google8protobuf10TextFormat6Parser17SetRecursionLimitEi:
  741|  12.0k|    void SetRecursionLimit(int limit) { recursion_limit_ = limit; }

_ZN6google8protobuf15UnknownFieldSet16default_instanceEv:
  320|     19|inline const UnknownFieldSet& UnknownFieldSet::default_instance() {
  321|     19|  PROTOBUF_ATTRIBUTE_NO_DESTROY PROTOBUF_CONSTINIT static const UnknownFieldSet
  ------------------
  |  |  481|     19|#define PROTOBUF_ATTRIBUTE_NO_DESTROY [[clang::no_destroy]]
  ------------------
  322|     19|      instance;
  323|     19|  return instance;
  324|     19|}

_ZN6google8protobuf8internal10WireFormat26VerifyUTF8StringNamedFieldEPKciNS2_9OperationENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEE:
  357|     29|    const absl::string_view field_name) {
  358|       |#ifdef GOOGLE_PROTOBUF_UTF8_VALIDATION_ENABLED
  359|       |  WireFormatLite::VerifyUtf8String(
  360|       |      data, size, static_cast<WireFormatLite::Operation>(op), field_name);
  361|       |#else
  362|       |  // Avoid the compiler warning about unused variables.
  363|     29|  (void)data;
  364|     29|  (void)size;
  365|     29|  (void)op;
  366|     29|  (void)field_name;
  367|     29|#endif
  368|     29|}

_ZN6google8protobuf8internal14WireFormatLite7MakeTagEiNS2_8WireTypeE:
  828|  2.19k|                                                  WireType type) {
  829|  2.19k|  return GOOGLE_PROTOBUF_WIRE_FORMAT_MAKE_TAG(field_number, type);
  ------------------
  |  |  191|  2.19k|  static_cast<uint32_t>((static_cast<uint32_t>(FIELD_NUMBER) << 3) | (TYPE))
  ------------------
  830|  2.19k|}
_ZN6google8protobuf8internal14WireFormatLite15WriteTagToArrayEiNS2_8WireTypeEPh:
 1415|  2.19k|                                                uint8_t* target) {
 1416|  2.19k|  return io::CodedOutputStream::WriteTagToArray(MakeTag(field_number, type),
 1417|  2.19k|                                                target);
 1418|  2.19k|}
_ZN6google8protobuf8internal14WireFormatLite21WriteBoolNoTagToArrayEbPh:
 1476|    428|                                                      uint8_t* target) {
 1477|    428|  return io::CodedOutputStream::WriteVarint32ToArray(value ? 1 : 0, target);
  ------------------
  |  Branch (1477:54): [True: 215, False: 213]
  ------------------
 1478|    428|}
_ZN6google8protobuf8internal14WireFormatLite16WriteBoolToArrayEibPh:
 1648|    428|                                                 uint8_t* target) {
 1649|    428|  target = WriteTagToArray(field_number, WIRETYPE_VARINT, target);
 1650|    428|  return WriteBoolNoTagToArray(value, target);
 1651|    428|}
_ZN6google8protobuf8internal14WireFormatLite10StringSizeERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
 1825|     29|inline size_t WireFormatLite::StringSize(const std::string& value) {
 1826|     29|  return LengthDelimitedSize(value.size());
 1827|     29|}
_ZN6google8protobuf8internal14WireFormatLite19LengthDelimitedSizeEm:
 1873|    472|inline size_t WireFormatLite::LengthDelimitedSize(size_t length) {
 1874|       |  // The static_cast here prevents an error in certain compiler configurations
 1875|       |  // but is not technically correct--if length is too large to fit in a uint32_t
 1876|       |  // then it will be silently truncated. We will need to fix this if we ever
 1877|       |  // decide to start supporting serialized messages greater than 2 GiB in size.
 1878|    472|  return length +
 1879|    472|         io::CodedOutputStream::VarintSize32(static_cast<uint32_t>(length));
 1880|    472|}

_ZN6google8protobuf8internal22GetAnyFieldDescriptorsERKNS0_7MessageEPPKNS0_15FieldDescriptorES8_:
   45|  63.5k|                            const FieldDescriptor** value_field) {
   46|  63.5k|  const Descriptor* descriptor = message.GetDescriptor();
   47|  63.5k|  if (descriptor->full_name() != kAnyFullTypeName) {
  ------------------
  |  Branch (47:7): [True: 63.5k, False: 0]
  ------------------
   48|  63.5k|    return false;
   49|  63.5k|  }
   50|      0|  *type_url_field = descriptor->FindFieldByNumber(1);
   51|      0|  *value_field = descriptor->FindFieldByNumber(2);
   52|      0|  return (*type_url_field != nullptr &&
  ------------------
  |  Branch (52:11): [True: 0, False: 0]
  ------------------
   53|      0|          (*type_url_field)->type() == FieldDescriptor::TYPE_STRING &&
  ------------------
  |  Branch (53:11): [True: 0, False: 0]
  ------------------
   54|      0|          *value_field != nullptr &&
  ------------------
  |  Branch (54:11): [True: 0, False: 0]
  ------------------
   55|      0|          (*value_field)->type() == FieldDescriptor::TYPE_BYTES);
  ------------------
  |  Branch (55:11): [True: 0, False: 0]
  ------------------
   56|  63.5k|}

_ZNK6google8protobuf3Any12GetClassDataEv:
  220|  98.3k|const ::google::protobuf::internal::ClassData* Any::GetClassData() const {
  221|  98.3k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
  222|  98.3k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
  223|  98.3k|  return _class_data_.base();
  224|  98.3k|}
_ZNK6google8protobuf3Any11GetMetadataEv:
  383|  98.3k|::google::protobuf::Metadata Any::GetMetadata() const {
  384|  98.3k|  return ::google::protobuf::Message::GetMetadataImpl(GetClassData()->full());
  385|  98.3k|}

_ZN6google8protobuf8internal7cleanup9ChunkList7CleanupERKNS1_11SerialArenaE:
  148|      5|void ChunkList::Cleanup(const SerialArena& arena) {
  149|      5|  Chunk* c = head_;
  150|      5|  if (c == nullptr) return;
  ------------------
  |  Branch (150:7): [True: 5, False: 0]
  ------------------
  151|      0|  GetDeallocator deallocator(arena.parent_.AllocPolicy());
  152|       |
  153|       |  // Iterate backwards in order to destroy in the right order.
  154|      0|  CleanupNode* it = next_ - 1;
  155|      0|  while (true) {
  ------------------
  |  Branch (155:10): [True: 0, Folded]
  ------------------
  156|      0|    CleanupNode* first = c->First();
  157|       |    // A prefetch distance of 8 here was chosen arbitrarily.
  158|      0|    constexpr int kPrefetchDistance = 8;
  159|      0|    CleanupNode* prefetch = it;
  160|       |    // Prefetch the first kPrefetchDistance nodes.
  161|      0|    for (int i = 0; prefetch >= first && i < kPrefetchDistance;
  ------------------
  |  Branch (161:21): [True: 0, False: 0]
  |  Branch (161:42): [True: 0, False: 0]
  ------------------
  162|      0|         --prefetch, ++i) {
  163|      0|      prefetch->Prefetch();
  164|      0|    }
  165|       |    // For the middle nodes, run destructor and prefetch the node
  166|       |    // kPrefetchDistance after the current one.
  167|      0|    for (; prefetch >= first; --it, --prefetch) {
  ------------------
  |  Branch (167:12): [True: 0, False: 0]
  ------------------
  168|      0|      it->Destroy();
  169|      0|      prefetch->Prefetch();
  170|      0|    }
  171|       |    // Note: we could consider prefetching `next` chunk earlier.
  172|      0|    absl::PrefetchToLocalCacheNta(c->next);
  173|       |    // Destroy the rest without prefetching.
  174|      0|    for (; it >= first; --it) {
  ------------------
  |  Branch (174:12): [True: 0, False: 0]
  ------------------
  175|      0|      it->Destroy();
  176|      0|    }
  177|      0|    Chunk* next = c->next;
  178|      0|    deallocator({c, c->size});
  179|      0|    if (next == nullptr) return;
  ------------------
  |  Branch (179:9): [True: 0, False: 0]
  ------------------
  180|      0|    c = next;
  181|      0|    it = c->Last();
  182|      0|  };
  183|      0|}
_ZN6google8protobuf8internal11SerialArena23AllocateAlignedFallbackEm:
  272|     21|void* SerialArena::AllocateAlignedFallback(size_t n) {
  273|     21|  AllocateNewBlock(n);
  274|     21|  void* ret = nullptr;
  275|     21|  bool res = MaybeAllocateAligned(n, &ret);
  276|     21|  ABSL_DCHECK(res);
  ------------------
  |  |   47|     21|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     21|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     42|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     21|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     42|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     42|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 21, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     21|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 21]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     21|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 21, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     42|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     42|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  277|     21|  return ret;
  278|     21|}
_ZN6google8protobuf8internal11SerialArena31AllocateFromStringBlockFallbackEv:
  281|     16|void* SerialArena::AllocateFromStringBlockFallback() {
  282|     16|  ABSL_DCHECK_EQ(string_block_unused_.load(std::memory_order_relaxed), 0U);
  ------------------
  |  |   74|     16|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     16|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     16|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 16]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     16|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|     16|  StringBlock* sb = string_block_.load(std::memory_order_relaxed);
  284|     16|  if (sb) {
  ------------------
  |  Branch (284:7): [True: 12, False: 4]
  ------------------
  285|     12|    AddSpaceUsed(sb->effective_size());
  286|     12|  }
  287|       |
  288|     16|  void* ptr;
  289|     16|  StringBlock* new_sb;
  290|     16|  size_t size = StringBlock::NextSize(sb);
  291|     16|  if (MaybeAllocateAligned(size, &ptr)) {
  ------------------
  |  Branch (291:7): [True: 11, False: 5]
  ------------------
  292|       |    // Correct space_used_ to avoid double counting
  293|     11|    AddSpaceUsed(-size);
  294|     11|    new_sb = StringBlock::Emplace(ptr, size, sb);
  295|     11|  } else {
  296|      5|    new_sb = StringBlock::New(sb);
  297|      5|    AddSpaceAllocated(new_sb->allocated_size());
  298|      5|  }
  299|     16|  string_block_.store(new_sb, std::memory_order_release);
  300|     16|  size_t unused = new_sb->effective_size() - sizeof(std::string);
  301|     16|  string_block_unused_.store(unused, std::memory_order_relaxed);
  302|     16|  return new_sb->AtOffset(unused);
  303|     16|}
_ZN6google8protobuf8internal11SerialArena16FreeStringBlocksEPNS1_11StringBlockEm:
  369|      4|                                     size_t unused_bytes) {
  370|      4|  ABSL_DCHECK(string_block != nullptr);
  ------------------
  |  |   47|      4|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  371|      4|  StringBlock* next = string_block->next();
  372|      4|  absl::PrefetchToLocalCacheNta(next);
  373|      4|  std::string* end = string_block->end();
  374|    116|  for (std::string* s = string_block->AtOffset(unused_bytes); s != end; ++s) {
  ------------------
  |  Branch (374:63): [True: 112, False: 4]
  ------------------
  375|    112|    s->~basic_string();
  376|    112|  }
  377|      4|  size_t deallocated = StringBlock::Delete(string_block);
  378|       |
  379|     16|  while ((string_block = next) != nullptr) {
  ------------------
  |  Branch (379:10): [True: 12, False: 4]
  ------------------
  380|     12|    next = string_block->next();
  381|     12|    absl::PrefetchToLocalCacheNta(next);
  382|    406|    for (std::string& s : *string_block) {
  ------------------
  |  Branch (382:25): [True: 406, False: 12]
  ------------------
  383|    406|      s.~basic_string();
  384|    406|    }
  385|     12|    deallocated += StringBlock::Delete(string_block);
  386|     12|  }
  387|      4|  return deallocated;
  388|      4|}
_ZN6google8protobuf8internal15ThreadSafeArena22SentrySerialArenaChunkEv:
  539|      5|ThreadSafeArena::SerialArenaChunk* ThreadSafeArena::SentrySerialArenaChunk() {
  540|       |  // const_cast is okay because the sentry chunk is never mutated. Also,
  541|       |  // reinterpret_cast is acceptable here as it should be identical to
  542|       |  // SerialArenaChunk with zero payload. This is a necessary trick to
  543|       |  // constexpr initialize kSentryArenaChunk.
  544|      5|  return reinterpret_cast<SerialArenaChunk*>(
  545|      5|      const_cast<SerialArenaChunkHeader*>(&kSentryArenaChunk));
  546|      5|}
_ZN6google8protobuf8internal15ThreadSafeArenaC2Ev:
  567|      5|ThreadSafeArena::ThreadSafeArena() : first_arena_(*this) { Init(); }
_ZN6google8protobuf8internal15ThreadSafeArena18GetNextLifeCycleIdEv:
  638|      5|uint64_t ThreadSafeArena::GetNextLifeCycleId() {
  639|      5|  ThreadCache& tc = thread_cache();
  640|      5|  uint64_t id = tc.next_lifecycle_id;
  641|      5|  constexpr uint64_t kInc = ThreadCache::kPerThreadIds;
  642|      5|  if (PROTOBUF_PREDICT_FALSE((id & (kInc - 1)) == 0)) {
  ------------------
  |  |  365|      5|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 1, False: 4]
  |  |  |  Branch (365:54): [Folded, False: 5]
  |  |  |  Branch (365:63): [True: 1, False: 4]
  |  |  ------------------
  ------------------
  643|       |    // On platforms that don't support uint64_t atomics we can certainly not
  644|       |    // afford to increment by large intervals and expect uniqueness due to
  645|       |    // wrapping, hence we only add by 1.
  646|      1|    id = lifecycle_id_.fetch_add(1, std::memory_order_relaxed) * kInc;
  647|      1|  }
  648|      5|  tc.next_lifecycle_id = id + 1;
  649|      5|  return id;
  650|      5|}
_ZN6google8protobuf8internal15ThreadSafeArena4InitEv:
  719|      5|void ThreadSafeArena::Init() {
  720|      5|  tag_and_id_ = GetNextLifeCycleId();
  721|      5|  arena_stats_ = Sample();
  722|      5|  head_.store(SentrySerialArenaChunk(), std::memory_order_relaxed);
  723|      5|  first_owner_ = &thread_cache();
  724|       |
  725|       |  // Record allocation for the first block that was either user-provided or
  726|       |  // newly allocated.
  727|      5|  ThreadSafeArenaStats::RecordAllocateStats(
  728|      5|      arena_stats_.MutableStats(),
  729|      5|      /*used=*/0,
  730|      5|      /*allocated=*/first_arena_.SpaceAllocated(),
  731|      5|      /*wasted=*/0);
  732|       |
  733|      5|  CacheSerialArena(&first_arena_);
  734|      5|}
_ZN6google8protobuf8internal15ThreadSafeArenaD2Ev:
  736|      5|ThreadSafeArena::~ThreadSafeArena() {
  737|       |  // Have to do this in a first pass, because some of the destructors might
  738|       |  // refer to memory in other blocks.
  739|      5|  CleanupList();
  740|       |
  741|      5|  auto mem = Free();
  742|      5|  if (alloc_policy_.is_user_owned_initial_block()) {
  ------------------
  |  Branch (742:7): [True: 0, False: 5]
  ------------------
  743|       |    // Unpoison the initial block, now that it's going back to the user.
  744|      0|    PROTOBUF_UNPOISON_MEMORY_REGION(mem.p, mem.n);
  745|      5|  } else if (mem.n > 0) {
  ------------------
  |  Branch (745:14): [True: 0, False: 5]
  ------------------
  746|      0|    GetDeallocator(alloc_policy_.get())(mem);
  747|      0|  }
  748|      5|}
_ZN6google8protobuf8internal15ThreadSafeArena4FreeEv:
  750|      5|SizedPtr ThreadSafeArena::Free() {
  751|      5|  auto deallocator = GetDeallocator(alloc_policy_.get());
  752|       |
  753|      5|  WalkSerialArenaChunk([&](SerialArenaChunk* chunk) {
  754|      5|    absl::Span<std::atomic<SerialArena*>> span = chunk->arenas();
  755|       |    // Walks arenas backward to handle the first serial arena the last. Freeing
  756|       |    // in reverse-order to the order in which objects were created may not be
  757|       |    // necessary to Free and we should revisit this. (b/247560530)
  758|      5|    for (auto it = span.rbegin(); it != span.rend(); ++it) {
  759|      5|      SerialArena* serial = it->load(std::memory_order_relaxed);
  760|      5|      ABSL_DCHECK_NE(serial, nullptr);
  761|       |      // Always frees the first block of "serial" as it cannot be user-provided.
  762|      5|      SizedPtr mem = serial->Free(deallocator);
  763|      5|      ABSL_DCHECK_NE(mem.p, nullptr);
  764|      5|      deallocator(mem);
  765|      5|    }
  766|       |
  767|       |    // Delete the chunk as we're done with it.
  768|      5|    internal::SizedDelete(chunk,
  769|      5|                          SerialArenaChunk::AllocSize(chunk->capacity()));
  770|      5|  });
  771|       |
  772|       |  // The first block of the first arena is special and let the caller handle it.
  773|      5|  return first_arena_.Free(deallocator);
  774|      5|}
_ZN6google8protobuf8internal15ThreadSafeArena14GetSerialArenaEv:
  823|    515|SerialArena* ThreadSafeArena::GetSerialArena() {
  824|    515|  SerialArena* arena;
  825|    515|  if (PROTOBUF_PREDICT_FALSE(!GetSerialArenaFast(&arena))) {
  ------------------
  |  |  365|    515|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 515]
  |  |  |  Branch (365:54): [Folded, False: 515]
  |  |  |  Branch (365:63): [True: 0, False: 515]
  |  |  ------------------
  ------------------
  826|      0|    arena = GetSerialArenaFallback(kMaxCleanupNodeSize);
  827|      0|  }
  828|    515|  return arena;
  829|    515|}
_ZN6google8protobuf8internal15ThreadSafeArena23AllocateFromStringBlockEv:
  839|    515|void* ThreadSafeArena::AllocateFromStringBlock() {
  840|    515|  return GetSerialArena()->AllocateFromStringBlock();
  841|    515|}
_ZN6google8protobuf8internal15ThreadSafeArena11CleanupListEv:
  917|      5|void ThreadSafeArena::CleanupList() {
  918|       |#ifdef PROTOBUF_ASAN
  919|       |  UnpoisonAllArenaBlocks();
  920|       |#endif
  921|       |
  922|      5|  WalkSerialArenaChunk([](SerialArenaChunk* chunk) {
  923|      5|    absl::Span<std::atomic<SerialArena*>> span = chunk->arenas();
  924|       |    // Walks arenas backward to handle the first serial arena the last.
  925|       |    // Destroying in reverse-order to the construction is often assumed by users
  926|       |    // and required not to break inter-object dependencies. (b/247560530)
  927|      5|    for (auto it = span.rbegin(); it != span.rend(); ++it) {
  928|      5|      SerialArena* serial = it->load(std::memory_order_relaxed);
  929|      5|      ABSL_DCHECK_NE(serial, nullptr);
  930|      5|      serial->CleanupList();
  931|      5|    }
  932|      5|  });
  933|       |  // First arena must be cleaned up last. (b/247560530)
  934|      5|  first_arena_.CleanupList();
  935|      5|}
_ZN6google8protobuf5Arena8AllocateEm:
  974|    436|void* Arena::Allocate(size_t n) { return impl_.AllocateAligned(n); }
_ZN6google8protobuf5Arena16AllocateForArrayEm:
  976|    125|void* Arena::AllocateForArray(size_t n) {
  977|    125|  return impl_.AllocateAligned<internal::AllocationClient::kArray>(n);
  978|    125|}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_114AllocationSizeEmmm:
   64|     21|                             size_t max_size) {
   65|     21|  if (last_size == 0) return start_size;
  ------------------
  |  Branch (65:7): [True: 4, False: 17]
  ------------------
   66|       |  // Double the current block size, up to a limit.
   67|     17|  return std::min(2 * last_size, max_size);
   68|     21|}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_114AllocateMemoryERKNS1_16AllocationPolicyEm:
   70|     21|SizedPtr AllocateMemory(const AllocationPolicy& policy, size_t size) {
   71|     21|  if (policy.block_alloc == nullptr) {
  ------------------
  |  Branch (71:7): [True: 21, False: 0]
  ------------------
   72|     21|    return AllocateAtLeast(size);
   73|     21|  }
   74|      0|  return {policy.block_alloc(size), size};
   75|     21|}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_114GetDeallocatorC2EPKNS1_16AllocationPolicyE:
  105|      5|      : dealloc_(policy ? policy->block_dealloc : nullptr) {}
  ------------------
  |  Branch (105:18): [True: 0, False: 5]
  ------------------
arena.cc:_ZNK6google8protobuf8internal12_GLOBAL__N_114GetDeallocatorclENS1_8SizedPtrE:
  107|     21|  void operator()(SizedPtr mem) const {
  108|     21|    if (dealloc_) {
  ------------------
  |  Branch (108:9): [True: 0, False: 21]
  ------------------
  109|      0|      dealloc_(mem.p, mem.n);
  110|     21|    } else {
  111|     21|      internal::SizedDelete(mem.p, mem.n);
  112|     21|    }
  113|     21|  }
_ZN6google8protobuf8internal11SerialArena16AllocateNewBlockEm:
  313|     21|void SerialArena::AllocateNewBlock(size_t n) {
  314|     21|  size_t used = 0;
  315|     21|  size_t wasted = 0;
  316|     21|  ArenaBlock* old_head = head();
  317|     21|  if (!old_head->IsSentry()) {
  ------------------
  |  Branch (317:7): [True: 17, False: 4]
  ------------------
  318|       |    // Record how much used in this block.
  319|     17|    used = static_cast<size_t>(ptr() - old_head->Pointer(kBlockHeaderSize));
  320|     17|    wasted = old_head->size - used - kBlockHeaderSize;
  321|     17|    AddSpaceUsed(used);
  322|     17|  }
  323|       |
  324|       |  // TODO: Evaluate if pushing unused space into the cached blocks is a
  325|       |  // win. In preliminary testing showed increased memory savings as expected,
  326|       |  // but with a CPU regression. The regression might have been an artifact of
  327|       |  // the microbenchmark.
  328|       |
  329|     21|  auto mem = AllocateBlock(parent_.AllocPolicy(), old_head->size, n);
  330|     21|  AddSpaceAllocated(mem.n);
  331|     21|  ThreadSafeArenaStats::RecordAllocateStats(parent_.arena_stats_.MutableStats(),
  332|     21|                                            /*used=*/used,
  333|     21|                                            /*allocated=*/mem.n, wasted);
  334|     21|  auto* new_head = new (mem.p) ArenaBlock{old_head, mem.n};
  335|     21|  set_range(new_head->Pointer(kBlockHeaderSize), new_head->Limit());
  336|       |  // Previous writes must take effect before writing new head.
  337|     21|  head_.store(new_head, std::memory_order_release);
  338|       |
  339|     21|  PROTOBUF_POISON_MEMORY_REGION(ptr(), limit_ - ptr());
  340|     21|}
_ZN6google8protobuf8internal11SerialArenaC2ERNS1_15ThreadSafeArenaE:
  218|      5|    : head_{SentryArenaBlock()}, parent_{parent} {}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_116SentryArenaBlockEv:
   56|      5|ArenaBlock* SentryArenaBlock() {
   57|      5|  static const ArenaBlock kSentryArenaBlock;
   58|       |  // const_cast<> is okay as kSentryArenaBlock will never be mutated.
   59|      5|  return const_cast<ArenaBlock*>(&kSentryArenaBlock);
   60|      5|}
arena.cc:_ZN6google8protobuf8internal12_GLOBAL__N_113AllocateBlockEPKNS1_16AllocationPolicyEmm:
   78|     21|                       size_t min_bytes) {
   79|     21|  AllocationPolicy policy;  // default policy
   80|     21|  if (policy_ptr) policy = *policy_ptr;
  ------------------
  |  Branch (80:7): [True: 0, False: 21]
  ------------------
   81|     21|  size_t size =
   82|     21|      AllocationSize(last_size, policy.start_block_size, policy.max_block_size);
   83|       |  // Verify that min_bytes + kBlockHeaderSize won't overflow.
   84|     21|  ABSL_CHECK_LE(min_bytes, std::numeric_limits<size_t>::max() -
  ------------------
  |  |   54|     21|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     21|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     21|  while (                                                                      \
  |  |  |  |  |  |   62|     21|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 21]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     21|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     21|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     21|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     21|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     21|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     21|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   85|     21|                               SerialArena::kBlockHeaderSize);
   86|     21|  size = std::max(size, SerialArena::kBlockHeaderSize + min_bytes);
   87|       |
   88|     21|  return AllocateMemory(policy, size);
   89|     21|}
_ZNK6google8protobuf8internal15ThreadSafeArena16SerialArenaChunk8IsSentryEv:
  439|     10|  bool IsSentry() const { return capacity() == 0; }
_ZNK6google8protobuf8internal15ThreadSafeArena16SerialArenaChunk8capacityEv:
  449|     10|  uint32_t capacity() const { return header().capacity; }
_ZNK6google8protobuf8internal15ThreadSafeArena16SerialArenaChunk6headerEv:
  518|     10|  const SerialArenaChunkHeader& header() const {
  519|     10|    return *layout_type::Partial().Pointer<kHeader>(ptr());
  520|     10|  }
_ZNK6google8protobuf8internal15ThreadSafeArena16SerialArenaChunk3ptrEv:
  512|     10|  const char* ptr() const { return reinterpret_cast<const char*>(this); }
arena.cc:_ZN6google8protobuf8internal11SerialArena4FreeINS1_12_GLOBAL__N_114GetDeallocatorEEENS1_8SizedPtrET_:
  258|      5|SizedPtr SerialArena::Free(Deallocator deallocator) {
  259|      5|  FreeStringBlocks();
  260|       |
  261|      5|  ArenaBlock* b = head();
  262|      5|  SizedPtr mem = {b, b->size};
  263|     26|  while (b->next) {
  ------------------
  |  Branch (263:10): [True: 21, False: 5]
  ------------------
  264|     21|    b = b->next;  // We must first advance before deleting this block
  265|     21|    deallocator(mem);
  266|     21|    mem = {b, b->size};
  267|     21|  }
  268|      5|  return mem;
  269|      5|}
arena.cc:_ZN6google8protobuf8internal15ThreadSafeArena20WalkSerialArenaChunkIZNS2_4FreeEvE3$_0EEvT_:
  855|      5|void ThreadSafeArena::WalkSerialArenaChunk(Callback fn) {
  856|       |  // By omitting an Acquire barrier we help the sanitizer that any user code
  857|       |  // that doesn't properly synchronize Reset() or the destructor will throw a
  858|       |  // TSAN warning.
  859|      5|  SerialArenaChunk* chunk = head_.load(std::memory_order_relaxed);
  860|       |
  861|      5|  while (!chunk->IsSentry()) {
  ------------------
  |  Branch (861:10): [True: 0, False: 5]
  ------------------
  862|       |    // Cache next chunk in case this chunk is destroyed.
  863|      0|    SerialArenaChunk* next_chunk = chunk->next_chunk();
  864|       |    // Prefetch the next chunk.
  865|      0|    absl::PrefetchToLocalCache(next_chunk);
  866|      0|    fn(chunk);
  867|      0|    chunk = next_chunk;
  868|      0|  }
  869|      5|}
arena.cc:_ZN6google8protobuf8internal15ThreadSafeArena20WalkSerialArenaChunkIZNS2_11CleanupListEvE3$_0EEvT_:
  855|      5|void ThreadSafeArena::WalkSerialArenaChunk(Callback fn) {
  856|       |  // By omitting an Acquire barrier we help the sanitizer that any user code
  857|       |  // that doesn't properly synchronize Reset() or the destructor will throw a
  858|       |  // TSAN warning.
  859|      5|  SerialArenaChunk* chunk = head_.load(std::memory_order_relaxed);
  860|       |
  861|      5|  while (!chunk->IsSentry()) {
  ------------------
  |  Branch (861:10): [True: 0, False: 5]
  ------------------
  862|       |    // Cache next chunk in case this chunk is destroyed.
  863|      0|    SerialArenaChunk* next_chunk = chunk->next_chunk();
  864|       |    // Prefetch the next chunk.
  865|      0|    absl::PrefetchToLocalCache(next_chunk);
  866|      0|    fn(chunk);
  867|      0|    chunk = next_chunk;
  868|      0|  }
  869|      5|}

_ZN6google8protobuf5ArenaC2Ev:
  173|      5|  inline Arena() : impl_() {}
_ZN6google8protobuf5Arena17ReturnArrayMemoryEPvm:
  527|     44|  void ReturnArrayMemory(void* p, size_t size) {
  528|     44|    impl_.ReturnArrayMemory(p, size);
  529|     44|  }
_ZN6google8protobuf5Arena23AllocateAlignedForArrayEmm:
  634|    125|  void* AllocateAlignedForArray(size_t n, size_t align) {
  635|    125|    if (align <= internal::ArenaAlignDefault::align) {
  ------------------
  |  Branch (635:9): [True: 125, False: 0]
  ------------------
  636|    125|      return AllocateForArray(internal::ArenaAlignDefault::Ceil(n));
  637|    125|    } else {
  638|       |      // We are wasting space by over allocating align - 8 bytes. Compared
  639|       |      // to a dedicated function that takes current alignment in consideration.
  640|       |      // Such a scheme would only waste (align - 8)/2 bytes on average, but
  641|       |      // requires a dedicated function in the outline arena allocation
  642|       |      // functions. Possibly re-evaluate tradeoffs later.
  643|      0|      auto align_as = internal::ArenaAlignAs(align);
  644|      0|      return align_as.Ceil(AllocateForArray(align_as.Padded(n)));
  645|      0|    }
  646|    125|  }
_ZN6google8protobuf8internal23CanMoveWithInternalSwapEPNS0_5ArenaES3_:
  101|    230|inline bool CanMoveWithInternalSwap(Arena* lhs, Arena* rhs) {
  102|    230|  if (DebugHardenForceCopyInMove()) {
  ------------------
  |  Branch (102:7): [Folded, False: 230]
  ------------------
  103|       |    // We force copy in move when we are not using an arena.
  104|       |    // If we did with an arena we would grow arena usage too much.
  105|      0|    return lhs != nullptr && lhs == rhs;
  ------------------
  |  Branch (105:12): [True: 0, False: 0]
  |  Branch (105:30): [True: 0, False: 0]
  ------------------
  106|    230|  } else {
  107|    230|    return lhs == rhs;
  108|    230|  }
  109|    230|}
_ZN6google8protobuf5Arena16AllocateInternalINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEELb0EEEPvv:
  706|    515|inline void* Arena::AllocateInternal<std::string, false>() {
  707|    515|  return impl_.AllocateFromStringBlock();
  708|    515|}
_ZZN6google8protobuf5Arena6CreateINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJEEEPT_PS1_DpOT0_ENKUlDpOT_E0_clIJEEEDaSI_:
  244|    518|        [arena](auto&&... args) {
  245|    518|          if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
  ------------------
  |  |  365|    518|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 3, False: 515]
  |  |  |  Branch (365:54): [Folded, False: 518]
  |  |  |  Branch (365:63): [True: 3, False: 515]
  |  |  ------------------
  ------------------
  246|      3|            return new T(std::forward<Args>(args)...);
  247|      3|          }
  248|    515|          return new (arena->AllocateInternal<T>())
  249|    515|              T(std::forward<Args>(args)...);
  250|    518|        },
_ZN6google8protobuf5Arena6CreateINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJEEEPT_PS1_DpOT0_:
  216|    518|  PROTOBUF_NDEBUG_INLINE static T* Create(Arena* arena, Args&&... args) {
  217|    518|    return absl::utility_internal::IfConstexprElse<
  218|    518|        is_arena_constructable<T>::value>(
  219|       |        // Arena-constructable
  220|    518|        [arena](auto&&... args) {
  221|    518|          using Type = std::remove_const_t<T>;
  222|    518|#ifdef __cpp_if_constexpr
  223|       |          // DefaultConstruct/CopyConstruct are optimized for messages, which
  224|       |          // are both arena constructible and destructor skippable and they
  225|       |          // assume much. Don't use these functions unless the invariants
  226|       |          // hold.
  227|    518|          if constexpr (is_destructor_skippable<T>::value) {
  228|    518|            constexpr auto construct_type = GetConstructType<T, Args&&...>();
  229|       |            // We delegate to DefaultConstruct/CopyConstruct where appropriate
  230|       |            // because protobuf generated classes have external templates for
  231|       |            // these functions for code size reasons. When `if constexpr` is not
  232|       |            // available always use the fallback.
  233|    518|            if constexpr (construct_type == ConstructType::kDefault) {
  234|    518|              return static_cast<Type*>(DefaultConstruct<Type>(arena));
  235|    518|            } else if constexpr (construct_type == ConstructType::kCopy) {
  236|    518|              return static_cast<Type*>(CopyConstruct<Type>(arena, &args...));
  237|    518|            }
  238|    518|          }
  239|    518|#endif
  240|    518|          return CreateArenaCompatible<Type>(arena,
  241|    518|                                             std::forward<Args>(args)...);
  242|    518|        },
  243|       |        // Non arena-constructable
  244|    518|        [arena](auto&&... args) {
  245|    518|          if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
  246|    518|            return new T(std::forward<Args>(args)...);
  247|    518|          }
  248|    518|          return new (arena->AllocateInternal<T>())
  249|    518|              T(std::forward<Args>(args)...);
  250|    518|        },
  251|    518|        std::forward<Args>(args)...);
  252|    518|  }
_ZN6google8protobuf5Arena11CreateArrayIcEEPT_PS1_m:
  286|    125|                                               size_t num_elements) {
  287|    125|    static_assert(std::is_trivial<T>::value,
  288|    125|                  "CreateArray requires a trivially constructible type");
  289|    125|    static_assert(std::is_trivially_destructible<T>::value,
  290|    125|                  "CreateArray requires a trivially destructible type");
  291|    125|    ABSL_CHECK_LE(num_elements, std::numeric_limits<size_t>::max() / sizeof(T))
  ------------------
  |  |   54|      0|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|    125|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    125|  while (                                                                      \
  |  |  |  |  |  |   62|    125|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 125]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    125|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|    125|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|    125|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|    125|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|    125|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|    125|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|    125|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|    125|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  292|      0|        << "Requested size is too large to fit into size_t.";
  293|    125|    if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
  ------------------
  |  |  365|    125|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 125]
  |  |  |  Branch (365:54): [Folded, False: 125]
  |  |  |  Branch (365:63): [True: 0, False: 125]
  |  |  ------------------
  ------------------
  294|      0|      return new T[num_elements];
  295|    125|    } else {
  296|       |      // We count on compiler to realize that if sizeof(T) is a multiple of
  297|       |      // 8 AlignUpTo can be elided.
  298|    125|      return static_cast<T*>(
  299|    125|          arena->AllocateAlignedForArray(sizeof(T) * num_elements, alignof(T)));
  300|    125|    }
  301|    125|  }
_ZN6google8protobuf5Arena16DefaultConstructINS0_19FileDescriptorProtoEEEPvPS1_:
  684|      4|PROTOBUF_NOINLINE void* Arena::DefaultConstruct(Arena* arena) {
  685|      4|  static_assert(is_destructor_skippable<T>::value, "");
  686|      4|  void* mem = arena != nullptr ? arena->AllocateAligned(sizeof(T))
  ------------------
  |  Branch (686:15): [True: 4, False: 0]
  ------------------
  687|      4|                               : ::operator new(sizeof(T));
  688|      4|  return new (mem) T(arena);
  689|      4|}
_ZN6google8protobuf5ArenaD2Ev:
  198|      5|  inline ~Arena() = default;
_ZN6google8protobuf5Arena6CreateINS0_19FileDescriptorProtoEJEEEPT_PS1_DpOT0_:
  216|      4|  PROTOBUF_NDEBUG_INLINE static T* Create(Arena* arena, Args&&... args) {
  217|      4|    return absl::utility_internal::IfConstexprElse<
  218|      4|        is_arena_constructable<T>::value>(
  219|       |        // Arena-constructable
  220|      4|        [arena](auto&&... args) {
  221|      4|          using Type = std::remove_const_t<T>;
  222|      4|#ifdef __cpp_if_constexpr
  223|       |          // DefaultConstruct/CopyConstruct are optimized for messages, which
  224|       |          // are both arena constructible and destructor skippable and they
  225|       |          // assume much. Don't use these functions unless the invariants
  226|       |          // hold.
  227|      4|          if constexpr (is_destructor_skippable<T>::value) {
  228|      4|            constexpr auto construct_type = GetConstructType<T, Args&&...>();
  229|       |            // We delegate to DefaultConstruct/CopyConstruct where appropriate
  230|       |            // because protobuf generated classes have external templates for
  231|       |            // these functions for code size reasons. When `if constexpr` is not
  232|       |            // available always use the fallback.
  233|      4|            if constexpr (construct_type == ConstructType::kDefault) {
  234|      4|              return static_cast<Type*>(DefaultConstruct<Type>(arena));
  235|      4|            } else if constexpr (construct_type == ConstructType::kCopy) {
  236|      4|              return static_cast<Type*>(CopyConstruct<Type>(arena, &args...));
  237|      4|            }
  238|      4|          }
  239|      4|#endif
  240|      4|          return CreateArenaCompatible<Type>(arena,
  241|      4|                                             std::forward<Args>(args)...);
  242|      4|        },
  243|       |        // Non arena-constructable
  244|      4|        [arena](auto&&... args) {
  245|      4|          if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
  246|      4|            return new T(std::forward<Args>(args)...);
  247|      4|          }
  248|      4|          return new (arena->AllocateInternal<T>())
  249|      4|              T(std::forward<Args>(args)...);
  250|      4|        },
  251|      4|        std::forward<Args>(args)...);
  252|      4|  }
_ZZN6google8protobuf5Arena6CreateINS0_19FileDescriptorProtoEJEEEPT_PS1_DpOT0_ENKUlDpOT_E_clIJEEEDaSC_:
  220|      4|        [arena](auto&&... args) {
  221|      4|          using Type = std::remove_const_t<T>;
  222|      4|#ifdef __cpp_if_constexpr
  223|       |          // DefaultConstruct/CopyConstruct are optimized for messages, which
  224|       |          // are both arena constructible and destructor skippable and they
  225|       |          // assume much. Don't use these functions unless the invariants
  226|       |          // hold.
  227|      4|          if constexpr (is_destructor_skippable<T>::value) {
  228|      4|            constexpr auto construct_type = GetConstructType<T, Args&&...>();
  229|       |            // We delegate to DefaultConstruct/CopyConstruct where appropriate
  230|       |            // because protobuf generated classes have external templates for
  231|       |            // these functions for code size reasons. When `if constexpr` is not
  232|       |            // available always use the fallback.
  233|      4|            if constexpr (construct_type == ConstructType::kDefault) {
  234|      4|              return static_cast<Type*>(DefaultConstruct<Type>(arena));
  235|       |            } else if constexpr (construct_type == ConstructType::kCopy) {
  236|       |              return static_cast<Type*>(CopyConstruct<Type>(arena, &args...));
  237|       |            }
  238|      4|          }
  239|      0|#endif
  240|      0|          return CreateArenaCompatible<Type>(arena,
  241|      4|                                             std::forward<Args>(args)...);
  242|      4|        },
_ZN6google8protobuf5Arena11CreateArrayINS0_8internal12ExtensionSet8KeyValueEEEPT_PS1_m:
  286|    444|                                               size_t num_elements) {
  287|    444|    static_assert(std::is_trivial<T>::value,
  288|    444|                  "CreateArray requires a trivially constructible type");
  289|    444|    static_assert(std::is_trivially_destructible<T>::value,
  290|    444|                  "CreateArray requires a trivially destructible type");
  291|    444|    ABSL_CHECK_LE(num_elements, std::numeric_limits<size_t>::max() / sizeof(T))
  ------------------
  |  |   54|      0|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|    444|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    444|  while (                                                                      \
  |  |  |  |  |  |   62|    444|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 444]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    444|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|    444|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|    444|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|    444|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|    444|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|    444|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|    444|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|    444|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  292|      0|        << "Requested size is too large to fit into size_t.";
  293|    444|    if (PROTOBUF_PREDICT_FALSE(arena == nullptr)) {
  ------------------
  |  |  365|    444|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 444, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 444]
  |  |  |  Branch (365:63): [True: 444, False: 0]
  |  |  ------------------
  ------------------
  294|    444|      return new T[num_elements];
  295|    444|    } else {
  296|       |      // We count on compiler to realize that if sizeof(T) is a multiple of
  297|       |      // 8 AlignUpTo can be elided.
  298|      0|      return static_cast<T*>(
  299|      0|          arena->AllocateAlignedForArray(sizeof(T) * num_elements, alignof(T)));
  300|      0|    }
  301|    444|  }

_ZN6google8protobuf8internal25TaggedAllocationPolicyPtrC2Ev:
   43|      5|  constexpr TaggedAllocationPolicyPtr() : policy_(0) {}
_ZN6google8protobuf8internal25TaggedAllocationPolicyPtr3getEv:
   53|      5|  AllocationPolicy* get() {
   54|      5|    return reinterpret_cast<AllocationPolicy*>(policy_ & kPtrMask);
   55|      5|  }
_ZNK6google8protobuf8internal25TaggedAllocationPolicyPtr3getEv:
   56|     21|  const AllocationPolicy* get() const {
   57|     21|    return reinterpret_cast<const AllocationPolicy*>(policy_ & kPtrMask);
   58|     21|  }
_ZNK6google8protobuf8internal25TaggedAllocationPolicyPtr27is_user_owned_initial_blockEv:
   66|      5|  bool is_user_owned_initial_block() const {
   67|      5|    return static_cast<bool>(get_mask<kUserOwnedInitialBlock>());
   68|      5|  }
_ZNK6google8protobuf8internal25TaggedAllocationPolicyPtr8get_maskILm1EEEmv:
   84|      5|  uintptr_t get_mask() const {
   85|      5|    return policy_ & kMask;
   86|      5|  }

_ZN6google8protobuf8internal14ArenaStringPtr3SetEONSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPNS0_5ArenaE:
  149|  17.9k|void ArenaStringPtr::Set(std::string&& value, Arena* arena) {
  150|  17.9k|  ScopedCheckPtrInvariants check(&tagged_ptr_);
  151|  17.9k|  if (IsDefault()) {
  ------------------
  |  Branch (151:7): [True: 17.9k, False: 0]
  ------------------
  152|  17.9k|    NewString(arena, std::move(value));
  153|  17.9k|  } else if (IsFixedSizeArena()) {
  ------------------
  |  Branch (153:14): [True: 0, False: 0]
  ------------------
  154|      0|    std::string* current = tagged_ptr_.Get();
  155|      0|    auto* s = new (current) std::string(std::move(value));
  156|      0|    arena->OwnDestructor(s);
  157|      0|    tagged_ptr_.SetMutableArena(s);
  158|      0|  } else /* !IsFixedSizeArena() */ {
  159|      0|    *UnsafeMutablePointer() = std::move(value);
  160|      0|  }
  161|  17.9k|}
_ZN6google8protobuf8internal14ArenaStringPtr13MutableNoCopyEPNS0_5ArenaE:
  182|    612|std::string* ArenaStringPtr::MutableNoCopy(Arena* arena) {
  183|    612|  ScopedCheckPtrInvariants check(&tagged_ptr_);
  184|    612|  if (tagged_ptr_.IsMutable()) {
  ------------------
  |  Branch (184:7): [True: 0, False: 612]
  ------------------
  185|      0|    return tagged_ptr_.Get();
  186|    612|  } else {
  187|    612|    ABSL_DCHECK(IsDefault());
  ------------------
  |  |   47|    612|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    612|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.22k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    612|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.22k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.22k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 612, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    612|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 612]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    612|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 612, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.22k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.22k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  188|       |    // Allocate empty. The contents are not relevant.
  189|    612|    return NewString(arena);
  190|    612|  }
  191|    612|}
_ZN6google8protobuf8internal14ArenaStringPtr7DestroyEv:
  237|  54.4k|void ArenaStringPtr::Destroy() {
  238|  54.4k|  delete tagged_ptr_.GetIfAllocated();
  239|  54.4k|}
_ZN6google8protobuf8internal18EpsCopyInputStream15ReadArenaStringEPKcPNS1_14ArenaStringPtrEPNS0_5ArenaE:
  268|    515|                                                Arena* arena) {
  269|    515|  ScopedCheckPtrInvariants check(&s->tagged_ptr_);
  270|    515|  ABSL_DCHECK(arena != nullptr);
  ------------------
  |  |   47|    515|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    515|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.03k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    515|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.03k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.03k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 515, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    515|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 515]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    515|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 515, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.03k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.03k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  271|       |
  272|    515|  int size = ReadSize(&ptr);
  273|    515|  if (!ptr) return nullptr;
  ------------------
  |  Branch (273:7): [True: 0, False: 515]
  ------------------
  274|       |
  275|    515|  auto* str = s->NewString(arena);
  276|    515|  ptr = ReadString(ptr, size, str);
  277|    515|  GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
  ------------------
  |  | 1157|    515|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1150|    515|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1150:7): [True: 0, False: 515]
  |  |  |  |  ------------------
  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  | 1154|      0|  }
  |  |  ------------------
  ------------------
  278|    515|  return ptr;
  279|    515|}
arenastring.cc:_ZN6google8protobuf8internal12_GLOBAL__N_124ScopedCheckPtrInvariantsC2EPKNS1_15TaggedStringPtrE:
   70|  19.0k|  explicit ScopedCheckPtrInvariants(const TaggedStringPtr*) {}

_ZN6google8protobuf8internal15TaggedStringPtr12SetAllocatedEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  122|  18.5k|  inline std::string* SetAllocated(std::string* p) {
  123|  18.5k|    return TagAs(kAllocated, p);
  124|  18.5k|  }
_ZN6google8protobuf8internal15TaggedStringPtr15SetMutableArenaEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  136|    515|  inline std::string* SetMutableArena(std::string* p) {
  137|    515|    return TagAs(kMutableArena, p);
  138|    515|  }
_ZNK6google8protobuf8internal15TaggedStringPtr9IsMutableEv:
  141|    612|  inline bool IsMutable() const { return as_int() & kMutableBit; }
_ZNK6google8protobuf8internal15TaggedStringPtr14GetIfAllocatedEv:
  148|  54.4k|  inline std::string* GetIfAllocated() const {
  149|  54.4k|    auto allocated = as_int() ^ kAllocated;
  150|  54.4k|    if (allocated & kMask) return nullptr;
  ------------------
  |  Branch (150:9): [True: 35.8k, False: 18.5k]
  ------------------
  151|       |
  152|  18.5k|    auto ptr = reinterpret_cast<std::string*>(allocated);
  153|  18.5k|    PROTOBUF_ASSUME(ptr != nullptr);
  ------------------
  |  |  941|  18.5k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  154|  18.5k|    return ptr;
  155|  54.4k|  }
_ZN6google8protobuf8internal15TaggedStringPtr14assert_alignedEPKv:
  186|  19.0k|  static inline void assert_aligned(const void* p) {
  187|  19.0k|    static_assert(kMask <= alignof(void*), "Pointer underaligned for bit mask");
  188|  19.0k|    static_assert(kMask <= alignof(std::string),
  189|  19.0k|                  "std::string underaligned for bit mask");
  190|  19.0k|    ABSL_DCHECK_EQ(reinterpret_cast<uintptr_t>(p) & kMask, 0UL);
  ------------------
  |  |   74|  19.0k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|  19.0k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  19.0k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 19.0k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  19.0k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|  19.0k|  }
_ZN6google8protobuf8internal15TaggedStringPtr5TagAsENS2_4TypeEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
  196|  19.0k|  inline std::string* TagAs(Type type, std::string* p) {
  197|  19.0k|    ABSL_DCHECK(p != nullptr);
  ------------------
  |  |   47|  19.0k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  19.0k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  38.1k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  19.0k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  38.1k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  38.1k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 19.0k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  19.0k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 19.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  19.0k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 19.0k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  38.1k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  38.1k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|  19.0k|    assert_aligned(p);
  199|  19.0k|    ptr_ = reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(p) | type);
  200|  19.0k|    return p;
  201|  19.0k|  }
_ZNK6google8protobuf8internal14ArenaStringPtr9IsDefaultEv:
  392|  17.9k|  inline bool IsDefault() const { return tagged_ptr_.IsDefault(); }
_ZN6google8protobuf8internal14ArenaStringPtr9NewStringIJNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEPSA_PNS0_5ArenaEDpOT_:
  396|  17.9k|  inline std::string* NewString(Arena* arena, Args&&... args) {
  397|  17.9k|    if (arena == nullptr) {
  ------------------
  |  Branch (397:9): [True: 17.9k, False: 0]
  ------------------
  398|  17.9k|      auto* s = new std::string(std::forward<Args>(args)...);
  399|  17.9k|      return tagged_ptr_.SetAllocated(s);
  400|  17.9k|    } else {
  401|      0|      auto* s = Arena::Create<std::string>(arena, std::forward<Args>(args)...);
  402|      0|      return tagged_ptr_.SetMutableArena(s);
  403|      0|    }
  404|  17.9k|  }
_ZN6google8protobuf8internal14ArenaStringPtr9NewStringIJEEEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPNS0_5ArenaEDpOT_:
  396|  1.12k|  inline std::string* NewString(Arena* arena, Args&&... args) {
  397|  1.12k|    if (arena == nullptr) {
  ------------------
  |  Branch (397:9): [True: 612, False: 515]
  ------------------
  398|    612|      auto* s = new std::string(std::forward<Args>(args)...);
  399|    612|      return tagged_ptr_.SetAllocated(s);
  400|    612|    } else {
  401|    515|      auto* s = Arena::Create<std::string>(arena, std::forward<Args>(args)...);
  402|    515|      return tagged_ptr_.SetMutableArena(s);
  403|    515|    }
  404|  1.12k|  }

_ZN6google8protobuf8internal20ThreadSafeArenaStats19RecordAllocateStatsEPS2_mmm:
  169|     26|                                  size_t /*allocated*/, size_t /*wasted*/) {}
_ZN6google8protobuf8internal26ThreadSafeArenaStatsHandleC2EPNS1_20ThreadSafeArenaStatsE:
  178|      5|  explicit ThreadSafeArenaStatsHandle(ThreadSafeArenaStats*) {}
_ZN6google8protobuf8internal26ThreadSafeArenaStatsHandle12MutableStatsEv:
  182|     26|  ThreadSafeArenaStats* MutableStats() { return nullptr; }
_ZN6google8protobuf8internal6SampleEv:
  198|      5|inline ThreadSafeArenaStatsHandle Sample() {
  199|      5|  return ThreadSafeArenaStatsHandle(nullptr);
  200|      5|}

_ZN2pb11CppFeaturesD2Ev:
  187|    432|CppFeatures::~CppFeatures() {
  188|       |  // @@protoc_insertion_point(destructor:pb.CppFeatures)
  189|    432|  SharedDtor(*this);
  190|    432|}
_ZNK2pb11CppFeatures12GetClassDataEv:
  228|  1.99k|const ::google::protobuf::internal::ClassData* CppFeatures::GetClassData() const {
  229|  1.99k|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
  230|  1.99k|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
  231|  1.99k|  return _class_data_.base();
  232|  1.99k|}
_ZNK2pb11CppFeatures18_InternalSerializeEPhPN6google8protobuf2io19EpsCopyOutputStreamE:
  305|    210|            ::google::protobuf::io::EpsCopyOutputStream* stream) const {
  306|    210|          const CppFeatures& this_ = *this;
  307|    210|#endif  // PROTOBUF_CUSTOM_VTABLE
  308|       |          // @@protoc_insertion_point(serialize_to_array_start:pb.CppFeatures)
  309|    210|          ::uint32_t cached_has_bits = 0;
  310|    210|          (void)cached_has_bits;
  311|       |
  312|    210|          cached_has_bits = this_._impl_._has_bits_[0];
  313|       |          // optional bool legacy_closed_enum = 1 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
  314|    210|          if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (314:15): [True: 210, False: 0]
  ------------------
  315|    210|            target = stream->EnsureSpace(target);
  316|    210|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
  317|    210|                1, this_._internal_legacy_closed_enum(), target);
  318|    210|          }
  319|       |
  320|       |          // optional .pb.CppFeatures.StringType string_type = 2 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
  321|    210|          if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (321:15): [True: 210, False: 0]
  ------------------
  322|    210|            target = stream->EnsureSpace(target);
  323|    210|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
  324|    210|                2, this_._internal_string_type(), target);
  325|    210|          }
  326|       |
  327|       |          // optional bool enum_name_uses_string_view = 3 [retention = RETENTION_SOURCE, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {
  328|    210|          if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (328:15): [True: 210, False: 0]
  ------------------
  329|    210|            target = stream->EnsureSpace(target);
  330|    210|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
  331|    210|                3, this_._internal_enum_name_uses_string_view(), target);
  332|    210|          }
  333|       |
  334|    210|          if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|    210|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 210]
  |  |  |  Branch (365:54): [Folded, False: 210]
  |  |  |  Branch (365:63): [True: 0, False: 210]
  |  |  ------------------
  ------------------
  335|      0|            target =
  336|      0|                ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
  337|      0|                    this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
  338|      0|          }
  339|       |          // @@protoc_insertion_point(serialize_to_array_end:pb.CppFeatures)
  340|    210|          return target;
  341|    210|        }
_ZNK2pb11CppFeatures12ByteSizeLongEv:
  347|    416|        ::size_t CppFeatures::ByteSizeLong() const {
  348|    416|          const CppFeatures& this_ = *this;
  349|    416|#endif  // PROTOBUF_CUSTOM_VTABLE
  350|       |          // @@protoc_insertion_point(message_byte_size_start:pb.CppFeatures)
  351|    416|          ::size_t total_size = 0;
  352|       |
  353|    416|          ::uint32_t cached_has_bits = 0;
  354|       |          // Prevent compiler warnings about cached_has_bits being unused
  355|    416|          (void)cached_has_bits;
  356|       |
  357|    416|          ::_pbi::Prefetch5LinesFrom7Lines(&this_);
  358|    416|          cached_has_bits = this_._impl_._has_bits_[0];
  359|    416|          if (cached_has_bits & 0x00000007u) {
  ------------------
  |  Branch (359:15): [True: 210, False: 206]
  ------------------
  360|       |            // optional .pb.CppFeatures.StringType string_type = 2 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
  361|    210|            if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (361:17): [True: 210, False: 0]
  ------------------
  362|    210|              total_size += 1 +
  363|    210|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_string_type());
  364|    210|            }
  365|       |            // optional bool legacy_closed_enum = 1 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
  366|    210|            if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (366:17): [True: 210, False: 0]
  ------------------
  367|    210|              total_size += 2;
  368|    210|            }
  369|       |            // optional bool enum_name_uses_string_view = 3 [retention = RETENTION_SOURCE, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {
  370|    210|            if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (370:17): [True: 210, False: 0]
  ------------------
  371|    210|              total_size += 2;
  372|    210|            }
  373|    210|          }
  374|    416|          return this_.MaybeComputeUnknownFieldsSize(total_size,
  375|    416|                                                     &this_._impl_._cached_size_);
  376|    416|        }
_ZN2pb11CppFeatures9MergeImplERN6google8protobuf11MessageLiteERKS3_:
  378|    662|void CppFeatures::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
  379|    662|  auto* const _this = static_cast<CppFeatures*>(&to_msg);
  380|    662|  auto& from = static_cast<const CppFeatures&>(from_msg);
  381|       |  // @@protoc_insertion_point(class_specific_merge_from_start:pb.CppFeatures)
  382|    662|  ABSL_DCHECK_NE(&from, _this);
  ------------------
  |  |   76|    662|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|    662|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    662|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 662]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    662|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  383|    662|  ::uint32_t cached_has_bits = 0;
  384|    662|  (void) cached_has_bits;
  385|       |
  386|    662|  cached_has_bits = from._impl_._has_bits_[0];
  387|    662|  if (cached_has_bits & 0x00000007u) {
  ------------------
  |  Branch (387:7): [True: 440, False: 222]
  ------------------
  388|    440|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (388:9): [True: 436, False: 4]
  ------------------
  389|    436|      _this->_impl_.string_type_ = from._impl_.string_type_;
  390|    436|    }
  391|    440|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (391:9): [True: 436, False: 4]
  ------------------
  392|    436|      _this->_impl_.legacy_closed_enum_ = from._impl_.legacy_closed_enum_;
  393|    436|    }
  394|    440|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (394:9): [True: 436, False: 4]
  ------------------
  395|    436|      _this->_impl_.enum_name_uses_string_view_ = from._impl_.enum_name_uses_string_view_;
  396|    436|    }
  397|    440|  }
  398|    662|  _this->_impl_._has_bits_[0] |= cached_has_bits;
  399|    662|  _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
  400|    662|}
_ZNK2pb11CppFeatures11GetMetadataEv:
  422|      3|::google::protobuf::Metadata CppFeatures::GetMetadata() const {
  423|      3|  return ::google::protobuf::Message::GetMetadataImpl(GetClassData()->full());
  424|      3|}
_ZN2pb11CppFeatures10SharedDtorERN6google8protobuf11MessageLiteE:
  191|    432|inline void CppFeatures::SharedDtor(MessageLite& self) {
  192|    432|  CppFeatures& this_ = static_cast<CppFeatures&>(self);
  193|    432|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
  194|    432|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|    432|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    432|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    864|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    432|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    864|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    864|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 432, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    432|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 432]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    432|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 432, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    864|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    864|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  195|    432|  this_._impl_.~Impl_();
  196|    432|}

_ZN2pb11CppFeatures10descriptorEv:
  147|      3|  static const ::google::protobuf::Descriptor* descriptor() {
  148|      3|    return GetDescriptor();
  149|      3|  }
_ZN2pb11CppFeatures13GetDescriptorEv:
  150|      3|  static const ::google::protobuf::Descriptor* GetDescriptor() {
  151|      3|    return default_instance().GetMetadata().descriptor;
  152|      3|  }
_ZNK2pb11CppFeatures15has_string_typeEv:
  392|    206|inline bool CppFeatures::has_string_type() const {
  393|    206|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
  394|    206|  return value;
  395|    206|}
_ZNK2pb11CppFeatures28_internal_legacy_closed_enumEv:
  382|    210|inline bool CppFeatures::_internal_legacy_closed_enum() const {
  383|    210|  ::google::protobuf::internal::TSanRead(&_impl_);
  384|    210|  return _impl_.legacy_closed_enum_;
  385|    210|}
_ZNK2pb11CppFeatures11string_typeEv:
  401|  17.9k|inline ::pb::CppFeatures_StringType CppFeatures::string_type() const {
  402|       |  // @@protoc_insertion_point(field_get:pb.CppFeatures.string_type)
  403|  17.9k|  return _internal_string_type();
  404|  17.9k|}
_ZNK2pb11CppFeatures21_internal_string_typeEv:
  410|  18.3k|inline ::pb::CppFeatures_StringType CppFeatures::_internal_string_type() const {
  411|  18.3k|  ::google::protobuf::internal::TSanRead(&_impl_);
  412|  18.3k|  return static_cast<::pb::CppFeatures_StringType>(_impl_.string_type_);
  413|  18.3k|}
_ZN2pb11CppFeatures16default_instanceEv:
  156|    210|  static const CppFeatures& default_instance() {
  157|    210|    return *internal_default_instance();
  158|    210|  }
_ZN2pb11CppFeatures25internal_default_instanceEv:
  159|    210|  static inline const CppFeatures* internal_default_instance() {
  160|    210|    return reinterpret_cast<const CppFeatures*>(
  161|    210|        &_CppFeatures_default_instance_);
  162|    210|  }
_ZNK2pb11CppFeatures36_internal_enum_name_uses_string_viewEv:
  439|    210|inline bool CppFeatures::_internal_enum_name_uses_string_view() const {
  440|    210|  ::google::protobuf::internal::TSanRead(&_impl_);
  441|    210|  return _impl_.enum_name_uses_string_view_;
  442|    210|}

_ZN6google8protobuf14DescriptorPool6TablesC2Ev:
 1609|      2|DescriptorPool::Tables::Tables() {
 1610|      2|  well_known_types_.insert({
 1611|      2|      {"google.protobuf.DoubleValue", Descriptor::WELLKNOWNTYPE_DOUBLEVALUE},
 1612|      2|      {"google.protobuf.FloatValue", Descriptor::WELLKNOWNTYPE_FLOATVALUE},
 1613|      2|      {"google.protobuf.Int64Value", Descriptor::WELLKNOWNTYPE_INT64VALUE},
 1614|      2|      {"google.protobuf.UInt64Value", Descriptor::WELLKNOWNTYPE_UINT64VALUE},
 1615|      2|      {"google.protobuf.Int32Value", Descriptor::WELLKNOWNTYPE_INT32VALUE},
 1616|      2|      {"google.protobuf.UInt32Value", Descriptor::WELLKNOWNTYPE_UINT32VALUE},
 1617|      2|      {"google.protobuf.StringValue", Descriptor::WELLKNOWNTYPE_STRINGVALUE},
 1618|      2|      {"google.protobuf.BytesValue", Descriptor::WELLKNOWNTYPE_BYTESVALUE},
 1619|      2|      {"google.protobuf.BoolValue", Descriptor::WELLKNOWNTYPE_BOOLVALUE},
 1620|      2|      {"google.protobuf.Any", Descriptor::WELLKNOWNTYPE_ANY},
 1621|      2|      {"google.protobuf.FieldMask", Descriptor::WELLKNOWNTYPE_FIELDMASK},
 1622|      2|      {"google.protobuf.Duration", Descriptor::WELLKNOWNTYPE_DURATION},
 1623|      2|      {"google.protobuf.Timestamp", Descriptor::WELLKNOWNTYPE_TIMESTAMP},
 1624|      2|      {"google.protobuf.Value", Descriptor::WELLKNOWNTYPE_VALUE},
 1625|      2|      {"google.protobuf.ListValue", Descriptor::WELLKNOWNTYPE_LISTVALUE},
 1626|      2|      {"google.protobuf.Struct", Descriptor::WELLKNOWNTYPE_STRUCT},
 1627|      2|  });
 1628|      2|}
_ZN6google8protobuf20FileDescriptorTablesC2Ev:
 1632|      4|FileDescriptorTables::FileDescriptorTables() = default;
_ZN6google8protobuf14DescriptorPool6Tables13AddCheckpointEv:
 1645|      4|void DescriptorPool::Tables::AddCheckpoint() {
 1646|      4|  checkpoints_.emplace_back(this);
 1647|      4|}
_ZN6google8protobuf14DescriptorPool6Tables19ClearLastCheckpointEv:
 1649|      4|void DescriptorPool::Tables::ClearLastCheckpoint() {
 1650|      4|  ABSL_DCHECK(!checkpoints_.empty());
  ------------------
  |  |   47|      4|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1651|      4|  checkpoints_.pop_back();
 1652|      4|  if (checkpoints_.empty()) {
  ------------------
  |  Branch (1652:7): [True: 4, False: 0]
  ------------------
 1653|       |    // All checkpoints have been cleared: we can now commit all of the pending
 1654|       |    // data.
 1655|      4|    symbols_after_checkpoint_.clear();
 1656|      4|    files_after_checkpoint_.clear();
 1657|      4|    extensions_after_checkpoint_.clear();
 1658|      4|  }
 1659|      4|}
_ZN6google8protobuf14DescriptorPool6Tables9AddSymbolENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEENS0_6SymbolE:
 1929|    362|                                       Symbol symbol) {
 1930|    362|  ABSL_DCHECK_EQ(full_name, symbol.full_name());
  ------------------
  |  |   74|    362|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    362|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    362|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 362]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    362|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1931|    362|  if (symbols_by_name_.insert(symbol).second) {
  ------------------
  |  Branch (1931:7): [True: 362, False: 0]
  ------------------
 1932|    362|    symbols_after_checkpoint_.push_back(symbol);
 1933|    362|    return true;
 1934|    362|  } else {
 1935|      0|    return false;
 1936|      0|  }
 1937|    362|}
_ZN6google8protobuf20FileDescriptorTables19AddAliasUnderParentEPKvNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS0_6SymbolE:
 1941|    443|                                               Symbol symbol) {
 1942|    443|  ABSL_DCHECK_EQ(name, symbol.parent_name_key().second);
  ------------------
  |  |   74|    443|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    443|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    443|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 443]
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 443]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    443|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1943|    443|  ABSL_DCHECK_EQ(parent, symbol.parent_name_key().first);
  ------------------
  |  |   74|    443|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    443|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    443|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 443]
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 443]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    443|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1944|    443|  return symbols_by_parent_.insert(symbol).second;
 1945|    443|}
_ZN6google8protobuf14DescriptorPool6Tables7AddFileEPKNS0_14FileDescriptorE:
 1947|      4|bool DescriptorPool::Tables::AddFile(const FileDescriptor* file) {
 1948|      4|  if (files_by_name_.insert(file).second) {
  ------------------
  |  Branch (1948:7): [True: 4, False: 0]
  ------------------
 1949|      4|    files_after_checkpoint_.push_back(file);
 1950|      4|    return true;
 1951|      4|  } else {
 1952|      0|    return false;
 1953|      0|  }
 1954|      4|}
_ZN6google8protobuf20FileDescriptorTables14FinalizeTablesEv:
 1956|      4|void FileDescriptorTables::FinalizeTables() {}
_ZN6google8protobuf20FileDescriptorTables16AddFieldByNumberEPNS0_15FieldDescriptorE:
 1958|    206|bool FileDescriptorTables::AddFieldByNumber(FieldDescriptor* field) {
 1959|       |  // Skip fields that are at the start of the sequence.
 1960|    206|  if (field->containing_type() != nullptr && field->number() >= 1 &&
  ------------------
  |  Branch (1960:7): [True: 206, False: 0]
  |  Branch (1960:46): [True: 206, False: 0]
  ------------------
 1961|    206|      field->number() <= field->containing_type()->sequential_field_limit_) {
  ------------------
  |  Branch (1961:7): [True: 106, False: 100]
  ------------------
 1962|    106|    if (field->is_extension()) {
  ------------------
  |  Branch (1962:9): [True: 0, False: 106]
  ------------------
 1963|       |      // Conflicts with the field that already exists in the sequential range.
 1964|      0|      return false;
 1965|      0|    }
 1966|       |    // Only return true if the field at that index matches. Otherwise it
 1967|       |    // conflicts with the existing field in the sequential range.
 1968|    106|    return field->containing_type()->field(field->number() - 1) == field;
 1969|    106|  }
 1970|       |
 1971|    100|  return fields_by_number_.insert(field).second;
 1972|    206|}
_ZN6google8protobuf20FileDescriptorTables20AddEnumValueByNumberEPNS0_19EnumValueDescriptorE:
 1974|     86|bool FileDescriptorTables::AddEnumValueByNumber(EnumValueDescriptor* value) {
 1975|       |  // Skip values that are at the start of the sequence.
 1976|     86|  const int base = value->type()->value(0)->number();
 1977|     86|  if (base <= value->number() &&
  ------------------
  |  Branch (1977:7): [True: 86, False: 0]
  ------------------
 1978|     86|      value->number() <=
  ------------------
  |  Branch (1978:7): [True: 71, False: 15]
  ------------------
 1979|     86|          static_cast<int64_t>(base) + value->type()->sequential_value_limit_)
 1980|     71|    return true;
 1981|     15|  return enum_values_by_number_.insert(value).second;
 1982|     86|}
_ZN6google8protobuf14DescriptorPool6Tables12AddExtensionEPKNS0_15FieldDescriptorE:
 1984|      1|bool DescriptorPool::Tables::AddExtension(const FieldDescriptor* field) {
 1985|      1|  auto it_inserted =
 1986|      1|      extensions_.insert({{field->containing_type(), field->number()}, field});
 1987|      1|  if (it_inserted.second) {
  ------------------
  |  Branch (1987:7): [True: 1, False: 0]
  ------------------
 1988|      1|    extensions_after_checkpoint_.push_back(it_inserted.first->first);
 1989|      1|    return true;
 1990|      1|  } else {
 1991|      0|    return false;
 1992|      0|  }
 1993|      1|}
_ZN6google8protobuf14DescriptorPool6Tables16InternFeatureSetEONS0_10FeatureSetE:
 1996|    210|    FeatureSet&& features) {
 1997|       |  // Use the serialized feature set as the cache key.  If multiple equivalent
 1998|       |  // feature sets serialize to different strings, that just bloats the cache a
 1999|       |  // little.
 2000|    210|  auto& result = feature_set_cache_[features.SerializeAsString()];
 2001|    210|  if (result == nullptr) {
  ------------------
  |  Branch (2001:7): [True: 4, False: 206]
  ------------------
 2002|      4|    result = absl::make_unique<FeatureSet>(std::move(features));
 2003|      4|  }
 2004|    210|  return result.get();
 2005|    210|}
_ZN6google8protobuf14DescriptorPool6Tables13AllocateBytesEi:
 2016|      2|void* DescriptorPool::Tables::AllocateBytes(int size) {
 2017|      2|  if (size == 0) return nullptr;
  ------------------
  |  Branch (2017:7): [True: 0, False: 2]
  ------------------
 2018|      2|  void* p = ::operator new(size + RoundUpTo<8>(sizeof(int)));
 2019|      2|  int* sizep = static_cast<int*>(p);
 2020|      2|  misc_allocs_.emplace_back(sizep);
 2021|      2|  *sizep = size;
 2022|      2|  return static_cast<char*>(p) + RoundUpTo<8>(sizeof(int));
 2023|      2|}
_ZN6google8protobuf14DescriptorPoolC2EPNS0_18DescriptorDatabaseEPNS1_14ErrorCollectorE:
 2113|      2|    : mutex_(new absl::Mutex),
 2114|      2|      fallback_database_(fallback_database),
 2115|      2|      default_error_collector_(error_collector),
 2116|      2|      underlay_(nullptr),
 2117|      2|      tables_(new Tables),
 2118|      2|      enforce_dependencies_(true),
 2119|      2|      lazily_build_dependencies_(false),
 2120|      2|      allow_unknown_(false),
 2121|      2|      enforce_weak_(false),
 2122|      2|      enforce_extension_declarations_(false),
 2123|      2|      disallow_enforce_utf8_(false),
 2124|      2|      deprecated_legacy_json_field_conflicts_(false) {}
_ZN6google8protobuf14DescriptorPool31InternalDontEnforceDependenciesEv:
 2147|      2|void DescriptorPool::InternalDontEnforceDependencies() {
 2148|      2|  enforce_dependencies_ = false;
 2149|      2|}
_ZN6google8protobuf14DescriptorPool23internal_generated_poolEv:
 2204|     63|DescriptorPool* DescriptorPool::internal_generated_pool() {
 2205|     63|  static DescriptorPool* generated_pool =
 2206|     63|      internal::OnShutdownDelete(NewGeneratedPool());
 2207|     63|  return generated_pool;
 2208|     63|}
_ZN6google8protobuf14DescriptorPool14generated_poolEv:
 2210|      3|const DescriptorPool* DescriptorPool::generated_pool() {
 2211|      3|  const DescriptorPool* pool = internal_generated_pool();
 2212|       |  // Ensure that descriptor.proto and cpp_features.proto get registered in the
 2213|       |  // generated pool. They're special cases because they're included in the full
 2214|       |  // runtime. We have to avoid registering it pre-main, because we need to
 2215|       |  // ensure that the linker --gc-sections step can strip out the full runtime if
 2216|       |  // it is unused.
 2217|      3|  DescriptorProto::descriptor();
 2218|      3|  pb::CppFeatures::descriptor();
 2219|      3|  return pool;
 2220|      3|}
_ZN6google8protobuf14DescriptorPool24InternalAddGeneratedFileEPKvi:
 2224|      6|    const void* encoded_file_descriptor, int size) {
 2225|       |  // So, this function is called in the process of initializing the
 2226|       |  // descriptors for generated proto classes.  Each generated .pb.cc file
 2227|       |  // has an internal procedure called AddDescriptors() which is called at
 2228|       |  // process startup, and that function calls this one in order to register
 2229|       |  // the raw bytes of the FileDescriptorProto representing the file.
 2230|       |  //
 2231|       |  // We do not actually construct the descriptor objects right away.  We just
 2232|       |  // hang on to the bytes until they are actually needed.  We actually construct
 2233|       |  // the descriptor the first time one of the following things happens:
 2234|       |  // * Someone calls a method like descriptor(), GetDescriptor(), or
 2235|       |  //   GetReflection() on the generated types, which requires returning the
 2236|       |  //   descriptor or an object based on it.
 2237|       |  // * Someone looks up the descriptor in DescriptorPool::generated_pool().
 2238|       |  //
 2239|       |  // Once one of these happens, the DescriptorPool actually parses the
 2240|       |  // FileDescriptorProto and generates a FileDescriptor (and all its children)
 2241|       |  // based on it.
 2242|       |  //
 2243|       |  // Note that FileDescriptorProto is itself a generated protocol message.
 2244|       |  // Therefore, when we parse one, we have to be very careful to avoid using
 2245|       |  // any descriptor-based operations, since this might cause infinite recursion
 2246|       |  // or deadlock.
 2247|      6|  absl::MutexLockMaybe lock(internal_generated_pool()->mutex_);
 2248|      6|  ABSL_CHECK(GeneratedDatabase()->Add(encoded_file_descriptor, size));
  ------------------
  |  |   41|      6|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     12|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      6|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     12|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     12|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      6|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 6]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     12|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 6]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 6]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     12|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     12|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2249|      6|}
_ZNK6google8protobuf14DescriptorPool14FindFileByNameENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
 2259|      5|    absl::string_view name) const {
 2260|      5|  DeferredValidation deferred_validation(this);
 2261|      5|  const FileDescriptor* result = nullptr;
 2262|      5|  {
 2263|      5|    absl::MutexLockMaybe lock(mutex_);
 2264|      5|    if (fallback_database_ != nullptr) {
  ------------------
  |  Branch (2264:9): [True: 5, False: 0]
  ------------------
 2265|      5|      tables_->known_bad_symbols_.clear();
 2266|      5|      tables_->known_bad_files_.clear();
 2267|      5|    }
 2268|      5|    result = tables_->FindFile(name);
 2269|      5|    if (result != nullptr) return result;
  ------------------
  |  Branch (2269:9): [True: 1, False: 4]
  ------------------
 2270|      4|    if (underlay_ != nullptr) {
  ------------------
  |  Branch (2270:9): [True: 0, False: 4]
  ------------------
 2271|      0|      result = underlay_->FindFileByName(name);
 2272|      0|      if (result != nullptr) return result;
  ------------------
  |  Branch (2272:11): [True: 0, False: 0]
  ------------------
 2273|      0|    }
 2274|      4|    if (TryFindFileInFallbackDatabase(name, deferred_validation)) {
  ------------------
  |  Branch (2274:9): [True: 4, False: 0]
  ------------------
 2275|      4|      result = tables_->FindFile(name);
 2276|      4|    }
 2277|      4|  }
 2278|      4|  if (!deferred_validation.Validate()) {
  ------------------
  |  Branch (2278:7): [True: 0, False: 4]
  ------------------
 2279|      0|    return nullptr;
 2280|      0|  }
 2281|      4|  return result;
 2282|      4|}
_ZNK6google8protobuf10Descriptor15FindFieldByNameENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
 2521|  63.5k|    absl::string_view name) const {
 2522|  63.5k|  const FieldDescriptor* field =
 2523|  63.5k|      file()->tables_->FindNestedSymbol(this, name).field_descriptor();
 2524|  63.5k|  return field != nullptr && !field->is_extension() ? field : nullptr;
  ------------------
  |  Branch (2524:10): [True: 63.4k, False: 72]
  |  Branch (2524:30): [True: 63.4k, False: 0]
  ------------------
 2525|  63.5k|}
_ZNK6google8protobuf10Descriptor34FindExtensionRangeContainingNumberEi:
 2665|      1|Descriptor::FindExtensionRangeContainingNumber(int number) const {
 2666|       |  // Linear search should be fine because we don't expect a message to have
 2667|       |  // more than a couple extension ranges.
 2668|      1|  for (int i = 0; i < extension_range_count(); i++) {
  ------------------
  |  Branch (2668:19): [True: 1, False: 0]
  ------------------
 2669|      1|    if (number >= extension_range(i)->start_number() &&
  ------------------
  |  Branch (2669:9): [True: 1, False: 0]
  ------------------
 2670|      1|        number < extension_range(i)->end_number()) {
  ------------------
  |  Branch (2670:9): [True: 1, False: 0]
  ------------------
 2671|      1|      return extension_range(i);
 2672|      1|    }
 2673|      1|  }
 2674|      0|  return nullptr;
 2675|      1|}
_ZNK6google8protobuf14DescriptorPool29TryFindFileInFallbackDatabaseENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEERNS1_18DeferredValidationE:
 2703|      4|    absl::string_view name, DeferredValidation& deferred_validation) const {
 2704|      4|  if (fallback_database_ == nullptr) return false;
  ------------------
  |  Branch (2704:7): [True: 0, False: 4]
  ------------------
 2705|       |
 2706|      4|  if (tables_->known_bad_files_.contains(name)) return false;
  ------------------
  |  Branch (2706:7): [True: 0, False: 4]
  ------------------
 2707|       |
 2708|       |  // NOINLINE to reduce the stack cost of the operation in the caller.
 2709|      4|  const auto find_file = [](DescriptorDatabase& database,
 2710|      4|                            absl::string_view filename,
 2711|      4|                            FileDescriptorProto& output) PROTOBUF_NOINLINE {
 2712|      4|    return database.FindFileByName(std::string(filename), &output);
 2713|      4|  };
 2714|       |
 2715|      4|  auto& file_proto = deferred_validation.CreateProto();
 2716|      4|  if (!find_file(*fallback_database_, name, file_proto) ||
  ------------------
  |  Branch (2716:7): [True: 0, False: 4]
  ------------------
 2717|      4|      BuildFileFromDatabase(file_proto, deferred_validation) == nullptr) {
  ------------------
  |  Branch (2717:7): [True: 0, False: 4]
  ------------------
 2718|      0|    tables_->known_bad_files_.emplace(name);
 2719|      0|    return false;
 2720|      0|  }
 2721|      4|  return true;
 2722|      4|}
_ZNK6google8protobuf15FieldDescriptor19is_map_message_typeEv:
 2816|   102k|bool FieldDescriptor::is_map_message_type() const {
 2817|   102k|  return message_type()->options().map_entry();
 2818|   102k|}
_ZNK6google8protobuf15FieldDescriptor11is_requiredEv:
 3945|   182k|bool FieldDescriptor::is_required() const {
 3946|   182k|  return features().field_presence() == FeatureSet::LEGACY_REQUIRED;
 3947|   182k|}
_ZNK6google8protobuf15FieldDescriptor15cpp_string_typeEv:
 3960|  17.9k|FieldDescriptor::CppStringType FieldDescriptor::cpp_string_type() const {
 3961|  17.9k|  ABSL_DCHECK(cpp_type() == FieldDescriptor::CPPTYPE_STRING);
  ------------------
  |  |   47|  17.9k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  17.9k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  35.9k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  17.9k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  35.9k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  35.9k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 17.9k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  17.9k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 17.9k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  17.9k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 17.9k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  35.9k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  35.9k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3962|  17.9k|  switch (features().GetExtension(pb::cpp).string_type()) {
 3963|      0|    case pb::CppFeatures::VIEW:
  ------------------
  |  Branch (3963:5): [True: 0, False: 17.9k]
  ------------------
 3964|      0|      return CppStringType::kView;
 3965|      0|    case pb::CppFeatures::CORD:
  ------------------
  |  Branch (3965:5): [True: 0, False: 17.9k]
  ------------------
 3966|       |      // In open-source, protobuf CORD is only supported for singular bytes
 3967|       |      // fields.
 3968|      0|      if (type() != FieldDescriptor::TYPE_BYTES || is_repeated() ||
  ------------------
  |  Branch (3968:11): [True: 0, False: 0]
  |  Branch (3968:52): [True: 0, False: 0]
  ------------------
 3969|      0|          is_extension()) {
  ------------------
  |  Branch (3969:11): [True: 0, False: 0]
  ------------------
 3970|      0|        return CppStringType::kString;
 3971|      0|      }
 3972|      0|      return CppStringType::kCord;
 3973|  17.9k|    case pb::CppFeatures::STRING:
  ------------------
  |  Branch (3973:5): [True: 17.9k, False: 0]
  ------------------
 3974|  17.9k|      return CppStringType::kString;
 3975|      0|    default:
  ------------------
  |  Branch (3975:5): [True: 0, False: 17.9k]
  ------------------
 3976|       |      // If features haven't been resolved, this is a dynamic build not for C++
 3977|       |      // codegen.  Just use string type.
 3978|      0|      ABSL_DCHECK(!features().GetExtension(pb::cpp).has_string_type());
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3979|      0|      return CppStringType::kString;
 3980|  17.9k|  }
 3981|  17.9k|}
_ZNK6google8protobuf10Descriptor15GetLocationPathEPNSt3__16vectorIiNS2_9allocatorIiEEEE:
 4058|    404|void Descriptor::GetLocationPath(std::vector<int>* output) const {
 4059|    404|  if (containing_type()) {
  ------------------
  |  Branch (4059:7): [True: 47, False: 357]
  ------------------
 4060|     47|    containing_type()->GetLocationPath(output);
 4061|     47|    output->push_back(DescriptorProto::kNestedTypeFieldNumber);
 4062|     47|    output->push_back(index());
 4063|    357|  } else {
 4064|    357|    output->push_back(FileDescriptorProto::kMessageTypeFieldNumber);
 4065|    357|    output->push_back(index());
 4066|    357|  }
 4067|    404|}
_ZNK6google8protobuf15FieldDescriptor15GetLocationPathEPNSt3__16vectorIiNS2_9allocatorIiEEEE:
 4069|    206|void FieldDescriptor::GetLocationPath(std::vector<int>* output) const {
 4070|    206|  if (is_extension()) {
  ------------------
  |  Branch (4070:7): [True: 1, False: 205]
  ------------------
 4071|      1|    if (extension_scope() == nullptr) {
  ------------------
  |  Branch (4071:9): [True: 1, False: 0]
  ------------------
 4072|      1|      output->push_back(FileDescriptorProto::kExtensionFieldNumber);
 4073|      1|      output->push_back(index());
 4074|      1|    } else {
 4075|      0|      extension_scope()->GetLocationPath(output);
 4076|      0|      output->push_back(DescriptorProto::kExtensionFieldNumber);
 4077|      0|      output->push_back(index());
 4078|      0|    }
 4079|    205|  } else {
 4080|    205|    containing_type()->GetLocationPath(output);
 4081|    205|    output->push_back(DescriptorProto::kFieldFieldNumber);
 4082|    205|    output->push_back(index());
 4083|    205|  }
 4084|    206|}
_ZNK6google8protobuf15OneofDescriptor15GetLocationPathEPNSt3__16vectorIiNS2_9allocatorIiEEEE:
 4086|      2|void OneofDescriptor::GetLocationPath(std::vector<int>* output) const {
 4087|      2|  containing_type()->GetLocationPath(output);
 4088|      2|  output->push_back(DescriptorProto::kOneofDeclFieldNumber);
 4089|      2|  output->push_back(index());
 4090|      2|}
_ZNK6google8protobuf10Descriptor14ExtensionRange15GetLocationPathEPNSt3__16vectorIiNS3_9allocatorIiEEEE:
 4093|     14|    std::vector<int>* output) const {
 4094|     14|  containing_type()->GetLocationPath(output);
 4095|     14|  output->push_back(DescriptorProto::kExtensionRangeFieldNumber);
 4096|     14|  output->push_back(index());
 4097|     14|}
_ZNK6google8protobuf14EnumDescriptor15GetLocationPathEPNSt3__16vectorIiNS2_9allocatorIiEEEE:
 4099|    104|void EnumDescriptor::GetLocationPath(std::vector<int>* output) const {
 4100|    104|  if (containing_type()) {
  ------------------
  |  Branch (4100:7): [True: 91, False: 13]
  ------------------
 4101|     91|    containing_type()->GetLocationPath(output);
 4102|     91|    output->push_back(DescriptorProto::kEnumTypeFieldNumber);
 4103|     91|    output->push_back(index());
 4104|     91|  } else {
 4105|     13|    output->push_back(FileDescriptorProto::kEnumTypeFieldNumber);
 4106|     13|    output->push_back(index());
 4107|     13|  }
 4108|    104|}
_ZNK6google8protobuf19EnumValueDescriptor15GetLocationPathEPNSt3__16vectorIiNS2_9allocatorIiEEEE:
 4110|     86|void EnumValueDescriptor::GetLocationPath(std::vector<int>* output) const {
 4111|     86|  type()->GetLocationPath(output);
 4112|     86|  output->push_back(EnumDescriptorProto::kValueFieldNumber);
 4113|     86|  output->push_back(index());
 4114|     86|}
_ZNK6google8protobuf14DescriptorPool21BuildFileFromDatabaseERKNS0_19FileDescriptorProtoERNS1_18DeferredValidationE:
 4740|      4|    DeferredValidation& deferred_validation) const {
 4741|      4|  mutex_->AssertHeld();
 4742|      4|  build_started_ = true;
 4743|      4|  if (tables_->known_bad_files_.contains(proto.name())) {
  ------------------
  |  Branch (4743:7): [True: 0, False: 4]
  ------------------
 4744|      0|    return nullptr;
 4745|      0|  }
 4746|      4|  const FileDescriptor* result;
 4747|      4|  const auto build_file = [&] {
 4748|      4|    result = DescriptorBuilder::New(this, tables_.get(), deferred_validation,
 4749|      4|                                    default_error_collector_)
 4750|      4|                 ->BuildFile(proto);
 4751|      4|  };
 4752|      4|  if (dispatcher_ != nullptr) {
  ------------------
  |  Branch (4752:7): [True: 0, False: 4]
  ------------------
 4753|      0|    (*dispatcher_)(build_file);
 4754|      4|  } else {
 4755|      4|    build_file();
 4756|      4|  }
 4757|      4|  if (result == nullptr) {
  ------------------
  |  Branch (4757:7): [True: 0, False: 4]
  ------------------
 4758|      0|    tables_->known_bad_files_.insert(proto.name());
 4759|      0|  }
 4760|      4|  return result;
 4761|      4|}
_ZN6google8protobuf17DescriptorBuilderC2EPKNS0_14DescriptorPoolEPNS2_6TablesERNS2_18DeferredValidationEPNS2_14ErrorCollectorE:
 4797|      4|    : pool_(pool),
 4798|      4|      tables_(tables),
 4799|      4|      deferred_validation_(deferred_validation),
 4800|      4|      error_collector_(error_collector),
 4801|      4|      had_errors_(false),
 4802|      4|      possible_undeclared_dependency_(nullptr),
 4803|      4|      undefine_resolved_name_("") {
 4804|       |  // Ensure that any lazily loaded static initializers from the generated pool
 4805|       |  // (e.g. from bootstrapped protos) are run before building any descriptors. We
 4806|       |  // have to avoid registering these pre-main, because we need to ensure that
 4807|       |  // the linker --gc-sections step can strip out the full runtime if it is
 4808|       |  // unused.
 4809|      4|  PROTOBUF_UNUSED static std::true_type lazy_register =
  ------------------
  |  |  620|      4|#define PROTOBUF_UNUSED [[maybe_unused]]
  ------------------
 4810|      4|      (internal::ExtensionSet::RegisterMessageExtension(
 4811|      4|           &FeatureSet::default_instance(), pb::cpp.number(),
 4812|      4|           FieldDescriptor::TYPE_MESSAGE, false, false,
 4813|      4|           &pb::CppFeatures::default_instance(),
 4814|      4|           nullptr,
 4815|      4|           internal::LazyAnnotation::kUndefined),
 4816|      4|       std::true_type{});
 4817|      4|}
_ZN6google8protobuf17DescriptorBuilderD2Ev:
 4819|      4|DescriptorBuilder::~DescriptorBuilder() = default;
_ZN6google8protobuf17DescriptorBuilder32FindSymbolNotEnforcingDepsHelperEPKNS0_14DescriptorPoolENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEEb:
 4916|     98|    const DescriptorPool* pool, const absl::string_view name, bool build_it) {
 4917|       |  // If we are looking at an underlay, we must lock its mutex_, since we are
 4918|       |  // accessing the underlay's tables_ directly.
 4919|     98|  absl::MutexLockMaybe lock((pool == pool_) ? nullptr : pool->mutex_);
  ------------------
  |  Branch (4919:29): [True: 98, False: 0]
  ------------------
 4920|       |
 4921|     98|  Symbol result = pool->tables_->FindSymbol(name);
 4922|     98|  if (result.IsNull() && pool->underlay_ != nullptr) {
  ------------------
  |  Branch (4922:7): [True: 0, False: 98]
  |  Branch (4922:26): [True: 0, False: 0]
  ------------------
 4923|       |    // Symbol not found; check the underlay.
 4924|      0|    result = FindSymbolNotEnforcingDepsHelper(pool->underlay_, name);
 4925|      0|  }
 4926|       |
 4927|     98|  if (result.IsNull()) {
  ------------------
  |  Branch (4927:7): [True: 0, False: 98]
  ------------------
 4928|       |    // With lazily_build_dependencies_, a symbol lookup at cross link time is
 4929|       |    // not guaranteed to be successful. In most cases, build_it will be false,
 4930|       |    // which intentionally prevents us from building an import until it's
 4931|       |    // actually needed. In some cases, like registering an extension, we want
 4932|       |    // to build the file containing the symbol, and build_it will be set.
 4933|       |    // Also, build_it will be true when !lazily_build_dependencies_, to provide
 4934|       |    // better error reporting of missing dependencies.
 4935|      0|    if (build_it &&
  ------------------
  |  Branch (4935:9): [True: 0, False: 0]
  ------------------
 4936|      0|        pool->TryFindSymbolInFallbackDatabase(name, deferred_validation_)) {
  ------------------
  |  Branch (4936:9): [True: 0, False: 0]
  ------------------
 4937|      0|      result = pool->tables_->FindSymbol(name);
 4938|      0|    }
 4939|      0|  }
 4940|       |
 4941|     98|  return result;
 4942|     98|}
_ZN6google8protobuf17DescriptorBuilder26FindSymbolNotEnforcingDepsENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEb:
 4945|     98|    const absl::string_view name, bool build_it) {
 4946|     98|  Symbol result = FindSymbolNotEnforcingDepsHelper(pool_, name, build_it);
 4947|       |  // Only find symbols which were defined in this file or one of its
 4948|       |  // dependencies.
 4949|     98|  const FileDescriptor* file = result.GetFile();
 4950|     98|  if ((file == file_ || dependencies_.contains(file)) && !result.IsPackage()) {
  ------------------
  |  Branch (4950:8): [True: 97, False: 1]
  |  Branch (4950:25): [True: 0, False: 1]
  |  Branch (4950:58): [True: 97, False: 0]
  ------------------
 4951|     97|    unused_dependency_.erase(file);
 4952|     97|  }
 4953|     98|  return result;
 4954|     98|}
_ZN6google8protobuf17DescriptorBuilder10FindSymbolENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEb:
 4957|     98|                                     bool build_it) {
 4958|     98|  Symbol result = FindSymbolNotEnforcingDeps(name, build_it);
 4959|       |
 4960|     98|  if (result.IsNull()) return result;
  ------------------
  |  Branch (4960:7): [True: 0, False: 98]
  ------------------
 4961|       |
 4962|     98|  if (!pool_->enforce_dependencies_) {
  ------------------
  |  Branch (4962:7): [True: 98, False: 0]
  ------------------
 4963|       |    // Hack for CompilerUpgrader, and also used for lazily_build_dependencies_
 4964|     98|    return result;
 4965|     98|  }
 4966|       |
 4967|       |  // Only find symbols which were defined in this file or one of its
 4968|       |  // dependencies.
 4969|      0|  const FileDescriptor* file = result.GetFile();
 4970|      0|  if (file == file_ || dependencies_.contains(file)) {
  ------------------
  |  Branch (4970:7): [True: 0, False: 0]
  |  Branch (4970:24): [True: 0, False: 0]
  ------------------
 4971|      0|    return result;
 4972|      0|  }
 4973|       |
 4974|      0|  if (result.IsPackage()) {
  ------------------
  |  Branch (4974:7): [True: 0, False: 0]
  ------------------
 4975|       |    // Arg, this is overcomplicated.  The symbol is a package name.  It could
 4976|       |    // be that the package was defined in multiple files.  result.GetFile()
 4977|       |    // returns the first file we saw that used this package.  We've determined
 4978|       |    // that that file is not a direct dependency of the file we are currently
 4979|       |    // building, but it could be that some other file which *is* a direct
 4980|       |    // dependency also defines the same package.  We can't really rule out this
 4981|       |    // symbol unless none of the dependencies define it.
 4982|      0|    if (IsInPackage(file_, name)) return result;
  ------------------
  |  Branch (4982:9): [True: 0, False: 0]
  ------------------
 4983|      0|    for (const auto* dep : dependencies_) {
  ------------------
  |  Branch (4983:26): [True: 0, False: 0]
  ------------------
 4984|       |      // Note:  A dependency may be nullptr if it was not found or had errors.
 4985|      0|      if (dep != nullptr && IsInPackage(dep, name)) return result;
  ------------------
  |  Branch (4985:11): [True: 0, False: 0]
  |  Branch (4985:29): [True: 0, False: 0]
  ------------------
 4986|      0|    }
 4987|      0|  }
 4988|       |
 4989|      0|  possible_undeclared_dependency_ = file;
 4990|      0|  possible_undeclared_dependency_name_ = std::string(name);
 4991|      0|  return Symbol();
 4992|      0|}
_ZN6google8protobuf17DescriptorBuilder25LookupSymbolNoPlaceholderENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEES6_NS1_11ResolveModeEb:
 4996|     98|    ResolveMode resolve_mode, bool build_it) {
 4997|     98|  possible_undeclared_dependency_ = nullptr;
 4998|     98|  undefine_resolved_name_.clear();
 4999|       |
 5000|     98|  if (!name.empty() && name[0] == '.') {
  ------------------
  |  Branch (5000:7): [True: 98, False: 0]
  |  Branch (5000:24): [True: 93, False: 5]
  ------------------
 5001|       |    // Fully-qualified name.
 5002|     93|    return FindSymbol(name.substr(1), build_it);
 5003|     93|  }
 5004|       |
 5005|       |  // If name is something like "Foo.Bar.baz", and symbols named "Foo" are
 5006|       |  // defined in multiple parent scopes, we only want to find "Bar.baz" in the
 5007|       |  // innermost one.  E.g., the following should produce an error:
 5008|       |  //   message Bar { message Baz {} }
 5009|       |  //   message Foo {
 5010|       |  //     message Bar {
 5011|       |  //     }
 5012|       |  //     optional Bar.Baz baz = 1;
 5013|       |  //   }
 5014|       |  // So, we look for just "Foo" first, then look for "Bar.baz" within it if
 5015|       |  // found.
 5016|      5|  std::string::size_type name_dot_pos = name.find_first_of('.');
 5017|      5|  absl::string_view first_part_of_name;
 5018|      5|  if (name_dot_pos == std::string::npos) {
  ------------------
  |  Branch (5018:7): [True: 5, False: 0]
  ------------------
 5019|      5|    first_part_of_name = name;
 5020|      5|  } else {
 5021|      0|    first_part_of_name = name.substr(0, name_dot_pos);
 5022|      0|  }
 5023|       |
 5024|      5|  std::string scope_to_try(relative_to);
 5025|       |
 5026|      5|  while (true) {
  ------------------
  |  Branch (5026:10): [True: 5, Folded]
  ------------------
 5027|       |    // Chop off the last component of the scope.
 5028|      5|    std::string::size_type dot_pos = scope_to_try.find_last_of('.');
 5029|      5|    if (dot_pos == std::string::npos) {
  ------------------
  |  Branch (5029:9): [True: 0, False: 5]
  ------------------
 5030|      0|      return FindSymbol(name, build_it);
 5031|      5|    } else {
 5032|      5|      scope_to_try.erase(dot_pos);
 5033|      5|    }
 5034|       |
 5035|       |    // Append ".first_part_of_name" and try to find.
 5036|      5|    std::string::size_type old_size = scope_to_try.size();
 5037|      5|    absl::StrAppend(&scope_to_try, ".", first_part_of_name);
 5038|      5|    Symbol result = FindSymbol(scope_to_try, build_it);
 5039|      5|    if (!result.IsNull()) {
  ------------------
  |  Branch (5039:9): [True: 5, False: 0]
  ------------------
 5040|      5|      if (first_part_of_name.size() < name.size()) {
  ------------------
  |  Branch (5040:11): [True: 0, False: 5]
  ------------------
 5041|       |        // name is a compound symbol, of which we only found the first part.
 5042|       |        // Now try to look up the rest of it.
 5043|      0|        if (result.IsAggregate()) {
  ------------------
  |  Branch (5043:13): [True: 0, False: 0]
  ------------------
 5044|      0|          absl::StrAppend(&scope_to_try,
 5045|      0|                          name.substr(first_part_of_name.size()));
 5046|      0|          result = FindSymbol(scope_to_try, build_it);
 5047|      0|          if (result.IsNull()) {
  ------------------
  |  Branch (5047:15): [True: 0, False: 0]
  ------------------
 5048|      0|            undefine_resolved_name_ = scope_to_try;
 5049|      0|          }
 5050|      0|          return result;
 5051|      0|        } else {
 5052|       |          // We found a symbol but it's not an aggregate.  Continue the loop.
 5053|      0|        }
 5054|      5|      } else {
 5055|      5|        if (resolve_mode == LOOKUP_TYPES && !result.IsType()) {
  ------------------
  |  Branch (5055:13): [True: 0, False: 5]
  |  Branch (5055:45): [True: 0, False: 0]
  ------------------
 5056|       |          // We found a symbol but it's not a type.  Continue the loop.
 5057|      5|        } else {
 5058|      5|          return result;
 5059|      5|        }
 5060|      5|      }
 5061|      5|    }
 5062|       |
 5063|       |    // Not found.  Remove the name so we can try again.
 5064|      0|    scope_to_try.erase(old_size);
 5065|      0|  }
 5066|      5|}
_ZN6google8protobuf17DescriptorBuilder12LookupSymbolENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEES6_NS0_14DescriptorPool15PlaceholderTypeENS1_11ResolveModeEb:
 5071|     93|    bool build_it) {
 5072|     93|  Symbol result =
 5073|     93|      LookupSymbolNoPlaceholder(name, relative_to, resolve_mode, build_it);
 5074|     93|  if (result.IsNull() && pool_->allow_unknown_) {
  ------------------
  |  Branch (5074:7): [True: 0, False: 93]
  |  Branch (5074:26): [True: 0, False: 0]
  ------------------
 5075|       |    // Not found, but AllowUnknownDependencies() is enabled.  Return a
 5076|       |    // placeholder instead.
 5077|      0|    result = pool_->NewPlaceholderWithMutexHeld(name, placeholder_type);
 5078|      0|  }
 5079|     93|  return result;
 5080|     93|}
_ZN6google8protobuf17DescriptorBuilder9AddSymbolENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPKvS6_RKNS0_7MessageENS0_6SymbolE:
 5269|    357|                                  const Message& proto, Symbol symbol) {
 5270|       |  // If the caller passed nullptr for the parent, the symbol is at file scope.
 5271|       |  // Use its file as the parent instead.
 5272|    357|  if (parent == nullptr) parent = file_;
  ------------------
  |  Branch (5272:7): [True: 49, False: 308]
  ------------------
 5273|       |
 5274|    357|  if (absl::StrContains(full_name, '\0')) {
  ------------------
  |  Branch (5274:7): [True: 0, False: 357]
  ------------------
 5275|      0|    AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5276|      0|      return absl::StrCat("\"", full_name, "\" contains null character.");
 5277|      0|    });
 5278|      0|    return false;
 5279|      0|  }
 5280|    357|  if (tables_->AddSymbol(full_name, symbol)) {
  ------------------
  |  Branch (5280:7): [True: 357, False: 0]
  ------------------
 5281|    357|    if (!file_tables_->AddAliasUnderParent(parent, name, symbol)) {
  ------------------
  |  Branch (5281:9): [True: 0, False: 357]
  ------------------
 5282|       |      // This is only possible if there was already an error adding something of
 5283|       |      // the same name.
 5284|      0|      if (!had_errors_) {
  ------------------
  |  Branch (5284:11): [True: 0, False: 0]
  ------------------
 5285|      0|        ABSL_DLOG(FATAL) << "\"" << full_name
  ------------------
  |  |   40|      0|#define ABSL_DLOG(severity) ABSL_LOG_INTERNAL_DLOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   41|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, false) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   42|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5286|      0|                         << "\" not previously defined in "
 5287|      0|                            "symbols_by_name_, but was defined in "
 5288|      0|                            "symbols_by_parent_; this shouldn't be possible.";
 5289|      0|      }
 5290|      0|      return false;
 5291|      0|    }
 5292|    357|    return true;
 5293|    357|  } else {
 5294|      0|    const FileDescriptor* other_file = tables_->FindSymbol(full_name).GetFile();
 5295|      0|    if (other_file == file_) {
  ------------------
  |  Branch (5295:9): [True: 0, False: 0]
  ------------------
 5296|      0|      std::string::size_type dot_pos = full_name.find_last_of('.');
 5297|      0|      if (dot_pos == std::string::npos) {
  ------------------
  |  Branch (5297:11): [True: 0, False: 0]
  ------------------
 5298|      0|        AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5299|      0|          return absl::StrCat("\"", full_name, "\" is already defined.");
 5300|      0|        });
 5301|      0|      } else {
 5302|      0|        AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5303|      0|          return absl::StrCat("\"", full_name.substr(dot_pos + 1),
 5304|      0|                              "\" is already defined in \"",
 5305|      0|                              full_name.substr(0, dot_pos), "\".");
 5306|      0|        });
 5307|      0|      }
 5308|      0|    } else {
 5309|       |      // Symbol seems to have been defined in a different file.
 5310|      0|      AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5311|      0|        return absl::StrCat(
 5312|      0|            "\"", full_name, "\" is already defined in file \"",
 5313|      0|            (other_file == nullptr ? "null" : other_file->name()), "\".");
 5314|      0|      });
 5315|      0|    }
 5316|      0|    return false;
 5317|      0|  }
 5318|    357|}
_ZN6google8protobuf17DescriptorBuilder10AddPackageENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEERKNS0_7MessageEPNS0_14FileDescriptorEb:
 5322|      6|                                   bool toplevel) {
 5323|      6|  if (absl::StrContains(name, '\0')) {
  ------------------
  |  Branch (5323:7): [True: 0, False: 6]
  ------------------
 5324|      0|    AddError(name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5325|      0|      return absl::StrCat("\"", name, "\" contains null character.");
 5326|      0|    });
 5327|      0|    return;
 5328|      0|  }
 5329|       |
 5330|      6|  Symbol existing_symbol = tables_->FindSymbol(name);
 5331|       |  // It's OK to redefine a package.
 5332|      6|  if (existing_symbol.IsNull()) {
  ------------------
  |  Branch (5332:7): [True: 5, False: 1]
  ------------------
 5333|      5|    if (toplevel) {
  ------------------
  |  Branch (5333:9): [True: 3, False: 2]
  ------------------
 5334|       |      // It is the toplevel package name, so insert the descriptor directly.
 5335|      3|      tables_->AddSymbol(file->package(), Symbol(file));
 5336|      3|    } else {
 5337|      2|      auto* package = tables_->Allocate<Symbol::Subpackage>();
 5338|       |      // If the name is the package name, then it is already in the arena.
 5339|       |      // If not, copy it there. It came from the call to AddPackage below.
 5340|      2|      package->name_size = static_cast<int>(name.size());
 5341|      2|      package->file = file;
 5342|      2|      tables_->AddSymbol(name, Symbol(package));
 5343|      2|    }
 5344|       |    // Also add parent package, if any.
 5345|      5|    std::string::size_type dot_pos = name.find_last_of('.');
 5346|      5|    if (dot_pos == std::string::npos) {
  ------------------
  |  Branch (5346:9): [True: 3, False: 2]
  ------------------
 5347|       |      // No parents.
 5348|      3|      ValidateSymbolName(name, name, proto);
 5349|      3|    } else {
 5350|       |      // Has parent.
 5351|      2|      AddPackage(name.substr(0, dot_pos), proto, file, false);
 5352|      2|      ValidateSymbolName(name.substr(dot_pos + 1), name, proto);
 5353|      2|    }
 5354|      5|  } else if (!existing_symbol.IsPackage()) {
  ------------------
  |  Branch (5354:14): [True: 0, False: 1]
  ------------------
 5355|       |    // Symbol seems to have been defined in a different file.
 5356|      0|    const FileDescriptor* other_file = existing_symbol.GetFile();
 5357|      0|    AddError(name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5358|      0|      return absl::StrCat("\"", name,
 5359|      0|                          "\" is already defined (as something other than "
 5360|      0|                          "a package) in file \"",
 5361|      0|                          (other_file == nullptr ? "null" : other_file->name()),
 5362|      0|                          "\".");
 5363|      0|    });
 5364|      0|  }
 5365|      6|}
_ZN6google8protobuf17DescriptorBuilder18ValidateSymbolNameENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEES6_RKNS0_7MessageE:
 5369|    362|                                           const Message& proto) {
 5370|    362|  if (name.empty()) {
  ------------------
  |  Branch (5370:7): [True: 0, False: 362]
  ------------------
 5371|      0|    AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME,
 5372|      0|             "Missing name.");
 5373|    362|  } else {
 5374|  4.16k|    for (char character : name) {
  ------------------
  |  Branch (5374:25): [True: 4.16k, False: 362]
  ------------------
 5375|       |      // I don't trust isalnum() due to locales.  :(
 5376|  4.16k|      if ((character < 'a' || 'z' < character) &&
  ------------------
  |  Branch (5376:12): [True: 1.37k, False: 2.78k]
  |  Branch (5376:31): [True: 0, False: 2.78k]
  ------------------
 5377|  1.37k|          (character < 'A' || 'Z' < character) &&
  ------------------
  |  Branch (5377:12): [True: 54, False: 1.32k]
  |  Branch (5377:31): [True: 228, False: 1.09k]
  ------------------
 5378|    282|          (character < '0' || '9' < character) && (character != '_')) {
  ------------------
  |  Branch (5378:12): [True: 0, False: 282]
  |  Branch (5378:31): [True: 228, False: 54]
  |  Branch (5378:51): [True: 0, False: 228]
  ------------------
 5379|      0|        AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5380|      0|          return absl::StrCat("\"", name, "\" is not a valid identifier.");
 5381|      0|        });
 5382|      0|        return;
 5383|      0|      }
 5384|  4.16k|    }
 5385|    362|  }
 5386|    362|}
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsERKNS0_19FileDescriptorProtoEPNS0_14FileDescriptorERNS0_8internal13FlatAllocatorE:
 5411|      4|                                        internal::FlatAllocator& alloc) {
 5412|      4|  std::vector<int> options_path;
 5413|      4|  options_path.push_back(FileDescriptorProto::kOptionsFieldNumber);
 5414|       |  // We add the dummy token so that LookupSymbol does the right thing.
 5415|      4|  auto options = AllocateOptionsImpl<FileDescriptor>(
 5416|      4|      absl::StrCat(descriptor->package(), ".dummy"), descriptor->name(), proto,
 5417|      4|      options_path, "google.protobuf.FileOptions", alloc);
 5418|      4|  descriptor->options_ = options;
 5419|      4|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5420|      4|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5421|      4|}
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesERKNS0_19FileDescriptorProtoEPNS0_14FileDescriptorEPNS0_11FileOptionsERNS0_8internal13FlatAllocatorE:
 5593|      4|                                        internal::FlatAllocator& alloc) {
 5594|       |  // File descriptors always need their own merged feature set, even without
 5595|       |  // any explicit features.
 5596|      4|  ResolveFeaturesImpl(descriptor->edition(), proto, descriptor, options, alloc,
 5597|      4|                      DescriptorPool::ErrorCollector::EDITIONS,
 5598|      4|                      /*force_merge=*/true);
 5599|      4|}
_ZN6google8protobuf17DescriptorBuilder24PostProcessFieldFeaturesERNS0_15FieldDescriptorERKNS0_20FieldDescriptorProtoE:
 5602|    206|    FieldDescriptor& field, const FieldDescriptorProto& proto) {
 5603|       |  // TODO This can be replace by a runtime check in `is_required`
 5604|       |  // once the `label` getter is hidden.
 5605|    206|  if (field.features().field_presence() == FeatureSet::LEGACY_REQUIRED &&
  ------------------
  |  Branch (5605:7): [True: 2, False: 204]
  ------------------
 5606|      2|      field.label_ == FieldDescriptor::LABEL_OPTIONAL) {
  ------------------
  |  Branch (5606:7): [True: 0, False: 2]
  ------------------
 5607|      0|    field.label_ = FieldDescriptor::LABEL_REQUIRED;
 5608|      0|  }
 5609|       |  // TODO This can be replace by a runtime check of `is_delimited`
 5610|       |  // once the `TYPE_GROUP` value is removed.
 5611|    206|  if (field.type_ == FieldDescriptor::TYPE_MESSAGE &&
  ------------------
  |  Branch (5611:7): [True: 67, False: 139]
  ------------------
 5612|     67|      !field.containing_type()->options().map_entry() &&
  ------------------
  |  Branch (5612:7): [True: 67, False: 0]
  ------------------
 5613|     67|      field.features().message_encoding() == FeatureSet::DELIMITED) {
  ------------------
  |  Branch (5613:7): [True: 0, False: 67]
  ------------------
 5614|      0|    Symbol type =
 5615|      0|        LookupSymbol(proto.type_name(), field.full_name(),
 5616|      0|                     DescriptorPool::PLACEHOLDER_MESSAGE, LOOKUP_TYPES, false);
 5617|      0|    if (type.descriptor() == nullptr ||
  ------------------
  |  Branch (5617:9): [True: 0, False: 0]
  ------------------
 5618|      0|        !type.descriptor()->options().map_entry()) {
  ------------------
  |  Branch (5618:9): [True: 0, False: 0]
  ------------------
 5619|      0|      field.type_ = FieldDescriptor::TYPE_GROUP;
 5620|      0|    }
 5621|      0|  }
 5622|    206|}
_ZN6google8protobuf17DescriptorBuilder9BuildFileERKNS0_19FileDescriptorProtoE:
 5816|      4|    const FileDescriptorProto& proto) {
 5817|       |  // Ensure the generated pool has been lazily initialized.  This is most
 5818|       |  // important for protos that use C++-specific features, since that extension
 5819|       |  // is only registered lazily and we always parse options into the generated
 5820|       |  // pool.
 5821|      4|  if (pool_ != DescriptorPool::internal_generated_pool()) {
  ------------------
  |  Branch (5821:7): [True: 0, False: 4]
  ------------------
 5822|      0|    DescriptorPool::generated_pool();
 5823|      0|  }
 5824|       |
 5825|      4|  filename_ = proto.name();
 5826|       |
 5827|       |  // Check if the file already exists and is identical to the one being built.
 5828|       |  // Note:  This only works if the input is canonical -- that is, it
 5829|       |  //   fully-qualifies all type names, has no UninterpretedOptions, etc.
 5830|       |  //   This is fine, because this idempotency "feature" really only exists to
 5831|       |  //   accommodate one hack in the proto1->proto2 migration layer.
 5832|      4|  const FileDescriptor* existing_file = tables_->FindFile(filename_);
 5833|      4|  if (existing_file != nullptr) {
  ------------------
  |  Branch (5833:7): [True: 0, False: 4]
  ------------------
 5834|       |    // File already in pool.  Compare the existing one to the input.
 5835|      0|    if (ExistingFileMatchesProto(existing_file->edition(), existing_file,
  ------------------
  |  Branch (5835:9): [True: 0, False: 0]
  ------------------
 5836|      0|                                 proto)) {
 5837|       |      // They're identical.  Return the existing descriptor.
 5838|      0|      return existing_file;
 5839|      0|    }
 5840|       |
 5841|       |    // Not a match.  The error will be detected and handled later.
 5842|      0|  }
 5843|       |
 5844|       |  // Check to see if this file is already on the pending files list.
 5845|       |  // TODO:  Allow recursive imports?  It may not work with some
 5846|       |  //   (most?) programming languages.  E.g., in C++, a forward declaration
 5847|       |  //   of a type is not sufficient to allow it to be used even in a
 5848|       |  //   generated header file due to inlining.  This could perhaps be
 5849|       |  //   worked around using tricks involving inserting #include statements
 5850|       |  //   mid-file, but that's pretty ugly, and I'm pretty sure there are
 5851|       |  //   some languages out there that do not allow recursive dependencies
 5852|       |  //   at all.
 5853|      4|  for (size_t i = 0; i < tables_->pending_files_.size(); i++) {
  ------------------
  |  Branch (5853:22): [True: 0, False: 4]
  ------------------
 5854|      0|    if (tables_->pending_files_[i] == proto.name()) {
  ------------------
  |  Branch (5854:9): [True: 0, False: 0]
  ------------------
 5855|      0|      AddRecursiveImportError(proto, i);
 5856|      0|      return nullptr;
 5857|      0|    }
 5858|      0|  }
 5859|       |
 5860|      4|  static const int kMaximumPackageLength = 511;
 5861|      4|  if (proto.package().size() > kMaximumPackageLength) {
  ------------------
  |  Branch (5861:7): [True: 0, False: 4]
  ------------------
 5862|      0|    AddError(proto.package(), proto, DescriptorPool::ErrorCollector::NAME,
 5863|      0|             "Package name is too long");
 5864|      0|    return nullptr;
 5865|      0|  }
 5866|       |
 5867|       |  // If we have a fallback_database_, and we aren't doing lazy import building,
 5868|       |  // attempt to load all dependencies now, before checkpointing tables_.  This
 5869|       |  // avoids confusion with recursive checkpoints.
 5870|      4|  if (!pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (5870:7): [True: 0, False: 4]
  ------------------
 5871|      0|    if (pool_->fallback_database_ != nullptr) {
  ------------------
  |  Branch (5871:9): [True: 0, False: 0]
  ------------------
 5872|      0|      tables_->pending_files_.push_back(proto.name());
 5873|      0|      for (int i = 0; i < proto.dependency_size(); i++) {
  ------------------
  |  Branch (5873:23): [True: 0, False: 0]
  ------------------
 5874|      0|        if (tables_->FindFile(proto.dependency(i)) == nullptr &&
  ------------------
  |  Branch (5874:13): [True: 0, False: 0]
  ------------------
 5875|      0|            (pool_->underlay_ == nullptr ||
  ------------------
  |  Branch (5875:14): [True: 0, False: 0]
  ------------------
 5876|      0|             pool_->underlay_->FindFileByName(proto.dependency(i)) ==
  ------------------
  |  Branch (5876:14): [True: 0, False: 0]
  ------------------
 5877|      0|                 nullptr)) {
 5878|       |          // We don't care what this returns since we'll find out below anyway.
 5879|      0|          pool_->TryFindFileInFallbackDatabase(proto.dependency(i),
 5880|      0|                                               deferred_validation_);
 5881|      0|        }
 5882|      0|      }
 5883|      0|      tables_->pending_files_.pop_back();
 5884|      0|    }
 5885|      0|  }
 5886|       |
 5887|       |  // Checkpoint the tables so that we can roll back if something goes wrong.
 5888|      4|  tables_->AddCheckpoint();
 5889|       |
 5890|      4|  auto alloc = absl::make_unique<internal::FlatAllocator>();
 5891|      4|  PlanAllocationSize(proto, *alloc);
 5892|      4|  alloc->FinalizePlanning(tables_);
 5893|      4|  FileDescriptor* result = BuildFileImpl(proto, *alloc);
 5894|       |
 5895|      4|  file_tables_->FinalizeTables();
 5896|      4|  if (result) {
  ------------------
  |  Branch (5896:7): [True: 4, False: 0]
  ------------------
 5897|      4|    tables_->ClearLastCheckpoint();
 5898|      4|    result->finished_building_ = true;
 5899|      4|    alloc->ExpectConsumed();
 5900|      4|  } else {
 5901|      0|    tables_->RollbackToLastCheckpoint(deferred_validation_);
 5902|      0|  }
 5903|       |
 5904|      4|  return result;
 5905|      4|}
_ZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorE:
 5908|      4|    const FileDescriptorProto& proto, internal::FlatAllocator& alloc) {
 5909|      4|  FileDescriptor* result = alloc.AllocateArray<FileDescriptor>(1);
 5910|      4|  file_ = result;
 5911|       |
 5912|      4|  if (proto.has_edition()) {
  ------------------
  |  Branch (5912:7): [True: 0, False: 4]
  ------------------
 5913|      0|    file_->edition_ = proto.edition();
 5914|      4|  } else if (proto.syntax().empty() || proto.syntax() == "proto2") {
  ------------------
  |  Branch (5914:14): [True: 3, False: 1]
  |  Branch (5914:40): [True: 0, False: 1]
  ------------------
 5915|      3|    file_->edition_ = Edition::EDITION_PROTO2;
 5916|      3|  } else if (proto.syntax() == "proto3") {
  ------------------
  |  Branch (5916:14): [True: 1, False: 0]
  ------------------
 5917|      1|    file_->edition_ = Edition::EDITION_PROTO3;
 5918|      1|  } else {
 5919|      0|    file_->edition_ = Edition::EDITION_UNKNOWN;
 5920|      0|    AddError(proto.name(), proto, DescriptorPool::ErrorCollector::OTHER, [&] {
 5921|      0|      return absl::StrCat("Unrecognized syntax: ", proto.syntax());
 5922|      0|    });
 5923|      0|  }
 5924|       |
 5925|      4|  const FeatureSetDefaults& defaults =
 5926|      4|      pool_->feature_set_defaults_spec_ == nullptr
  ------------------
  |  Branch (5926:7): [True: 4, False: 0]
  ------------------
 5927|      4|          ? GetCppFeatureSetDefaults()
 5928|      4|          : *pool_->feature_set_defaults_spec_;
 5929|       |
 5930|      4|  absl::StatusOr<FeatureResolver> feature_resolver =
 5931|      4|      FeatureResolver::Create(file_->edition_, defaults);
 5932|      4|  if (!feature_resolver.ok()) {
  ------------------
  |  Branch (5932:7): [True: 0, False: 4]
  ------------------
 5933|      0|    AddError(proto.name(), proto, DescriptorPool::ErrorCollector::EDITIONS,
 5934|      0|             [&] { return std::string(feature_resolver.status().message()); });
 5935|      4|  } else {
 5936|      4|    feature_resolver_.emplace(std::move(feature_resolver).value());
 5937|      4|  }
 5938|       |
 5939|      4|  result->is_placeholder_ = false;
 5940|      4|  result->finished_building_ = false;
 5941|      4|  SourceCodeInfo* info = nullptr;
 5942|      4|  if (proto.has_source_code_info()) {
  ------------------
  |  Branch (5942:7): [True: 0, False: 4]
  ------------------
 5943|      0|    info = alloc.AllocateArray<SourceCodeInfo>(1);
 5944|      0|    *info = proto.source_code_info();
 5945|      0|    result->source_code_info_ = info;
 5946|      4|  } else {
 5947|      4|    result->source_code_info_ = &SourceCodeInfo::default_instance();
 5948|      4|  }
 5949|       |
 5950|      4|  file_tables_ = alloc.AllocateArray<FileDescriptorTables>(1);
 5951|      4|  file_->tables_ = file_tables_;
 5952|       |
 5953|      4|  if (!proto.has_name()) {
  ------------------
  |  Branch (5953:7): [True: 0, False: 4]
  ------------------
 5954|      0|    AddError("", proto, DescriptorPool::ErrorCollector::OTHER,
 5955|      0|             "Missing field: FileDescriptorProto.name.");
 5956|      0|  }
 5957|       |
 5958|      4|  result->name_ = alloc.AllocateStrings(proto.name());
 5959|      4|  if (proto.has_package()) {
  ------------------
  |  Branch (5959:7): [True: 4, False: 0]
  ------------------
 5960|      4|    result->package_ = alloc.AllocateStrings(proto.package());
 5961|      4|  } else {
 5962|       |    // We cannot rely on proto.package() returning a valid string if
 5963|       |    // proto.has_package() is false, because we might be running at static
 5964|       |    // initialization time, in which case default values have not yet been
 5965|       |    // initialized.
 5966|      0|    result->package_ = alloc.AllocateStrings("");
 5967|      0|  }
 5968|      4|  result->pool_ = pool_;
 5969|       |
 5970|      4|  if (absl::StrContains(result->name(), '\0')) {
  ------------------
  |  Branch (5970:7): [True: 0, False: 4]
  ------------------
 5971|      0|    AddError(result->name(), proto, DescriptorPool::ErrorCollector::NAME, [&] {
 5972|      0|      return absl::StrCat("\"", result->name(), "\" contains null character.");
 5973|      0|    });
 5974|      0|    return nullptr;
 5975|      0|  }
 5976|       |
 5977|       |  // Add to tables.
 5978|      4|  if (!tables_->AddFile(result)) {
  ------------------
  |  Branch (5978:7): [True: 0, False: 4]
  ------------------
 5979|      0|    AddError(proto.name(), proto, DescriptorPool::ErrorCollector::OTHER,
 5980|      0|             "A file with this name is already in the pool.");
 5981|       |    // Bail out early so that if this is actually the exact same file, we
 5982|       |    // don't end up reporting that every single symbol is already defined.
 5983|      0|    return nullptr;
 5984|      0|  }
 5985|      4|  if (!result->package().empty()) {
  ------------------
  |  Branch (5985:7): [True: 4, False: 0]
  ------------------
 5986|      4|    if (std::count(result->package().begin(), result->package().end(), '.') >
  ------------------
  |  Branch (5986:9): [True: 0, False: 4]
  ------------------
 5987|      4|        kPackageLimit) {
 5988|      0|      AddError(result->package(), proto, DescriptorPool::ErrorCollector::NAME,
 5989|      0|               "Exceeds Maximum Package Depth");
 5990|      0|      return nullptr;
 5991|      0|    }
 5992|      4|    AddPackage(result->package(), proto, result, true);
 5993|      4|  }
 5994|       |
 5995|       |  // Make sure all dependencies are loaded.
 5996|      4|  absl::flat_hash_set<absl::string_view> seen_dependencies;
 5997|      4|  result->dependency_count_ = proto.dependency_size();
 5998|      4|  result->dependencies_ =
 5999|      4|      alloc.AllocateArray<const FileDescriptor*>(proto.dependency_size());
 6000|      4|  result->dependencies_once_ = nullptr;
 6001|      4|  unused_dependency_.clear();
 6002|      4|  absl::flat_hash_set<int> weak_deps;
 6003|      4|  for (int i = 0; i < proto.weak_dependency_size(); ++i) {
  ------------------
  |  Branch (6003:19): [True: 0, False: 4]
  ------------------
 6004|      0|    weak_deps.insert(proto.weak_dependency(i));
 6005|      0|  }
 6006|       |
 6007|      4|  bool need_lazy_deps = false;
 6008|      5|  for (int i = 0; i < proto.dependency_size(); i++) {
  ------------------
  |  Branch (6008:19): [True: 1, False: 4]
  ------------------
 6009|      1|    if (!seen_dependencies.insert(proto.dependency(i)).second) {
  ------------------
  |  Branch (6009:9): [True: 0, False: 1]
  ------------------
 6010|      0|      AddTwiceListedError(proto, i);
 6011|      0|    }
 6012|       |
 6013|      1|    const FileDescriptor* dependency = tables_->FindFile(proto.dependency(i));
 6014|      1|    if (dependency == nullptr && pool_->underlay_ != nullptr) {
  ------------------
  |  Branch (6014:9): [True: 0, False: 1]
  |  Branch (6014:34): [True: 0, False: 0]
  ------------------
 6015|      0|      dependency = pool_->underlay_->FindFileByName(proto.dependency(i));
 6016|      0|    }
 6017|       |
 6018|      1|    if (dependency == result) {
  ------------------
  |  Branch (6018:9): [True: 0, False: 1]
  ------------------
 6019|       |      // Recursive import.  dependency/result is not fully initialized, and it's
 6020|       |      // dangerous to try to do anything with it.  The recursive import error
 6021|       |      // will be detected and reported in DescriptorBuilder::BuildFile().
 6022|      0|      return nullptr;
 6023|      0|    }
 6024|       |
 6025|      1|    if (dependency == nullptr) {
  ------------------
  |  Branch (6025:9): [True: 0, False: 1]
  ------------------
 6026|      0|      if (!pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (6026:11): [True: 0, False: 0]
  ------------------
 6027|      0|        if (pool_->allow_unknown_ ||
  ------------------
  |  Branch (6027:13): [True: 0, False: 0]
  ------------------
 6028|      0|            (!pool_->enforce_weak_ && weak_deps.contains(i))) {
  ------------------
  |  Branch (6028:14): [True: 0, False: 0]
  |  Branch (6028:39): [True: 0, False: 0]
  ------------------
 6029|      0|          internal::FlatAllocator lazy_dep_alloc;
 6030|      0|          lazy_dep_alloc.PlanArray<FileDescriptor>(1);
 6031|      0|          lazy_dep_alloc.PlanArray<std::string>(1);
 6032|      0|          lazy_dep_alloc.FinalizePlanning(tables_);
 6033|      0|          dependency = pool_->NewPlaceholderFileWithMutexHeld(
 6034|      0|              proto.dependency(i), lazy_dep_alloc);
 6035|      0|        } else {
 6036|      0|          AddImportError(proto, i);
 6037|      0|        }
 6038|      0|      }
 6039|      1|    } else {
 6040|       |      // Add to unused_dependency_ to track unused imported files.
 6041|       |      // Note: do not track unused imported files for public import.
 6042|      1|      if (pool_->enforce_dependencies_ &&
  ------------------
  |  Branch (6042:11): [True: 0, False: 1]
  |  Branch (6042:11): [True: 0, False: 1]
  ------------------
 6043|      0|          (pool_->direct_input_files_.find(proto.name()) !=
  ------------------
  |  Branch (6043:11): [True: 0, False: 0]
  ------------------
 6044|      0|           pool_->direct_input_files_.end()) &&
 6045|      0|          (dependency->public_dependency_count() == 0)) {
  ------------------
  |  Branch (6045:11): [True: 0, False: 0]
  ------------------
 6046|      0|        unused_dependency_.insert(dependency);
 6047|      0|      }
 6048|      1|    }
 6049|       |
 6050|      1|    result->dependencies_[i] = dependency;
 6051|      1|    if (pool_->lazily_build_dependencies_ && !dependency) {
  ------------------
  |  Branch (6051:9): [True: 1, False: 0]
  |  Branch (6051:46): [True: 0, False: 1]
  ------------------
 6052|      0|      need_lazy_deps = true;
 6053|      0|    }
 6054|      1|  }
 6055|      4|  if (need_lazy_deps) {
  ------------------
  |  Branch (6055:7): [True: 0, False: 4]
  ------------------
 6056|      0|    int total_char_size = 0;
 6057|      0|    for (int i = 0; i < proto.dependency_size(); i++) {
  ------------------
  |  Branch (6057:21): [True: 0, False: 0]
  ------------------
 6058|      0|      if (result->dependencies_[i] == nullptr) {
  ------------------
  |  Branch (6058:11): [True: 0, False: 0]
  ------------------
 6059|      0|        total_char_size += static_cast<int>(proto.dependency(i).size());
 6060|      0|      }
 6061|      0|      ++total_char_size;  // For NUL char
 6062|      0|    }
 6063|       |
 6064|      0|    void* data = tables_->AllocateBytes(
 6065|      0|        static_cast<int>(sizeof(absl::once_flag)) + total_char_size);
 6066|      0|    result->dependencies_once_ = ::new (data) absl::once_flag{};
 6067|      0|    char* name_data = reinterpret_cast<char*>(result->dependencies_once_ + 1);
 6068|       |
 6069|      0|    for (int i = 0; i < proto.dependency_size(); i++) {
  ------------------
  |  Branch (6069:21): [True: 0, False: 0]
  ------------------
 6070|      0|      if (result->dependencies_[i] == nullptr) {
  ------------------
  |  Branch (6070:11): [True: 0, False: 0]
  ------------------
 6071|      0|        memcpy(name_data, proto.dependency(i).data(),
 6072|      0|               proto.dependency(i).size());
 6073|      0|        name_data += proto.dependency(i).size();
 6074|      0|      }
 6075|      0|      *name_data++ = '\0';
 6076|      0|    }
 6077|      0|  }
 6078|       |
 6079|       |  // Check public dependencies.
 6080|      4|  int public_dependency_count = 0;
 6081|      4|  result->public_dependencies_ =
 6082|      4|      alloc.AllocateArray<int>(proto.public_dependency_size());
 6083|      4|  for (int i = 0; i < proto.public_dependency_size(); i++) {
  ------------------
  |  Branch (6083:19): [True: 0, False: 4]
  ------------------
 6084|       |    // Only put valid public dependency indexes.
 6085|      0|    int index = proto.public_dependency(i);
 6086|      0|    if (index >= 0 && index < proto.dependency_size()) {
  ------------------
  |  Branch (6086:9): [True: 0, False: 0]
  |  Branch (6086:23): [True: 0, False: 0]
  ------------------
 6087|      0|      result->public_dependencies_[public_dependency_count++] = index;
 6088|       |      // Do not track unused imported files for public import.
 6089|       |      // Calling dependency(i) builds that file when doing lazy imports,
 6090|       |      // need to avoid doing this. Unused dependency detection isn't done
 6091|       |      // when building lazily, anyways.
 6092|      0|      if (!pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (6092:11): [True: 0, False: 0]
  ------------------
 6093|      0|        unused_dependency_.erase(result->dependency(index));
 6094|      0|      }
 6095|      0|    } else {
 6096|      0|      AddError(proto.name(), proto, DescriptorPool::ErrorCollector::OTHER,
 6097|      0|               "Invalid public dependency index.");
 6098|      0|    }
 6099|      0|  }
 6100|      4|  result->public_dependency_count_ = public_dependency_count;
 6101|       |
 6102|       |  // Build dependency set
 6103|      4|  dependencies_.clear();
 6104|       |  // We don't/can't do proper dependency error checking when
 6105|       |  // lazily_build_dependencies_, and calling dependency(i) will force
 6106|       |  // a dependency to be built, which we don't want.
 6107|      4|  if (!pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (6107:7): [True: 0, False: 4]
  ------------------
 6108|      0|    for (int i = 0; i < result->dependency_count(); i++) {
  ------------------
  |  Branch (6108:21): [True: 0, False: 0]
  ------------------
 6109|      0|      RecordPublicDependencies(result->dependency(i));
 6110|      0|    }
 6111|      0|  }
 6112|       |
 6113|       |  // Check weak dependencies.
 6114|      4|  int weak_dependency_count = 0;
 6115|      4|  result->weak_dependencies_ =
 6116|      4|      alloc.AllocateArray<int>(proto.weak_dependency_size());
 6117|      4|  for (int i = 0; i < proto.weak_dependency_size(); i++) {
  ------------------
  |  Branch (6117:19): [True: 0, False: 4]
  ------------------
 6118|      0|    int index = proto.weak_dependency(i);
 6119|      0|    if (index >= 0 && index < proto.dependency_size()) {
  ------------------
  |  Branch (6119:9): [True: 0, False: 0]
  |  Branch (6119:23): [True: 0, False: 0]
  ------------------
 6120|      0|      result->weak_dependencies_[weak_dependency_count++] = index;
 6121|      0|    } else {
 6122|      0|      AddError(proto.name(), proto, DescriptorPool::ErrorCollector::OTHER,
 6123|      0|               "Invalid weak dependency index.");
 6124|      0|    }
 6125|      0|  }
 6126|      4|  result->weak_dependency_count_ = weak_dependency_count;
 6127|       |
 6128|       |  // Convert children.
 6129|      4|  BUILD_ARRAY(proto, result, message_type, BuildMessage, nullptr);
  ------------------
  |  | 5627|      4|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|      4|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|      4|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|      4|      INPUT.NAME##_size());                                            \
  |  | 5631|     39|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 35, False: 4]
  |  |  ------------------
  |  | 5632|     35|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|     35|  }
  ------------------
 6130|      4|  BUILD_ARRAY(proto, result, enum_type, BuildEnum, nullptr);
  ------------------
  |  | 5627|      4|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|      4|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|      4|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|      4|      INPUT.NAME##_size());                                            \
  |  | 5631|      5|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 1, False: 4]
  |  |  ------------------
  |  | 5632|      1|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|      1|  }
  ------------------
 6131|      4|  BUILD_ARRAY(proto, result, service, BuildService, nullptr);
  ------------------
  |  | 5627|      4|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|      4|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|      4|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|      4|      INPUT.NAME##_size());                                            \
  |  | 5631|      4|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 0, False: 4]
  |  |  ------------------
  |  | 5632|      0|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|      0|  }
  ------------------
 6132|      4|  BUILD_ARRAY(proto, result, extension, BuildExtension, nullptr);
  ------------------
  |  | 5627|      4|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|      4|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|      4|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|      4|      INPUT.NAME##_size());                                            \
  |  | 5631|      5|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 1, False: 4]
  |  |  ------------------
  |  | 5632|      1|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|      1|  }
  ------------------
 6133|       |
 6134|       |  // Copy options.
 6135|      4|  AllocateOptions(proto, result, alloc);
 6136|       |
 6137|       |  // Note that the following steps must occur in exactly the specified order.
 6138|       |
 6139|       |  // Cross-link.
 6140|      4|  CrossLinkFile(result, proto);
 6141|       |
 6142|      4|  if (!message_hints_.empty()) {
  ------------------
  |  Branch (6142:7): [True: 0, False: 4]
  ------------------
 6143|      0|    SuggestFieldNumbers(result, proto);
 6144|      0|  }
 6145|       |
 6146|       |  // Interpret only the non-extension options first, including features and
 6147|       |  // their extensions.  This has to be done in two passes, since option
 6148|       |  // extensions defined in this file may have features attached to them.
 6149|      4|  if (!had_errors_) {
  ------------------
  |  Branch (6149:7): [True: 4, False: 0]
  ------------------
 6150|      4|    OptionInterpreter option_interpreter(this);
 6151|      4|    for (std::vector<OptionsToInterpret>::iterator iter =
 6152|      4|             options_to_interpret_.begin();
 6153|      4|         iter != options_to_interpret_.end(); ++iter) {
  ------------------
  |  Branch (6153:10): [True: 0, False: 4]
  ------------------
 6154|      0|      option_interpreter.InterpretNonExtensionOptions(&(*iter));
 6155|      0|    }
 6156|       |
 6157|       |    // TODO: move this check back to generator.cc once we no longer
 6158|       |    // need to set both ctype and string_type internally.
 6159|      4|    internal::VisitDescriptors(
 6160|      4|        *result, proto,
 6161|      4|        [&](const FieldDescriptor& field, const FieldDescriptorProto& proto) {
 6162|      4|          if (field.options_->has_ctype() && field.options_->features()
 6163|      4|                                                 .GetExtension(pb::cpp)
 6164|      4|                                                 .has_string_type()) {
 6165|      4|            AddError(field.full_name(), proto,
 6166|      4|                     DescriptorPool::ErrorCollector::TYPE, [&] {
 6167|      4|                       return absl::StrFormat(
 6168|      4|                           "Field %s specifies both string_type and ctype "
 6169|      4|                           "which is not supported.",
 6170|      4|                           field.full_name());
 6171|      4|                     });
 6172|      4|          }
 6173|      4|        });
 6174|       |
 6175|       |    // Handle feature resolution.  This must occur after option interpretation,
 6176|       |    // but before validation.
 6177|      4|    {
 6178|      4|      auto cleanup = DisableTracking();
 6179|      4|      internal::VisitDescriptors(
 6180|      4|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|      4|            using OptionsT =
 6182|      4|                typename std::remove_const<typename std::remove_pointer<
 6183|      4|                    decltype(descriptor.options_)>::type>::type;
 6184|      4|            using DescriptorT =
 6185|      4|                typename std::remove_const<typename std::remove_reference<
 6186|      4|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|      4|            ResolveFeatures(
 6189|      4|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|      4|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|      4|                    OptionsT*>(descriptor.options_),
 6192|      4|                alloc);
 6193|      4|          });
 6194|      4|    }
 6195|       |
 6196|      4|    internal::VisitDescriptors(*result, [&](const FieldDescriptor& field) {
 6197|      4|      if (result->edition() >= Edition::EDITION_2024 &&
 6198|      4|          field.options().has_ctype()) {
 6199|       |        // "ctype" is no longer supported in edition 2024 and beyond.
 6200|      4|        AddError(
 6201|      4|            field.full_name(), proto, DescriptorPool::ErrorCollector::NAME,
 6202|      4|            "ctype option is not allowed under edition 2024 and beyond. Use "
 6203|      4|            "the feature string_type = VIEW|CORD|STRING|... instead.");
 6204|      4|      }
 6205|      4|      EnforceCTypeStringTypeConsistency(
 6206|      4|          field.file()->edition(), field.cpp_type(),
 6207|      4|          field.merged_features_->GetExtension(pb::cpp),
 6208|      4|          const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6209|      4|              FieldOptions&>(*field.options_));
 6210|      4|    });
 6211|       |
 6212|       |    // Post-process cleanup for field features.
 6213|      4|    internal::VisitDescriptors(
 6214|      4|        *result, proto,
 6215|      4|        [&](const FieldDescriptor& field, const FieldDescriptorProto& proto) {
 6216|      4|          PostProcessFieldFeatures(const_cast<FieldDescriptor&>(field), proto);
 6217|      4|        });
 6218|       |
 6219|       |    // Interpret any remaining uninterpreted options gathered into
 6220|       |    // options_to_interpret_ during descriptor building.  Cross-linking has made
 6221|       |    // extension options known, so all interpretations should now succeed.
 6222|      4|    for (std::vector<OptionsToInterpret>::iterator iter =
 6223|      4|             options_to_interpret_.begin();
 6224|      4|         iter != options_to_interpret_.end(); ++iter) {
  ------------------
  |  Branch (6224:10): [True: 0, False: 4]
  ------------------
 6225|      0|      option_interpreter.InterpretOptionExtensions(&(*iter));
 6226|      0|    }
 6227|      4|    options_to_interpret_.clear();
 6228|      4|    if (info != nullptr) {
  ------------------
  |  Branch (6228:9): [True: 0, False: 4]
  ------------------
 6229|      0|      option_interpreter.UpdateSourceCodeInfo(info);
 6230|      0|    }
 6231|      4|  }
 6232|       |
 6233|       |  // Validate options. See comments at InternalSetLazilyBuildDependencies about
 6234|       |  // error checking and lazy import building.
 6235|      4|  if (!had_errors_ && !pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (6235:7): [True: 4, False: 0]
  |  Branch (6235:23): [True: 0, False: 4]
  ------------------
 6236|      0|    internal::VisitDescriptors(
 6237|      0|        *result, proto, [&](const auto& descriptor, const auto& desc_proto) {
 6238|      0|          ValidateOptions(&descriptor, desc_proto);
 6239|      0|        });
 6240|      0|  }
 6241|       |
 6242|       |  // Additional naming conflict check for map entry types. Only need to check
 6243|       |  // this if there are already errors.
 6244|      4|  if (had_errors_) {
  ------------------
  |  Branch (6244:7): [True: 0, False: 4]
  ------------------
 6245|      0|    for (int i = 0; i < proto.message_type_size(); ++i) {
  ------------------
  |  Branch (6245:21): [True: 0, False: 0]
  ------------------
 6246|      0|      DetectMapConflicts(result->message_type(i), proto.message_type(i));
 6247|      0|    }
 6248|      0|  }
 6249|       |
 6250|       |
 6251|       |  // Again, see comments at InternalSetLazilyBuildDependencies about error
 6252|       |  // checking. Also, don't log unused dependencies if there were previous
 6253|       |  // errors, since the results might be inaccurate.
 6254|      4|  if (!had_errors_ && !unused_dependency_.empty() &&
  ------------------
  |  Branch (6254:7): [True: 4, False: 0]
  |  Branch (6254:23): [True: 0, False: 4]
  ------------------
 6255|      0|      !pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (6255:7): [True: 0, False: 0]
  ------------------
 6256|      0|    LogUnusedDependency(proto, result);
 6257|      0|  }
 6258|       |
 6259|       |  // Store feature information for deferred validation outside of the database
 6260|       |  // mutex.
 6261|      4|  if (!had_errors_ && !pool_->lazily_build_dependencies_) {
  ------------------
  |  Branch (6261:7): [True: 4, False: 0]
  |  Branch (6261:23): [True: 0, False: 4]
  ------------------
 6262|      0|    internal::VisitDescriptors(
 6263|      0|        *result, proto, [&](const auto& descriptor, const auto& desc_proto) {
 6264|      0|          if (descriptor.proto_features_ != &FeatureSet::default_instance()) {
 6265|      0|            deferred_validation_.ValidateFeatureLifetimes(
 6266|      0|                GetFile(descriptor), {descriptor.proto_features_, &desc_proto,
 6267|      0|                                      GetFullName(descriptor), proto.name()});
 6268|      0|          }
 6269|      0|        });
 6270|      0|  }
 6271|       |
 6272|      4|  if (had_errors_) {
  ------------------
  |  Branch (6272:7): [True: 0, False: 4]
  ------------------
 6273|      0|    return nullptr;
 6274|      4|  } else {
 6275|      4|    return result;
 6276|      4|  }
 6277|      4|}
_ZN6google8protobuf17DescriptorBuilder19AllocateNameStringsENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEES6_RNS0_8internal13FlatAllocatorE:
 6282|     65|    internal::FlatAllocator& alloc) {
 6283|     65|  if (scope.empty()) {
  ------------------
  |  Branch (6283:7): [True: 0, False: 65]
  ------------------
 6284|      0|    return alloc.AllocateStrings(proto_name, proto_name);
 6285|     65|  } else {
 6286|     65|    return alloc.AllocateStrings(proto_name,
 6287|     65|                                 absl::StrCat(scope, ".", proto_name));
 6288|     65|  }
 6289|     65|}
_ZN6google8protobuf17DescriptorBuilder12BuildMessageERKNS0_15DescriptorProtoEPKNS0_10DescriptorEPS5_RNS0_8internal13FlatAllocatorE:
 6316|     45|                                     internal::FlatAllocator& alloc) {
 6317|     45|  const absl::string_view scope =
 6318|     45|      (parent == nullptr) ? file_->package() : parent->full_name();
  ------------------
  |  Branch (6318:7): [True: 35, False: 10]
  ------------------
 6319|     45|  result->all_names_ = AllocateNameStrings(scope, proto.name(), alloc);
 6320|     45|  ValidateSymbolName(proto.name(), result->full_name(), proto);
 6321|       |
 6322|     45|  result->file_ = file_;
 6323|     45|  result->containing_type_ = parent;
 6324|     45|  result->is_placeholder_ = false;
 6325|     45|  result->is_unqualified_placeholder_ = false;
 6326|     45|  result->well_known_type_ = Descriptor::WELLKNOWNTYPE_UNSPECIFIED;
 6327|     45|  result->options_ = nullptr;  // Set to default_instance later if necessary.
 6328|       |
 6329|     45|  auto it = pool_->tables_->well_known_types_.find(result->full_name());
 6330|     45|  if (it != pool_->tables_->well_known_types_.end()) {
  ------------------
  |  Branch (6330:7): [True: 1, False: 44]
  ------------------
 6331|      1|    result->well_known_type_ = it->second;
 6332|      1|  }
 6333|       |
 6334|       |  // Calculate the continuous sequence of fields.
 6335|       |  // These can be fast-path'd during lookup and don't need to be added to the
 6336|       |  // tables.
 6337|       |  // We use uint16_t to save space for sequential_field_limit_, so stop before
 6338|       |  // overflowing it. Worst case, we are not taking full advantage on huge
 6339|       |  // messages, but it is unlikely.
 6340|     45|  result->sequential_field_limit_ = 0;
 6341|    151|  for (int i = 0; i < std::numeric_limits<uint16_t>::max() &&
  ------------------
  |  Branch (6341:19): [True: 151, False: 0]
  ------------------
 6342|    151|                  i < proto.field_size() && proto.field(i).number() == i + 1;
  ------------------
  |  Branch (6342:19): [True: 124, False: 27]
  |  Branch (6342:45): [True: 106, False: 18]
  ------------------
 6343|    106|       ++i) {
 6344|    106|    result->sequential_field_limit_ = i + 1;
 6345|    106|  }
 6346|       |
 6347|       |  // Build oneofs first so that fields and extension ranges can refer to them.
 6348|     45|  BUILD_ARRAY(proto, result, oneof_decl, BuildOneof, result);
  ------------------
  |  | 5627|     45|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     45|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     45|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     45|      INPUT.NAME##_size());                                            \
  |  | 5631|     47|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 2, False: 45]
  |  |  ------------------
  |  | 5632|      2|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|      2|  }
  ------------------
 6349|     45|  BUILD_ARRAY(proto, result, field, BuildField, result);
  ------------------
  |  | 5627|     45|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     45|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     45|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     45|      INPUT.NAME##_size());                                            \
  |  | 5631|    250|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 205, False: 45]
  |  |  ------------------
  |  | 5632|    205|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|    205|  }
  ------------------
 6350|     45|  BUILD_ARRAY(proto, result, enum_type, BuildEnum, result);
  ------------------
  |  | 5627|     45|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     45|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     45|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     45|      INPUT.NAME##_size());                                            \
  |  | 5631|     62|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 17, False: 45]
  |  |  ------------------
  |  | 5632|     17|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|     17|  }
  ------------------
 6351|     45|  BUILD_ARRAY(proto, result, extension_range, BuildExtensionRange, result);
  ------------------
  |  | 5627|     45|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     45|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     45|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     45|      INPUT.NAME##_size());                                            \
  |  | 5631|     59|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 14, False: 45]
  |  |  ------------------
  |  | 5632|     14|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|     14|  }
  ------------------
 6352|     45|  BUILD_ARRAY(proto, result, extension, BuildExtension, result);
  ------------------
  |  | 5627|     45|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     45|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     45|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     45|      INPUT.NAME##_size());                                            \
  |  | 5631|     45|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 0, False: 45]
  |  |  ------------------
  |  | 5632|      0|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|      0|  }
  ------------------
 6353|     45|  BUILD_ARRAY(proto, result, reserved_range, BuildReservedRange, result);
  ------------------
  |  | 5627|     45|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     45|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     45|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     45|      INPUT.NAME##_size());                                            \
  |  | 5631|     59|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 14, False: 45]
  |  |  ------------------
  |  | 5632|     14|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|     14|  }
  ------------------
 6354|       |
 6355|       |  // Copy options.
 6356|     45|  AllocateOptions(proto, result, DescriptorProto::kOptionsFieldNumber,
 6357|     45|                  "google.protobuf.MessageOptions", alloc);
 6358|       |
 6359|       |  // Before building submessages, check recursion limit.
 6360|     45|  --recursion_depth_;
 6361|     45|  IncrementWhenDestroyed revert{recursion_depth_};
 6362|     45|  if (recursion_depth_ <= 0) {
  ------------------
  |  Branch (6362:7): [True: 0, False: 45]
  ------------------
 6363|      0|    AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::OTHER,
 6364|      0|             "Reached maximum recursion limit for nested messages.");
 6365|      0|    result->nested_types_ = nullptr;
 6366|      0|    result->nested_type_count_ = 0;
 6367|      0|    return;
 6368|      0|  }
 6369|     45|  BUILD_ARRAY(proto, result, nested_type, BuildMessage, result);
  ------------------
  |  | 5627|     45|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     45|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     45|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     45|      INPUT.NAME##_size());                                            \
  |  | 5631|     55|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 10, False: 45]
  |  |  ------------------
  |  | 5632|     10|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|     10|  }
  ------------------
 6370|       |
 6371|       |  // Copy reserved names.
 6372|     45|  int reserved_name_count = proto.reserved_name_size();
 6373|     45|  result->reserved_name_count_ = reserved_name_count;
 6374|     45|  result->reserved_names_ =
 6375|     45|      alloc.AllocateArray<const std::string*>(reserved_name_count);
 6376|     47|  for (int i = 0; i < reserved_name_count; ++i) {
  ------------------
  |  Branch (6376:19): [True: 2, False: 45]
  ------------------
 6377|      2|    result->reserved_names_[i] = alloc.AllocateStrings(proto.reserved_name(i));
 6378|      2|  }
 6379|       |
 6380|     45|  AddSymbol(result->full_name(), parent, result->name(), proto, Symbol(result));
 6381|       |
 6382|     59|  for (int i = 0; i < proto.reserved_range_size(); i++) {
  ------------------
  |  Branch (6382:19): [True: 14, False: 45]
  ------------------
 6383|     14|    const DescriptorProto_ReservedRange& range1 = proto.reserved_range(i);
 6384|     27|    for (int j = i + 1; j < proto.reserved_range_size(); j++) {
  ------------------
  |  Branch (6384:25): [True: 13, False: 14]
  ------------------
 6385|     13|      const DescriptorProto_ReservedRange& range2 = proto.reserved_range(j);
 6386|     13|      if (range1.end() > range2.start() && range2.end() > range1.start()) {
  ------------------
  |  Branch (6386:11): [True: 1, False: 12]
  |  Branch (6386:44): [True: 0, False: 1]
  ------------------
 6387|      0|        AddError(result->full_name(), proto.reserved_range(i),
 6388|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 6389|      0|                   return absl::Substitute(
 6390|      0|                       "Reserved range $0 to $1 overlaps with "
 6391|      0|                       "already-defined range $2 to $3.",
 6392|      0|                       range2.start(), range2.end() - 1, range1.start(),
 6393|      0|                       range1.end() - 1);
 6394|      0|                 });
 6395|      0|      }
 6396|     13|    }
 6397|     14|  }
 6398|       |
 6399|     45|  absl::flat_hash_set<absl::string_view> reserved_name_set;
 6400|     45|  for (const std::string& name : proto.reserved_name()) {
  ------------------
  |  Branch (6400:32): [True: 2, False: 45]
  ------------------
 6401|      2|    if (!reserved_name_set.insert(name).second) {
  ------------------
  |  Branch (6401:9): [True: 0, False: 2]
  ------------------
 6402|      0|      AddError(name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 6403|      0|        return absl::Substitute("Field name \"$0\" is reserved multiple times.",
 6404|      0|                                name);
 6405|      0|      });
 6406|      0|    }
 6407|      2|  }
 6408|       |  // Check that fields aren't using reserved names or numbers and that they
 6409|       |  // aren't using extension numbers.
 6410|    250|  for (int i = 0; i < result->field_count(); i++) {
  ------------------
  |  Branch (6410:19): [True: 205, False: 45]
  ------------------
 6411|    205|    const FieldDescriptor* field = result->field(i);
 6412|    290|    for (int j = 0; j < result->extension_range_count(); j++) {
  ------------------
  |  Branch (6412:21): [True: 85, False: 205]
  ------------------
 6413|     85|      const Descriptor::ExtensionRange* range = result->extension_range(j);
 6414|     85|      if (range->start_number() <= field->number() &&
  ------------------
  |  Branch (6414:11): [True: 0, False: 85]
  ------------------
 6415|      0|          field->number() < range->end_number()) {
  ------------------
  |  Branch (6415:11): [True: 0, False: 0]
  ------------------
 6416|      0|        message_hints_[result].RequestHintOnFieldNumbers(
 6417|      0|            proto.extension_range(j), DescriptorPool::ErrorCollector::NUMBER);
 6418|      0|        AddError(field->full_name(), proto.extension_range(j),
 6419|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 6420|      0|                   return absl::Substitute(
 6421|      0|                       "Extension range $0 to $1 includes field \"$2\" ($3).",
 6422|      0|                       range->start_number(), range->end_number() - 1,
 6423|      0|                       field->name(), field->number());
 6424|      0|                 });
 6425|      0|      }
 6426|     85|    }
 6427|    332|    for (int j = 0; j < result->reserved_range_count(); j++) {
  ------------------
  |  Branch (6427:21): [True: 127, False: 205]
  ------------------
 6428|    127|      const Descriptor::ReservedRange* range = result->reserved_range(j);
 6429|    127|      if (range->start <= field->number() && field->number() < range->end) {
  ------------------
  |  Branch (6429:11): [True: 56, False: 71]
  |  Branch (6429:46): [True: 0, False: 56]
  ------------------
 6430|      0|        message_hints_[result].RequestHintOnFieldNumbers(
 6431|      0|            proto.reserved_range(j), DescriptorPool::ErrorCollector::NUMBER);
 6432|      0|        AddError(field->full_name(), proto.reserved_range(j),
 6433|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 6434|      0|                   return absl::Substitute(
 6435|      0|                       "Field \"$0\" uses reserved number $1.", field->name(),
 6436|      0|                       field->number());
 6437|      0|                 });
 6438|      0|      }
 6439|    127|    }
 6440|    205|    if (reserved_name_set.contains(field->name())) {
  ------------------
  |  Branch (6440:9): [True: 0, False: 205]
  ------------------
 6441|      0|      AddError(field->full_name(), proto.field(i),
 6442|      0|               DescriptorPool::ErrorCollector::NAME, [&] {
 6443|      0|                 return absl::Substitute("Field name \"$0\" is reserved.",
 6444|      0|                                         field->name());
 6445|      0|               });
 6446|      0|    }
 6447|    205|  }
 6448|       |
 6449|       |  // Check that extension ranges don't overlap and don't include
 6450|       |  // reserved field numbers or names.
 6451|     59|  for (int i = 0; i < result->extension_range_count(); i++) {
  ------------------
  |  Branch (6451:19): [True: 14, False: 45]
  ------------------
 6452|     14|    const Descriptor::ExtensionRange* range1 = result->extension_range(i);
 6453|     27|    for (int j = 0; j < result->reserved_range_count(); j++) {
  ------------------
  |  Branch (6453:21): [True: 13, False: 14]
  ------------------
 6454|     13|      const Descriptor::ReservedRange* range2 = result->reserved_range(j);
 6455|     13|      if (range1->end_number() > range2->start &&
  ------------------
  |  Branch (6455:11): [True: 13, False: 0]
  ------------------
 6456|     13|          range2->end > range1->start_number()) {
  ------------------
  |  Branch (6456:11): [True: 0, False: 13]
  ------------------
 6457|      0|        AddError(result->full_name(), proto.extension_range(i),
 6458|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 6459|      0|                   return absl::Substitute(
 6460|      0|                       "Extension range $0 to $1 overlaps with "
 6461|      0|                       "reserved range $2 to $3.",
 6462|      0|                       range1->start_number(), range1->end_number() - 1,
 6463|      0|                       range2->start, range2->end - 1);
 6464|      0|                 });
 6465|      0|      }
 6466|     13|    }
 6467|     17|    for (int j = i + 1; j < result->extension_range_count(); j++) {
  ------------------
  |  Branch (6467:25): [True: 3, False: 14]
  ------------------
 6468|      3|      const Descriptor::ExtensionRange* range2 = result->extension_range(j);
 6469|      3|      if (range1->end_number() > range2->start_number() &&
  ------------------
  |  Branch (6469:11): [True: 0, False: 3]
  ------------------
 6470|      0|          range2->end_number() > range1->start_number()) {
  ------------------
  |  Branch (6470:11): [True: 0, False: 0]
  ------------------
 6471|      0|        AddError(result->full_name(), proto.extension_range(i),
 6472|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 6473|      0|                   return absl::Substitute(
 6474|      0|                       "Extension range $0 to $1 overlaps with "
 6475|      0|                       "already-defined range $2 to $3.",
 6476|      0|                       range2->start_number(), range2->end_number() - 1,
 6477|      0|                       range1->start_number(), range1->end_number() - 1);
 6478|      0|                 });
 6479|      0|      }
 6480|      3|    }
 6481|     14|  }
 6482|     45|}
_ZN6google8protobuf17DescriptorBuilder21BuildFieldOrExtensionERKNS0_20FieldDescriptorProtoEPNS0_10DescriptorEPNS0_15FieldDescriptorEbRNS0_8internal13FlatAllocatorE:
 6585|    206|                                              internal::FlatAllocator& alloc) {
 6586|    206|  const absl::string_view scope =
 6587|    206|      (parent == nullptr) ? file_->package() : parent->full_name();
  ------------------
  |  Branch (6587:7): [True: 1, False: 205]
  ------------------
 6588|       |
 6589|       |  // We allocate all names in a single array, and dedup them.
 6590|       |  // We remember the indices for the potentially deduped values.
 6591|    206|  auto all_names = alloc.AllocateFieldNames(
 6592|    206|      proto.name(), scope,
 6593|    206|      proto.has_json_name() ? &proto.json_name() : nullptr);
  ------------------
  |  Branch (6593:7): [True: 0, False: 206]
  ------------------
 6594|    206|  result->all_names_ = all_names.array;
 6595|    206|  result->lowercase_name_index_ = all_names.lowercase_index;
 6596|    206|  result->camelcase_name_index_ = all_names.camelcase_index;
 6597|    206|  result->json_name_index_ = all_names.json_index;
 6598|       |
 6599|    206|  ValidateSymbolName(proto.name(), result->full_name(), proto);
 6600|       |
 6601|    206|  result->file_ = file_;
 6602|    206|  result->number_ = proto.number();
 6603|    206|  result->is_extension_ = is_extension;
 6604|    206|  result->is_oneof_ = false;
 6605|    206|  result->in_real_oneof_ = false;
 6606|    206|  result->proto3_optional_ = proto.proto3_optional();
 6607|       |
 6608|    206|  if (proto.proto3_optional() && file_->edition() != Edition::EDITION_PROTO3) {
  ------------------
  |  Branch (6608:7): [True: 0, False: 206]
  |  Branch (6608:34): [True: 0, False: 0]
  ------------------
 6609|      0|    AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::TYPE,
 6610|      0|             [&] {
 6611|      0|               return absl::StrCat(
 6612|      0|                   "The [proto3_optional=true] option may only be set on proto3"
 6613|      0|                   "fields, not ",
 6614|      0|                   result->full_name());
 6615|      0|             });
 6616|      0|  }
 6617|       |
 6618|    206|  result->has_json_name_ = proto.has_json_name();
 6619|       |
 6620|    206|  result->type_ = proto.type();
 6621|    206|  result->label_ = proto.label();
 6622|    206|  result->is_repeated_ = result->label_ == FieldDescriptor::LABEL_REPEATED;
 6623|       |
 6624|    206|  if (result->label() == FieldDescriptor::LABEL_REQUIRED) {
  ------------------
  |  Branch (6624:7): [True: 2, False: 204]
  ------------------
 6625|       |    // An extension cannot have a required field (b/13365836).
 6626|      2|    if (result->is_extension_) {
  ------------------
  |  Branch (6626:9): [True: 0, False: 2]
  ------------------
 6627|      0|      AddError(result->full_name(), proto,
 6628|       |               // Error location `TYPE`: we would really like to indicate
 6629|       |               // `LABEL`, but the `ErrorLocation` enum has no entry for this,
 6630|       |               // and we don't necessarily know about all implementations of the
 6631|       |               // `ErrorCollector` interface to extend them to handle the new
 6632|       |               // error location type properly.
 6633|      0|               DescriptorPool::ErrorCollector::TYPE, [&] {
 6634|      0|                 return absl::StrCat("The extension ", result->full_name(),
 6635|      0|                                     " cannot be required.");
 6636|      0|               });
 6637|      0|    }
 6638|      2|  }
 6639|       |
 6640|       |  // Some of these may be filled in when cross-linking.
 6641|    206|  result->containing_type_ = nullptr;
 6642|    206|  result->type_once_ = nullptr;
 6643|    206|  result->default_value_enum_ = nullptr;
 6644|       |
 6645|    206|  result->has_default_value_ = proto.has_default_value();
 6646|    206|  if (proto.has_default_value() && result->is_repeated()) {
  ------------------
  |  Branch (6646:7): [True: 27, False: 179]
  |  Branch (6646:36): [True: 0, False: 27]
  ------------------
 6647|      0|    AddError(result->full_name(), proto,
 6648|      0|             DescriptorPool::ErrorCollector::DEFAULT_VALUE,
 6649|      0|             "Repeated fields can't have default values.");
 6650|      0|  }
 6651|       |
 6652|    206|  if (proto.has_type()) {
  ------------------
  |  Branch (6652:7): [True: 206, False: 0]
  ------------------
 6653|    206|    if (proto.has_default_value()) {
  ------------------
  |  Branch (6653:9): [True: 27, False: 179]
  ------------------
 6654|     27|      char* end_pos = nullptr;
 6655|     27|      switch (result->cpp_type()) {
  ------------------
  |  Branch (6655:15): [True: 27, False: 0]
  ------------------
 6656|      0|        case FieldDescriptor::CPPTYPE_INT32:
  ------------------
  |  Branch (6656:9): [True: 0, False: 27]
  ------------------
 6657|      0|          result->default_value_int32_t_ =
 6658|      0|              std::strtol(proto.default_value().c_str(), &end_pos, 0);
 6659|      0|          break;
 6660|      0|        case FieldDescriptor::CPPTYPE_INT64:
  ------------------
  |  Branch (6660:9): [True: 0, False: 27]
  ------------------
 6661|      0|          static_assert(sizeof(int64_t) == sizeof(long long),  // NOLINT
 6662|      0|                        "sizeof int64_t is not sizeof long long");
 6663|      0|          result->default_value_int64_t_ =
 6664|      0|              std::strtoll(proto.default_value().c_str(), &end_pos, 0);
 6665|      0|          break;
 6666|      0|        case FieldDescriptor::CPPTYPE_UINT32:
  ------------------
  |  Branch (6666:9): [True: 0, False: 27]
  ------------------
 6667|      0|          result->default_value_uint32_t_ =
 6668|      0|              std::strtoul(proto.default_value().c_str(), &end_pos, 0);
 6669|      0|          break;
 6670|      0|        case FieldDescriptor::CPPTYPE_UINT64:
  ------------------
  |  Branch (6670:9): [True: 0, False: 27]
  ------------------
 6671|      0|          static_assert(
 6672|      0|              sizeof(uint64_t) == sizeof(unsigned long long),  // NOLINT
 6673|      0|              "sizeof uint64_t is not sizeof unsigned long long");
 6674|      0|          result->default_value_uint64_t_ =
 6675|      0|              std::strtoull(proto.default_value().c_str(), &end_pos, 0);
 6676|      0|          break;
 6677|      0|        case FieldDescriptor::CPPTYPE_FLOAT:
  ------------------
  |  Branch (6677:9): [True: 0, False: 27]
  ------------------
 6678|      0|          if (proto.default_value() == "inf") {
  ------------------
  |  Branch (6678:15): [True: 0, False: 0]
  ------------------
 6679|      0|            result->default_value_float_ =
 6680|      0|                std::numeric_limits<float>::infinity();
 6681|      0|          } else if (proto.default_value() == "-inf") {
  ------------------
  |  Branch (6681:22): [True: 0, False: 0]
  ------------------
 6682|      0|            result->default_value_float_ =
 6683|      0|                -std::numeric_limits<float>::infinity();
 6684|      0|          } else if (proto.default_value() == "nan") {
  ------------------
  |  Branch (6684:22): [True: 0, False: 0]
  ------------------
 6685|      0|            result->default_value_float_ =
 6686|      0|                std::numeric_limits<float>::quiet_NaN();
 6687|      0|          } else {
 6688|      0|            result->default_value_float_ = io::SafeDoubleToFloat(
 6689|      0|                io::NoLocaleStrtod(proto.default_value().c_str(), &end_pos));
 6690|      0|          }
 6691|      0|          break;
 6692|      0|        case FieldDescriptor::CPPTYPE_DOUBLE:
  ------------------
  |  Branch (6692:9): [True: 0, False: 27]
  ------------------
 6693|      0|          if (proto.default_value() == "inf") {
  ------------------
  |  Branch (6693:15): [True: 0, False: 0]
  ------------------
 6694|      0|            result->default_value_double_ =
 6695|      0|                std::numeric_limits<double>::infinity();
 6696|      0|          } else if (proto.default_value() == "-inf") {
  ------------------
  |  Branch (6696:22): [True: 0, False: 0]
  ------------------
 6697|      0|            result->default_value_double_ =
 6698|      0|                -std::numeric_limits<double>::infinity();
 6699|      0|          } else if (proto.default_value() == "nan") {
  ------------------
  |  Branch (6699:22): [True: 0, False: 0]
  ------------------
 6700|      0|            result->default_value_double_ =
 6701|      0|                std::numeric_limits<double>::quiet_NaN();
 6702|      0|          } else {
 6703|      0|            result->default_value_double_ =
 6704|      0|                io::NoLocaleStrtod(proto.default_value().c_str(), &end_pos);
 6705|      0|          }
 6706|      0|          break;
 6707|     22|        case FieldDescriptor::CPPTYPE_BOOL:
  ------------------
  |  Branch (6707:9): [True: 22, False: 5]
  ------------------
 6708|     22|          if (proto.default_value() == "true") {
  ------------------
  |  Branch (6708:15): [True: 1, False: 21]
  ------------------
 6709|      1|            result->default_value_bool_ = true;
 6710|     21|          } else if (proto.default_value() == "false") {
  ------------------
  |  Branch (6710:22): [True: 21, False: 0]
  ------------------
 6711|     21|            result->default_value_bool_ = false;
 6712|     21|          } else {
 6713|      0|            AddError(result->full_name(), proto,
 6714|      0|                     DescriptorPool::ErrorCollector::DEFAULT_VALUE,
 6715|      0|                     "Boolean default must be true or false.");
 6716|      0|          }
 6717|     22|          break;
 6718|      5|        case FieldDescriptor::CPPTYPE_ENUM:
  ------------------
  |  Branch (6718:9): [True: 5, False: 22]
  ------------------
 6719|       |          // This will be filled in when cross-linking.
 6720|      5|          result->default_value_enum_ = nullptr;
 6721|      5|          break;
 6722|      0|        case FieldDescriptor::CPPTYPE_STRING:
  ------------------
  |  Branch (6722:9): [True: 0, False: 27]
  ------------------
 6723|      0|          if (result->type() == FieldDescriptor::TYPE_BYTES) {
  ------------------
  |  Branch (6723:15): [True: 0, False: 0]
  ------------------
 6724|      0|            std::string value;
 6725|      0|            if (absl::CUnescape(proto.default_value(), &value)) {
  ------------------
  |  Branch (6725:17): [True: 0, False: 0]
  ------------------
 6726|      0|              result->default_value_string_ = alloc.AllocateStrings(value);
 6727|      0|            } else {
 6728|      0|              AddError(result->full_name(), proto,
 6729|      0|                       DescriptorPool::ErrorCollector::DEFAULT_VALUE,
 6730|      0|                       "Invalid escaping in default value.");
 6731|      0|            }
 6732|      0|          } else {
 6733|      0|            result->default_value_string_ =
 6734|      0|                alloc.AllocateStrings(proto.default_value());
 6735|      0|          }
 6736|      0|          break;
 6737|      0|        case FieldDescriptor::CPPTYPE_MESSAGE:
  ------------------
  |  Branch (6737:9): [True: 0, False: 27]
  ------------------
 6738|      0|          AddError(result->full_name(), proto,
 6739|      0|                   DescriptorPool::ErrorCollector::DEFAULT_VALUE,
 6740|      0|                   "Messages can't have default values.");
 6741|      0|          result->has_default_value_ = false;
 6742|      0|          result->default_generated_instance_ = nullptr;
 6743|      0|          break;
 6744|     27|      }
 6745|       |
 6746|     27|      if (end_pos != nullptr) {
  ------------------
  |  Branch (6746:11): [True: 0, False: 27]
  ------------------
 6747|       |        // end_pos is only set non-null by the parsers for numeric types,
 6748|       |        // above. This checks that the default was non-empty and had no extra
 6749|       |        // junk after the end of the number.
 6750|      0|        if (proto.default_value().empty() || *end_pos != '\0') {
  ------------------
  |  Branch (6750:13): [True: 0, False: 0]
  |  Branch (6750:46): [True: 0, False: 0]
  ------------------
 6751|      0|          AddError(result->full_name(), proto,
 6752|      0|                   DescriptorPool::ErrorCollector::DEFAULT_VALUE, [&] {
 6753|      0|                     return absl::StrCat("Couldn't parse default value \"",
 6754|      0|                                         proto.default_value(), "\".");
 6755|      0|                   });
 6756|      0|        }
 6757|      0|      }
 6758|    179|    } else {
 6759|       |      // No explicit default value
 6760|    179|      switch (result->cpp_type()) {
  ------------------
  |  Branch (6760:15): [True: 179, False: 0]
  ------------------
 6761|     17|        case FieldDescriptor::CPPTYPE_INT32:
  ------------------
  |  Branch (6761:9): [True: 17, False: 162]
  ------------------
 6762|     17|          result->default_value_int32_t_ = 0;
 6763|     17|          break;
 6764|      1|        case FieldDescriptor::CPPTYPE_INT64:
  ------------------
  |  Branch (6764:9): [True: 1, False: 178]
  ------------------
 6765|      1|          result->default_value_int64_t_ = 0;
 6766|      1|          break;
 6767|      1|        case FieldDescriptor::CPPTYPE_UINT32:
  ------------------
  |  Branch (6767:9): [True: 1, False: 178]
  ------------------
 6768|      1|          result->default_value_uint32_t_ = 0;
 6769|      1|          break;
 6770|      1|        case FieldDescriptor::CPPTYPE_UINT64:
  ------------------
  |  Branch (6770:9): [True: 1, False: 178]
  ------------------
 6771|      1|          result->default_value_uint64_t_ = 0;
 6772|      1|          break;
 6773|      0|        case FieldDescriptor::CPPTYPE_FLOAT:
  ------------------
  |  Branch (6773:9): [True: 0, False: 179]
  ------------------
 6774|      0|          result->default_value_float_ = 0.0f;
 6775|      0|          break;
 6776|      1|        case FieldDescriptor::CPPTYPE_DOUBLE:
  ------------------
  |  Branch (6776:9): [True: 1, False: 178]
  ------------------
 6777|      1|          result->default_value_double_ = 0.0;
 6778|      1|          break;
 6779|     14|        case FieldDescriptor::CPPTYPE_BOOL:
  ------------------
  |  Branch (6779:9): [True: 14, False: 165]
  ------------------
 6780|     14|          result->default_value_bool_ = false;
 6781|     14|          break;
 6782|     20|        case FieldDescriptor::CPPTYPE_ENUM:
  ------------------
  |  Branch (6782:9): [True: 20, False: 159]
  ------------------
 6783|       |          // This will be filled in when cross-linking.
 6784|     20|          result->default_value_enum_ = nullptr;
 6785|     20|          break;
 6786|     57|        case FieldDescriptor::CPPTYPE_STRING:
  ------------------
  |  Branch (6786:9): [True: 57, False: 122]
  ------------------
 6787|     57|          result->default_value_string_ = &internal::GetEmptyString();
 6788|     57|          break;
 6789|     67|        case FieldDescriptor::CPPTYPE_MESSAGE:
  ------------------
  |  Branch (6789:9): [True: 67, False: 112]
  ------------------
 6790|     67|          result->default_generated_instance_ = nullptr;
 6791|     67|          break;
 6792|    179|      }
 6793|    179|    }
 6794|    206|  }
 6795|       |
 6796|    206|  if (result->number() <= 0) {
  ------------------
  |  Branch (6796:7): [True: 0, False: 206]
  ------------------
 6797|      0|    message_hints_[parent].RequestHintOnFieldNumbers(
 6798|      0|        proto, DescriptorPool::ErrorCollector::NUMBER);
 6799|      0|    AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6800|      0|             "Field numbers must be positive integers.");
 6801|    206|  } else if (!is_extension && result->number() > FieldDescriptor::kMaxNumber) {
  ------------------
  |  Branch (6801:14): [True: 205, False: 1]
  |  Branch (6801:31): [True: 0, False: 205]
  ------------------
 6802|       |    // Only validate that the number is within the valid field range if it is
 6803|       |    // not an extension. Since extension numbers are validated with the
 6804|       |    // extendee's valid set of extension numbers, and those are in turn
 6805|       |    // validated against the max allowed number, the check is unnecessary for
 6806|       |    // extension fields.
 6807|       |    // This avoids cross-linking issues that arise when attempting to check if
 6808|       |    // the extendee is a message_set_wire_format message, which has a higher max
 6809|       |    // on extension numbers.
 6810|      0|    message_hints_[parent].RequestHintOnFieldNumbers(
 6811|      0|        proto, DescriptorPool::ErrorCollector::NUMBER);
 6812|      0|    AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6813|      0|             [&] {
 6814|      0|               return absl::Substitute(
 6815|      0|                   "Field numbers cannot be greater than $0.",
 6816|      0|                   FieldDescriptor::kMaxNumber);
 6817|      0|             });
 6818|      0|  }
 6819|       |
 6820|    206|  if (is_extension) {
  ------------------
  |  Branch (6820:7): [True: 1, False: 205]
  ------------------
 6821|      1|    if (!proto.has_extendee()) {
  ------------------
  |  Branch (6821:9): [True: 0, False: 1]
  ------------------
 6822|      0|      AddError(result->full_name(), proto,
 6823|      0|               DescriptorPool::ErrorCollector::EXTENDEE,
 6824|      0|               "FieldDescriptorProto.extendee not set for extension field.");
 6825|      0|    }
 6826|       |
 6827|      1|    result->scope_.extension_scope = parent;
 6828|       |
 6829|      1|    if (proto.has_oneof_index()) {
  ------------------
  |  Branch (6829:9): [True: 0, False: 1]
  ------------------
 6830|      0|      AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::TYPE,
 6831|      0|               "FieldDescriptorProto.oneof_index should not be set for "
 6832|      0|               "extensions.");
 6833|      0|    }
 6834|    205|  } else {
 6835|    205|    if (proto.has_extendee()) {
  ------------------
  |  Branch (6835:9): [True: 0, False: 205]
  ------------------
 6836|      0|      AddError(result->full_name(), proto,
 6837|      0|               DescriptorPool::ErrorCollector::EXTENDEE,
 6838|      0|               "FieldDescriptorProto.extendee set for non-extension field.");
 6839|      0|    }
 6840|       |
 6841|    205|    result->containing_type_ = parent;
 6842|       |
 6843|    205|    if (proto.has_oneof_index()) {
  ------------------
  |  Branch (6843:9): [True: 7, False: 198]
  ------------------
 6844|      7|      if (proto.oneof_index() < 0 ||
  ------------------
  |  Branch (6844:11): [True: 0, False: 7]
  ------------------
 6845|      7|          proto.oneof_index() >= parent->oneof_decl_count()) {
  ------------------
  |  Branch (6845:11): [True: 0, False: 7]
  ------------------
 6846|      0|        AddError(result->full_name(), proto,
 6847|      0|                 DescriptorPool::ErrorCollector::TYPE, [&] {
 6848|      0|                   return absl::Substitute(
 6849|      0|                       "FieldDescriptorProto.oneof_index $0 is "
 6850|      0|                       "out of range for type \"$1\".",
 6851|      0|                       proto.oneof_index(), parent->name());
 6852|      0|                 });
 6853|      7|      } else {
 6854|      7|        result->is_oneof_ = true;
 6855|      7|        result->scope_.containing_oneof =
 6856|      7|            parent->oneof_decl(proto.oneof_index());
 6857|      7|        result->in_real_oneof_ = !result->proto3_optional_;
 6858|      7|      }
 6859|      7|    }
 6860|    205|  }
 6861|       |
 6862|       |  // Copy options.
 6863|    206|  AllocateOptions(proto, result, FieldDescriptorProto::kOptionsFieldNumber,
 6864|    206|                  "google.protobuf.FieldOptions", alloc);
 6865|       |
 6866|    206|  AddSymbol(result->full_name(), parent, result->name(), proto, Symbol(result));
 6867|    206|}
_ZN6google8protobuf17DescriptorBuilder19BuildExtensionRangeERKNS0_30DescriptorProto_ExtensionRangeEPKNS0_10DescriptorEPNS5_14ExtensionRangeERNS0_8internal13FlatAllocatorE:
 6871|     14|    Descriptor::ExtensionRange* result, internal::FlatAllocator& alloc) {
 6872|     14|  result->start_ = proto.start();
 6873|     14|  result->end_ = proto.end();
 6874|     14|  result->containing_type_ = parent;
 6875|       |
 6876|     14|  if (result->start_number() <= 0) {
  ------------------
  |  Branch (6876:7): [True: 0, False: 14]
  ------------------
 6877|      0|    message_hints_[parent].RequestHintOnFieldNumbers(
 6878|      0|        proto, DescriptorPool::ErrorCollector::NUMBER, result->start_number(),
 6879|      0|        result->end_number());
 6880|      0|    AddError(parent->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6881|      0|             "Extension numbers must be positive integers.");
 6882|      0|  }
 6883|       |
 6884|       |  // Checking of the upper bound of the extension range is deferred until after
 6885|       |  // options interpreting. This allows messages with message_set_wire_format to
 6886|       |  // have extensions beyond FieldDescriptor::kMaxNumber, since the extension
 6887|       |  // numbers are actually used as int32s in the message_set_wire_format.
 6888|       |
 6889|     14|  if (result->start_number() >= result->end_number()) {
  ------------------
  |  Branch (6889:7): [True: 0, False: 14]
  ------------------
 6890|      0|    AddError(parent->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6891|      0|             "Extension range end number must be greater than start number.");
 6892|      0|  }
 6893|       |
 6894|       |  // Copy options
 6895|     14|  AllocateOptions(proto, result,
 6896|     14|                  DescriptorProto_ExtensionRange::kOptionsFieldNumber,
 6897|     14|                  "google.protobuf.ExtensionRangeOptions", alloc);
 6898|     14|}
_ZN6google8protobuf17DescriptorBuilder18BuildReservedRangeERKNS0_29DescriptorProto_ReservedRangeEPKNS0_10DescriptorEPNS5_13ReservedRangeERNS0_8internal13FlatAllocatorE:
 6902|     14|    Descriptor::ReservedRange* result, internal::FlatAllocator&) {
 6903|     14|  result->start = proto.start();
 6904|     14|  result->end = proto.end();
 6905|     14|  if (result->start <= 0) {
  ------------------
  |  Branch (6905:7): [True: 0, False: 14]
  ------------------
 6906|      0|    message_hints_[parent].RequestHintOnFieldNumbers(
 6907|      0|        proto, DescriptorPool::ErrorCollector::NUMBER, result->start,
 6908|      0|        result->end);
 6909|      0|    AddError(parent->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6910|      0|             "Reserved numbers must be positive integers.");
 6911|      0|  }
 6912|     14|  if (result->start >= result->end) {
  ------------------
  |  Branch (6912:7): [True: 0, False: 14]
  ------------------
 6913|      0|    AddError(parent->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6914|      0|             "Reserved range end number must be greater than start number.");
 6915|      0|  }
 6916|     14|}
_ZN6google8protobuf17DescriptorBuilder18BuildReservedRangeERKNS0_37EnumDescriptorProto_EnumReservedRangeEPKNS0_14EnumDescriptorEPNS5_13ReservedRangeERNS0_8internal13FlatAllocatorE:
 6921|      1|    internal::FlatAllocator&) {
 6922|      1|  result->start = proto.start();
 6923|      1|  result->end = proto.end();
 6924|       |
 6925|      1|  if (result->start > result->end) {
  ------------------
  |  Branch (6925:7): [True: 0, False: 1]
  ------------------
 6926|      0|    AddError(parent->full_name(), proto, DescriptorPool::ErrorCollector::NUMBER,
 6927|      0|             "Reserved range end number must be greater than start number.");
 6928|      0|  }
 6929|      1|}
_ZN6google8protobuf17DescriptorBuilder10BuildOneofERKNS0_20OneofDescriptorProtoEPNS0_10DescriptorEPNS0_15OneofDescriptorERNS0_8internal13FlatAllocatorE:
 6933|      2|                                   internal::FlatAllocator& alloc) {
 6934|      2|  result->all_names_ =
 6935|      2|      AllocateNameStrings(parent->full_name(), proto.name(), alloc);
 6936|      2|  ValidateSymbolName(proto.name(), result->full_name(), proto);
 6937|       |
 6938|      2|  result->containing_type_ = parent;
 6939|       |
 6940|       |  // We need to fill these in later.
 6941|      2|  result->field_count_ = 0;
 6942|      2|  result->fields_ = nullptr;
 6943|       |
 6944|       |  // Copy options.
 6945|      2|  AllocateOptions(proto, result, OneofDescriptorProto::kOptionsFieldNumber,
 6946|      2|                  "google.protobuf.OneofOptions", alloc);
 6947|       |
 6948|      2|  AddSymbol(result->full_name(), parent, result->name(), proto, Symbol(result));
 6949|      2|}
_ZN6google8protobuf17DescriptorBuilder9BuildEnumERKNS0_19EnumDescriptorProtoEPKNS0_10DescriptorEPNS0_14EnumDescriptorERNS0_8internal13FlatAllocatorE:
 7021|     18|                                  internal::FlatAllocator& alloc) {
 7022|     18|  const absl::string_view scope =
 7023|     18|      (parent == nullptr) ? file_->package() : parent->full_name();
  ------------------
  |  Branch (7023:7): [True: 1, False: 17]
  ------------------
 7024|       |
 7025|     18|  result->all_names_ = AllocateNameStrings(scope, proto.name(), alloc);
 7026|     18|  ValidateSymbolName(proto.name(), result->full_name(), proto);
 7027|     18|  result->file_ = file_;
 7028|     18|  result->containing_type_ = parent;
 7029|     18|  result->is_placeholder_ = false;
 7030|     18|  result->is_unqualified_placeholder_ = false;
 7031|       |
 7032|     18|  if (proto.value_size() == 0) {
  ------------------
  |  Branch (7032:7): [True: 0, False: 18]
  ------------------
 7033|       |    // We cannot allow enums with no values because this would mean there
 7034|       |    // would be no valid default value for fields of this type.
 7035|      0|    AddError(result->full_name(), proto, DescriptorPool::ErrorCollector::NAME,
 7036|      0|             "Enums must contain at least one value.");
 7037|      0|  }
 7038|       |
 7039|       |  // Calculate the continuous sequence of the labels.
 7040|       |  // These can be fast-path'd during lookup and don't need to be added to the
 7041|       |  // tables.
 7042|       |  // We use uint16_t to save space for sequential_value_limit_, so stop before
 7043|       |  // overflowing it. Worst case, we are not taking full advantage on huge
 7044|       |  // enums, but it is unlikely.
 7045|     18|  for (int i = 0;
 7046|     89|       i < std::numeric_limits<uint16_t>::max() && i < proto.value_size() &&
  ------------------
  |  Branch (7046:8): [True: 89, False: 0]
  |  Branch (7046:52): [True: 74, False: 15]
  ------------------
 7047|       |       // We do the math in int64_t to avoid overflows.
 7048|     74|       proto.value(i).number() ==
  ------------------
  |  Branch (7048:8): [True: 71, False: 3]
  ------------------
 7049|     74|           static_cast<int64_t>(i) + proto.value(0).number();
 7050|     71|       ++i) {
 7051|     71|    result->sequential_value_limit_ = i;
 7052|     71|  }
 7053|       |
 7054|     18|  BUILD_ARRAY(proto, result, value, BuildEnumValue, result);
  ------------------
  |  | 5627|     18|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     18|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     18|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     18|      INPUT.NAME##_size());                                            \
  |  | 5631|    104|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 86, False: 18]
  |  |  ------------------
  |  | 5632|     86|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|     86|  }
  ------------------
 7055|     18|  BUILD_ARRAY(proto, result, reserved_range, BuildReservedRange, result);
  ------------------
  |  | 5627|     18|  OUTPUT->NAME##_count_ = INPUT.NAME##_size();                         \
  |  | 5628|     18|  OUTPUT->NAME##s_ = alloc.AllocateArray<                              \
  |  | 5629|     18|      typename std::remove_pointer<decltype(OUTPUT->NAME##s_)>::type>( \
  |  | 5630|     18|      INPUT.NAME##_size());                                            \
  |  | 5631|     19|  for (int i = 0; i < INPUT.NAME##_size(); i++) {                      \
  |  |  ------------------
  |  |  |  Branch (5631:19): [True: 1, False: 18]
  |  |  ------------------
  |  | 5632|      1|    METHOD(INPUT.NAME(i), PARENT, OUTPUT->NAME##s_ + i, alloc);        \
  |  | 5633|      1|  }
  ------------------
 7056|       |
 7057|       |  // Copy reserved names.
 7058|     18|  int reserved_name_count = proto.reserved_name_size();
 7059|     18|  result->reserved_name_count_ = reserved_name_count;
 7060|     18|  result->reserved_names_ =
 7061|     18|      alloc.AllocateArray<const std::string*>(reserved_name_count);
 7062|     18|  for (int i = 0; i < reserved_name_count; ++i) {
  ------------------
  |  Branch (7062:19): [True: 0, False: 18]
  ------------------
 7063|      0|    result->reserved_names_[i] = alloc.AllocateStrings(proto.reserved_name(i));
 7064|      0|  }
 7065|       |
 7066|       |  // Copy options.
 7067|     18|  AllocateOptions(proto, result, EnumDescriptorProto::kOptionsFieldNumber,
 7068|     18|                  "google.protobuf.EnumOptions", alloc);
 7069|       |
 7070|     18|  AddSymbol(result->full_name(), parent, result->name(), proto, Symbol(result));
 7071|       |
 7072|     19|  for (int i = 0; i < proto.reserved_range_size(); i++) {
  ------------------
  |  Branch (7072:19): [True: 1, False: 18]
  ------------------
 7073|      1|    const EnumDescriptorProto_EnumReservedRange& range1 =
 7074|      1|        proto.reserved_range(i);
 7075|      1|    for (int j = i + 1; j < proto.reserved_range_size(); j++) {
  ------------------
  |  Branch (7075:25): [True: 0, False: 1]
  ------------------
 7076|      0|      const EnumDescriptorProto_EnumReservedRange& range2 =
 7077|      0|          proto.reserved_range(j);
 7078|      0|      if (range1.end() >= range2.start() && range2.end() >= range1.start()) {
  ------------------
  |  Branch (7078:11): [True: 0, False: 0]
  |  Branch (7078:45): [True: 0, False: 0]
  ------------------
 7079|      0|        AddError(result->full_name(), proto.reserved_range(i),
 7080|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 7081|      0|                   return absl::Substitute(
 7082|      0|                       "Reserved range $0 to $1 overlaps with "
 7083|      0|                       "already-defined range $2 to $3.",
 7084|      0|                       range2.start(), range2.end(), range1.start(),
 7085|      0|                       range1.end());
 7086|      0|                 });
 7087|      0|      }
 7088|      0|    }
 7089|      1|  }
 7090|       |
 7091|     18|  absl::flat_hash_set<absl::string_view> reserved_name_set;
 7092|     18|  for (const std::string& name : proto.reserved_name()) {
  ------------------
  |  Branch (7092:32): [True: 0, False: 18]
  ------------------
 7093|      0|    if (!reserved_name_set.insert(name).second) {
  ------------------
  |  Branch (7093:9): [True: 0, False: 0]
  ------------------
 7094|      0|      AddError(name, proto, DescriptorPool::ErrorCollector::NAME, [&] {
 7095|      0|        return absl::Substitute("Enum value \"$0\" is reserved multiple times.",
 7096|      0|                                name);
 7097|      0|      });
 7098|      0|    }
 7099|      0|  }
 7100|       |
 7101|    104|  for (int i = 0; i < result->value_count(); i++) {
  ------------------
  |  Branch (7101:19): [True: 86, False: 18]
  ------------------
 7102|     86|    const EnumValueDescriptor* value = result->value(i);
 7103|     89|    for (int j = 0; j < result->reserved_range_count(); j++) {
  ------------------
  |  Branch (7103:21): [True: 3, False: 86]
  ------------------
 7104|      3|      const EnumDescriptor::ReservedRange* range = result->reserved_range(j);
 7105|      3|      if (range->start <= value->number() && value->number() <= range->end) {
  ------------------
  |  Branch (7105:11): [True: 2, False: 1]
  |  Branch (7105:46): [True: 0, False: 2]
  ------------------
 7106|      0|        AddError(value->full_name(), proto.reserved_range(j),
 7107|      0|                 DescriptorPool::ErrorCollector::NUMBER, [&] {
 7108|      0|                   return absl::Substitute(
 7109|      0|                       "Enum value \"$0\" uses reserved number $1.",
 7110|      0|                       value->name(), value->number());
 7111|      0|                 });
 7112|      0|      }
 7113|      3|    }
 7114|     86|    if (reserved_name_set.contains(value->name())) {
  ------------------
  |  Branch (7114:9): [True: 0, False: 86]
  ------------------
 7115|      0|      AddError(value->full_name(), proto.value(i),
 7116|      0|               DescriptorPool::ErrorCollector::NAME, [&] {
 7117|      0|                 return absl::Substitute("Enum value \"$0\" is reserved.",
 7118|      0|                                         value->name());
 7119|      0|               });
 7120|      0|    }
 7121|     86|  }
 7122|     18|}
_ZN6google8protobuf17DescriptorBuilder14BuildEnumValueERKNS0_24EnumValueDescriptorProtoEPKNS0_14EnumDescriptorEPNS0_19EnumValueDescriptorERNS0_8internal13FlatAllocatorE:
 7127|     86|                                       internal::FlatAllocator& alloc) {
 7128|       |  // Note:  full_name for enum values is a sibling to the parent's name, not a
 7129|       |  //   child of it.
 7130|     86|  std::string full_name;
 7131|     86|  size_t scope_len = parent->full_name().size() - parent->name().size();
 7132|     86|  full_name.reserve(scope_len + proto.name().size());
 7133|     86|  full_name.append(parent->full_name().data(), scope_len);
 7134|     86|  full_name.append(proto.name());
 7135|       |
 7136|     86|  result->all_names_ =
 7137|     86|      alloc.AllocateStrings(proto.name(), std::move(full_name));
 7138|     86|  result->number_ = proto.number();
 7139|     86|  result->type_ = parent;
 7140|       |
 7141|     86|  ValidateSymbolName(proto.name(), result->full_name(), proto);
 7142|       |
 7143|       |  // Copy options.
 7144|     86|  AllocateOptions(proto, result, EnumValueDescriptorProto::kOptionsFieldNumber,
 7145|     86|                  "google.protobuf.EnumValueOptions", alloc);
 7146|       |
 7147|       |  // Again, enum values are weird because we makes them appear as siblings
 7148|       |  // of the enum type instead of children of it.  So, we use
 7149|       |  // parent->containing_type() as the value's parent.
 7150|     86|  bool added_to_outer_scope =
 7151|     86|      AddSymbol(result->full_name(), parent->containing_type(), result->name(),
 7152|     86|                proto, Symbol::EnumValue(result, 0));
 7153|       |
 7154|       |  // However, we also want to be able to search for values within a single
 7155|       |  // enum type, so we add it as a child of the enum type itself, too.
 7156|       |  // Note:  This could fail, but if it does, the error has already been
 7157|       |  //   reported by the above AddSymbol() call, so we ignore the return code.
 7158|     86|  bool added_to_inner_scope = file_tables_->AddAliasUnderParent(
 7159|     86|      parent, result->name(), Symbol::EnumValue(result, 1));
 7160|       |
 7161|     86|  if (added_to_inner_scope && !added_to_outer_scope) {
  ------------------
  |  Branch (7161:7): [True: 86, False: 0]
  |  Branch (7161:31): [True: 0, False: 86]
  ------------------
 7162|       |    // This value did not conflict with any values defined in the same enum,
 7163|       |    // but it did conflict with some other symbol defined in the enum type's
 7164|       |    // scope.  Let's print an additional error to explain this.
 7165|      0|    std::string outer_scope;
 7166|      0|    if (parent->containing_type() == nullptr) {
  ------------------
  |  Branch (7166:9): [True: 0, False: 0]
  ------------------
 7167|      0|      outer_scope = file_->package();
 7168|      0|    } else {
 7169|      0|      outer_scope = parent->containing_type()->full_name();
 7170|      0|    }
 7171|       |
 7172|      0|    if (outer_scope.empty()) {
  ------------------
  |  Branch (7172:9): [True: 0, False: 0]
  ------------------
 7173|      0|      outer_scope = "the global scope";
 7174|      0|    } else {
 7175|      0|      outer_scope = absl::StrCat("\"", outer_scope, "\"");
 7176|      0|    }
 7177|       |
 7178|      0|    AddError(
 7179|      0|        result->full_name(), proto, DescriptorPool::ErrorCollector::NAME, [&] {
 7180|      0|          return absl::StrCat(
 7181|      0|              "Note that enum values use C++ scoping rules, meaning that "
 7182|      0|              "enum values are siblings of their type, not children of it.  "
 7183|      0|              "Therefore, \"",
 7184|      0|              result->name(), "\" must be unique within ", outer_scope,
 7185|      0|              ", not just within \"", parent->name(), "\".");
 7186|      0|        });
 7187|      0|  }
 7188|       |
 7189|       |  // An enum is allowed to define two numbers that refer to the same value.
 7190|       |  // FindValueByNumber() should return the first such value, so we simply
 7191|       |  // ignore AddEnumValueByNumber()'s return code.
 7192|     86|  file_tables_->AddEnumValueByNumber(result);
 7193|     86|}
_ZN6google8protobuf17DescriptorBuilder13CrossLinkFileEPNS0_14FileDescriptorERKNS0_19FileDescriptorProtoE:
 7243|      4|                                      const FileDescriptorProto& proto) {
 7244|     39|  for (int i = 0; i < file->message_type_count(); i++) {
  ------------------
  |  Branch (7244:19): [True: 35, False: 4]
  ------------------
 7245|     35|    CrossLinkMessage(&file->message_types_[i], proto.message_type(i));
 7246|     35|  }
 7247|       |
 7248|      5|  for (int i = 0; i < file->extension_count(); i++) {
  ------------------
  |  Branch (7248:19): [True: 1, False: 4]
  ------------------
 7249|      1|    CrossLinkField(&file->extensions_[i], proto.extension(i));
 7250|      1|  }
 7251|       |
 7252|      4|  for (int i = 0; i < file->service_count(); i++) {
  ------------------
  |  Branch (7252:19): [True: 0, False: 4]
  ------------------
 7253|      0|    CrossLinkService(&file->services_[i], proto.service(i));
 7254|      0|  }
 7255|      4|}
_ZN6google8protobuf17DescriptorBuilder16CrossLinkMessageEPNS0_10DescriptorERKNS0_15DescriptorProtoE:
 7258|     45|                                         const DescriptorProto& proto) {
 7259|     55|  for (int i = 0; i < message->nested_type_count(); i++) {
  ------------------
  |  Branch (7259:19): [True: 10, False: 45]
  ------------------
 7260|     10|    CrossLinkMessage(&message->nested_types_[i], proto.nested_type(i));
 7261|     10|  }
 7262|       |
 7263|    250|  for (int i = 0; i < message->field_count(); i++) {
  ------------------
  |  Branch (7263:19): [True: 205, False: 45]
  ------------------
 7264|    205|    CrossLinkField(&message->fields_[i], proto.field(i));
 7265|    205|  }
 7266|       |
 7267|     45|  for (int i = 0; i < message->extension_count(); i++) {
  ------------------
  |  Branch (7267:19): [True: 0, False: 45]
  ------------------
 7268|      0|    CrossLinkField(&message->extensions_[i], proto.extension(i));
 7269|      0|  }
 7270|       |
 7271|       |  // Set up field array for each oneof.
 7272|       |
 7273|       |  // First count the number of fields per oneof.
 7274|    250|  for (int i = 0; i < message->field_count(); i++) {
  ------------------
  |  Branch (7274:19): [True: 205, False: 45]
  ------------------
 7275|    205|    const OneofDescriptor* oneof_decl = message->field(i)->containing_oneof();
 7276|    205|    if (oneof_decl != nullptr) {
  ------------------
  |  Branch (7276:9): [True: 7, False: 198]
  ------------------
 7277|       |      // Make sure fields belonging to the same oneof are defined consecutively.
 7278|       |      // This enables optimizations in codegens and reflection libraries to
 7279|       |      // skip fields in the oneof group, as only one of the field can be set.
 7280|       |      // Note that field_count() returns how many fields in this oneof we have
 7281|       |      // seen so far. field_count() > 0 guarantees that i > 0, so field(i-1) is
 7282|       |      // safe.
 7283|      7|      if (oneof_decl->field_count() > 0 &&
  ------------------
  |  Branch (7283:11): [True: 5, False: 2]
  ------------------
 7284|      5|          message->field(i - 1)->containing_oneof() != oneof_decl) {
  ------------------
  |  Branch (7284:11): [True: 0, False: 5]
  ------------------
 7285|      0|        AddError(
 7286|      0|            absl::StrCat(message->full_name(), ".",
 7287|      0|                         message->field(i - 1)->name()),
 7288|      0|            proto.field(i - 1), DescriptorPool::ErrorCollector::TYPE, [&] {
 7289|      0|              return absl::Substitute(
 7290|      0|                  "Fields in the same oneof must be defined consecutively. "
 7291|      0|                  "\"$0\" cannot be defined before the completion of the "
 7292|      0|                  "\"$1\" oneof definition.",
 7293|      0|                  message->field(i - 1)->name(), oneof_decl->name());
 7294|      0|            });
 7295|      0|      }
 7296|       |      // Must go through oneof_decls_ array to get a non-const version of the
 7297|       |      // OneofDescriptor.
 7298|      7|      auto& out_oneof_decl = message->oneof_decls_[oneof_decl->index()];
 7299|      7|      if (out_oneof_decl.field_count_ == 0) {
  ------------------
  |  Branch (7299:11): [True: 2, False: 5]
  ------------------
 7300|      2|        out_oneof_decl.fields_ = message->field(i);
 7301|      2|      }
 7302|       |
 7303|      7|      if (!had_errors_) {
  ------------------
  |  Branch (7303:11): [True: 7, False: 0]
  ------------------
 7304|       |        // Verify that they are contiguous.
 7305|       |        // This is assumed by OneofDescriptor::field(i).
 7306|       |        // But only if there are no errors.
 7307|      7|        ABSL_CHECK_EQ(out_oneof_decl.fields_ + out_oneof_decl.field_count_,
  ------------------
  |  |   50|      7|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      7|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      7|  while (                                                                      \
  |  |  |  |  |  |   62|      7|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 7]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      7|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      7|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      7|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      7|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      7|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      7|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7308|      7|                      message->field(i));
 7309|      7|      }
 7310|      7|      ++out_oneof_decl.field_count_;
 7311|      7|    }
 7312|    205|  }
 7313|       |
 7314|       |  // Then verify the sizes.
 7315|     47|  for (int i = 0; i < message->oneof_decl_count(); i++) {
  ------------------
  |  Branch (7315:19): [True: 2, False: 45]
  ------------------
 7316|      2|    OneofDescriptor* oneof_decl = &message->oneof_decls_[i];
 7317|       |
 7318|      2|    if (oneof_decl->field_count() == 0) {
  ------------------
  |  Branch (7318:9): [True: 0, False: 2]
  ------------------
 7319|      0|      AddError(absl::StrCat(message->full_name(), ".", oneof_decl->name()),
 7320|      0|               proto.oneof_decl(i), DescriptorPool::ErrorCollector::NAME,
 7321|      0|               "Oneof must have at least one field.");
 7322|      0|    }
 7323|      2|  }
 7324|       |
 7325|    250|  for (int i = 0; i < message->field_count(); i++) {
  ------------------
  |  Branch (7325:19): [True: 205, False: 45]
  ------------------
 7326|    205|    const FieldDescriptor* field = message->field(i);
 7327|    205|    if (field->proto3_optional_) {
  ------------------
  |  Branch (7327:9): [True: 0, False: 205]
  ------------------
 7328|      0|      if (!field->containing_oneof() ||
  ------------------
  |  Branch (7328:11): [True: 0, False: 0]
  ------------------
 7329|      0|          !field->containing_oneof()->is_synthetic()) {
  ------------------
  |  Branch (7329:11): [True: 0, False: 0]
  ------------------
 7330|      0|        AddError(message->full_name(), proto.field(i),
 7331|      0|                 DescriptorPool::ErrorCollector::OTHER,
 7332|      0|                 "Fields with proto3_optional set must be "
 7333|      0|                 "a member of a one-field oneof");
 7334|      0|      }
 7335|      0|    }
 7336|    205|  }
 7337|       |
 7338|       |  // Synthetic oneofs must be last.
 7339|     45|  int first_synthetic = -1;
 7340|     47|  for (int i = 0; i < message->oneof_decl_count(); i++) {
  ------------------
  |  Branch (7340:19): [True: 2, False: 45]
  ------------------
 7341|      2|    if (message->oneof_decl(i)->is_synthetic()) {
  ------------------
  |  Branch (7341:9): [True: 0, False: 2]
  ------------------
 7342|      0|      if (first_synthetic == -1) {
  ------------------
  |  Branch (7342:11): [True: 0, False: 0]
  ------------------
 7343|      0|        first_synthetic = i;
 7344|      0|      }
 7345|      2|    } else {
 7346|      2|      if (first_synthetic != -1) {
  ------------------
  |  Branch (7346:11): [True: 0, False: 2]
  ------------------
 7347|      0|        AddError(message->full_name(), proto.oneof_decl(i),
 7348|      0|                 DescriptorPool::ErrorCollector::OTHER,
 7349|      0|                 "Synthetic oneofs must be after all other oneofs");
 7350|      0|      }
 7351|      2|    }
 7352|      2|  }
 7353|       |
 7354|     45|  if (first_synthetic == -1) {
  ------------------
  |  Branch (7354:7): [True: 45, False: 0]
  ------------------
 7355|     45|    message->real_oneof_decl_count_ = message->oneof_decl_count_;
 7356|     45|  } else {
 7357|      0|    message->real_oneof_decl_count_ = first_synthetic;
 7358|      0|  }
 7359|     45|}
_ZN6google8protobuf17DescriptorBuilder14CrossLinkFieldEPNS0_15FieldDescriptorERKNS0_20FieldDescriptorProtoE:
 7425|    206|                                       const FieldDescriptorProto& proto) {
 7426|    206|  if (proto.has_extendee()) {
  ------------------
  |  Branch (7426:7): [True: 1, False: 205]
  ------------------
 7427|      1|    Symbol extendee =
 7428|      1|        LookupSymbol(proto.extendee(), field->full_name(),
 7429|      1|                     DescriptorPool::PLACEHOLDER_EXTENDABLE_MESSAGE);
 7430|      1|    if (extendee.IsNull()) {
  ------------------
  |  Branch (7430:9): [True: 0, False: 1]
  ------------------
 7431|      0|      AddNotDefinedError(field->full_name(), proto,
 7432|      0|                         DescriptorPool::ErrorCollector::EXTENDEE,
 7433|      0|                         proto.extendee());
 7434|      0|      return;
 7435|      1|    } else if (extendee.type() != Symbol::MESSAGE) {
  ------------------
  |  Branch (7435:16): [True: 0, False: 1]
  ------------------
 7436|      0|      AddError(field->full_name(), proto,
 7437|      0|               DescriptorPool::ErrorCollector::EXTENDEE, [&] {
 7438|      0|                 return absl::StrCat("\"", proto.extendee(),
 7439|      0|                                     "\" is not a message type.");
 7440|      0|               });
 7441|      0|      return;
 7442|      0|    }
 7443|      1|    field->containing_type_ = extendee.descriptor();
 7444|       |
 7445|      1|    const Descriptor::ExtensionRange* extension_range =
 7446|      1|        field->containing_type()->FindExtensionRangeContainingNumber(
 7447|      1|            field->number());
 7448|       |
 7449|      1|    if (extension_range == nullptr) {
  ------------------
  |  Branch (7449:9): [True: 0, False: 1]
  ------------------
 7450|      0|      AddError(field->full_name(), proto,
 7451|      0|               DescriptorPool::ErrorCollector::NUMBER, [&] {
 7452|      0|                 return absl::Substitute(
 7453|      0|                     "\"$0\" does not declare $1 as an "
 7454|      0|                     "extension number.",
 7455|      0|                     field->containing_type()->full_name(), field->number());
 7456|      0|               });
 7457|      0|    }
 7458|      1|  }
 7459|       |
 7460|    206|  if (field->containing_oneof() != nullptr) {
  ------------------
  |  Branch (7460:7): [True: 7, False: 199]
  ------------------
 7461|      7|    if (field->label() != FieldDescriptor::LABEL_OPTIONAL) {
  ------------------
  |  Branch (7461:9): [True: 0, False: 7]
  ------------------
 7462|       |      // Note that this error will never happen when parsing .proto files.
 7463|       |      // It can only happen if you manually construct a FileDescriptorProto
 7464|       |      // that is incorrect.
 7465|      0|      AddError(field->full_name(), proto, DescriptorPool::ErrorCollector::NAME,
 7466|      0|               "Fields of oneofs must themselves have label LABEL_OPTIONAL.");
 7467|      0|    }
 7468|      7|  }
 7469|       |
 7470|    206|  if (proto.has_type_name()) {
  ------------------
  |  Branch (7470:7): [True: 92, False: 114]
  ------------------
 7471|       |    // Assume we are expecting a message type unless the proto contains some
 7472|       |    // evidence that it expects an enum type.  This only makes a difference if
 7473|       |    // we end up creating a placeholder.
 7474|     92|    bool expecting_enum = (proto.type() == FieldDescriptorProto::TYPE_ENUM) ||
  ------------------
  |  Branch (7474:27): [True: 25, False: 67]
  ------------------
 7475|     67|                          proto.has_default_value();
  ------------------
  |  Branch (7475:27): [True: 0, False: 67]
  ------------------
 7476|       |
 7477|       |    // In case of weak fields we force building the dependency. We need to know
 7478|       |    // if the type exist or not. If it doesn't exist we substitute Empty which
 7479|       |    // should only be done if the type can't be found in the generated pool.
 7480|       |    // TODO Ideally we should query the database directly to check
 7481|       |    // if weak fields exist or not so that we don't need to force building
 7482|       |    // weak dependencies. However the name lookup rules for symbols are
 7483|       |    // somewhat complicated, so I defer it too another CL.
 7484|     92|    bool is_weak = !pool_->enforce_weak_ && proto.options().weak();
  ------------------
  |  Branch (7484:20): [True: 92, False: 0]
  |  Branch (7484:45): [True: 0, False: 92]
  ------------------
 7485|     92|    bool is_lazy = pool_->lazily_build_dependencies_ && !is_weak;
  ------------------
  |  Branch (7485:20): [True: 92, False: 0]
  |  Branch (7485:57): [True: 92, False: 0]
  ------------------
 7486|       |
 7487|     92|    Symbol type =
 7488|     92|        LookupSymbol(proto.type_name(), field->full_name(),
 7489|     92|                     expecting_enum ? DescriptorPool::PLACEHOLDER_ENUM
  ------------------
  |  Branch (7489:22): [True: 25, False: 67]
  ------------------
 7490|     92|                                    : DescriptorPool::PLACEHOLDER_MESSAGE,
 7491|     92|                     LOOKUP_TYPES, !is_lazy);
 7492|       |
 7493|     92|    if (type.IsNull()) {
  ------------------
  |  Branch (7493:9): [True: 0, False: 92]
  ------------------
 7494|      0|      if (is_lazy) {
  ------------------
  |  Branch (7494:11): [True: 0, False: 0]
  ------------------
 7495|      0|        ABSL_CHECK(field->type_ == FieldDescriptor::TYPE_MESSAGE ||
  ------------------
  |  |   41|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7496|      0|                   field->type_ == FieldDescriptor::TYPE_GROUP ||
 7497|      0|                   field->type_ == FieldDescriptor::TYPE_ENUM)
 7498|      0|            << proto;
 7499|       |        // Save the symbol names for later for lookup, and allocate the once
 7500|       |        // object needed for the accessors.
 7501|      0|        const std::string& name = proto.type_name();
 7502|       |
 7503|      0|        int name_sizes = static_cast<int>(name.size() + 1 +
 7504|      0|                                          proto.default_value().size() + 1);
 7505|       |
 7506|      0|        field->type_once_ = ::new (tables_->AllocateBytes(
 7507|      0|            static_cast<int>(sizeof(absl::once_flag)) + name_sizes))
 7508|      0|            absl::once_flag{};
 7509|      0|        char* names = reinterpret_cast<char*>(field->type_once_ + 1);
 7510|       |
 7511|      0|        memcpy(names, name.c_str(), name.size() + 1);
 7512|      0|        memcpy(names + name.size() + 1, proto.default_value().c_str(),
 7513|      0|               proto.default_value().size() + 1);
 7514|       |
 7515|       |        // AddFieldByNumber and AddExtension are done later in this function,
 7516|       |        // and can/must be done if the field type was not found. The related
 7517|       |        // error checking is not necessary when in lazily_build_dependencies_
 7518|       |        // mode, and can't be done without building the type's descriptor,
 7519|       |        // which we don't want to do.
 7520|      0|        file_tables_->AddFieldByNumber(field);
 7521|      0|        if (field->is_extension()) {
  ------------------
  |  Branch (7521:13): [True: 0, False: 0]
  ------------------
 7522|      0|          tables_->AddExtension(field);
 7523|      0|        }
 7524|      0|        return;
 7525|      0|      } else {
 7526|       |        // If the type is a weak type, we change the type to a google.protobuf.Empty
 7527|       |        // field.
 7528|      0|        if (is_weak) {
  ------------------
  |  Branch (7528:13): [True: 0, False: 0]
  ------------------
 7529|      0|          type = FindSymbol(kNonLinkedWeakMessageReplacementName);
 7530|      0|        }
 7531|      0|        if (type.IsNull()) {
  ------------------
  |  Branch (7531:13): [True: 0, False: 0]
  ------------------
 7532|      0|          AddNotDefinedError(field->full_name(), proto,
 7533|      0|                             DescriptorPool::ErrorCollector::TYPE,
 7534|      0|                             proto.type_name());
 7535|      0|          return;
 7536|      0|        }
 7537|      0|      }
 7538|      0|    }
 7539|       |
 7540|     92|    if (!proto.has_type()) {
  ------------------
  |  Branch (7540:9): [True: 0, False: 92]
  ------------------
 7541|       |      // Choose field type based on symbol.
 7542|      0|      if (type.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (7542:11): [True: 0, False: 0]
  ------------------
 7543|      0|        field->type_ = FieldDescriptor::TYPE_MESSAGE;
 7544|      0|      } else if (type.type() == Symbol::ENUM) {
  ------------------
  |  Branch (7544:18): [True: 0, False: 0]
  ------------------
 7545|      0|        field->type_ = FieldDescriptor::TYPE_ENUM;
 7546|      0|      } else {
 7547|      0|        AddError(field->full_name(), proto,
 7548|      0|                 DescriptorPool::ErrorCollector::TYPE, [&] {
 7549|      0|                   return absl::StrCat("\"", proto.type_name(),
 7550|      0|                                       "\" is not a type.");
 7551|      0|                 });
 7552|      0|        return;
 7553|      0|      }
 7554|      0|    }
 7555|       |
 7556|     92|    if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
  ------------------
  |  Branch (7556:9): [True: 67, False: 25]
  ------------------
 7557|     67|      field->type_descriptor_.message_type = type.descriptor();
 7558|     67|      if (field->type_descriptor_.message_type == nullptr) {
  ------------------
  |  Branch (7558:11): [True: 0, False: 67]
  ------------------
 7559|      0|        AddError(field->full_name(), proto,
 7560|      0|                 DescriptorPool::ErrorCollector::TYPE, [&] {
 7561|      0|                   return absl::StrCat("\"", proto.type_name(),
 7562|      0|                                       "\" is not a message type.");
 7563|      0|                 });
 7564|      0|        return;
 7565|      0|      }
 7566|       |
 7567|     67|      if (field->has_default_value()) {
  ------------------
  |  Branch (7567:11): [True: 0, False: 67]
  ------------------
 7568|      0|        AddError(field->full_name(), proto,
 7569|      0|                 DescriptorPool::ErrorCollector::DEFAULT_VALUE,
 7570|      0|                 "Messages can't have default values.");
 7571|      0|      }
 7572|     67|    } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) {
  ------------------
  |  Branch (7572:16): [True: 25, False: 0]
  ------------------
 7573|     25|      field->type_descriptor_.enum_type = type.enum_descriptor();
 7574|     25|      if (field->type_descriptor_.enum_type == nullptr) {
  ------------------
  |  Branch (7574:11): [True: 0, False: 25]
  ------------------
 7575|      0|        AddError(field->full_name(), proto,
 7576|      0|                 DescriptorPool::ErrorCollector::TYPE, [&] {
 7577|      0|                   return absl::StrCat("\"", proto.type_name(),
 7578|      0|                                       "\" is not an enum type.");
 7579|      0|                 });
 7580|      0|        return;
 7581|      0|      }
 7582|       |
 7583|     25|      if (field->enum_type()->is_placeholder_) {
  ------------------
  |  Branch (7583:11): [True: 0, False: 25]
  ------------------
 7584|       |        // We can't look up default values for placeholder types.  We'll have
 7585|       |        // to just drop them.
 7586|      0|        field->has_default_value_ = false;
 7587|      0|      }
 7588|       |
 7589|     25|      if (field->has_default_value()) {
  ------------------
  |  Branch (7589:11): [True: 5, False: 20]
  ------------------
 7590|       |        // Ensure that the default value is an identifier. Parser cannot always
 7591|       |        // verify this because it does not have complete type information.
 7592|       |        // N.B. that this check yields better error messages but is not
 7593|       |        // necessary for correctness (an enum symbol must be a valid identifier
 7594|       |        // anyway), only for better errors.
 7595|      5|        if (!io::Tokenizer::IsIdentifier(proto.default_value())) {
  ------------------
  |  Branch (7595:13): [True: 0, False: 5]
  ------------------
 7596|      0|          AddError(field->full_name(), proto,
 7597|      0|                   DescriptorPool::ErrorCollector::DEFAULT_VALUE,
 7598|      0|                   "Default value for an enum field must be an identifier.");
 7599|      5|        } else {
 7600|       |          // We can't just use field->enum_type()->FindValueByName() here
 7601|       |          // because that locks the pool's mutex, which we have already locked
 7602|       |          // at this point.
 7603|      5|          const EnumValueDescriptor* default_value =
 7604|      5|              LookupSymbolNoPlaceholder(proto.default_value(),
 7605|      5|                                        field->enum_type()->full_name())
 7606|      5|                  .enum_value_descriptor();
 7607|       |
 7608|      5|          if (default_value != nullptr &&
  ------------------
  |  Branch (7608:15): [True: 5, False: 0]
  ------------------
 7609|      5|              default_value->type() == field->enum_type()) {
  ------------------
  |  Branch (7609:15): [True: 5, False: 0]
  ------------------
 7610|      5|            field->default_value_enum_ = default_value;
 7611|      5|          } else {
 7612|      0|            AddError(field->full_name(), proto,
 7613|      0|                     DescriptorPool::ErrorCollector::DEFAULT_VALUE, [&] {
 7614|      0|                       return absl::StrCat("Enum type \"",
 7615|      0|                                           field->enum_type()->full_name(),
 7616|      0|                                           "\" has no value named \"",
 7617|      0|                                           proto.default_value(), "\".");
 7618|      0|                     });
 7619|      0|          }
 7620|      5|        }
 7621|     20|      } else if (field->enum_type()->value_count() > 0) {
  ------------------
  |  Branch (7621:18): [True: 20, False: 0]
  ------------------
 7622|       |        // All enums must have at least one value, or we would have reported
 7623|       |        // an error elsewhere.  We use the first defined value as the default
 7624|       |        // if a default is not explicitly defined.
 7625|     20|        field->default_value_enum_ = field->enum_type()->value(0);
 7626|     20|      }
 7627|     25|    } else {
 7628|      0|      AddError(field->full_name(), proto, DescriptorPool::ErrorCollector::TYPE,
 7629|      0|               "Field with primitive type has type_name.");
 7630|      0|    }
 7631|    114|  } else {
 7632|    114|    if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE ||
  ------------------
  |  Branch (7632:9): [True: 0, False: 114]
  ------------------
 7633|    114|        field->cpp_type() == FieldDescriptor::CPPTYPE_ENUM) {
  ------------------
  |  Branch (7633:9): [True: 0, False: 114]
  ------------------
 7634|      0|      AddError(field->full_name(), proto, DescriptorPool::ErrorCollector::TYPE,
 7635|      0|               "Field with message or enum type missing type_name.");
 7636|      0|    }
 7637|    114|  }
 7638|       |
 7639|       |  // Add the field to the fields-by-number table.
 7640|       |  // Note:  We have to do this *after* cross-linking because extensions do not
 7641|       |  // know their containing type until now. If we're in
 7642|       |  // lazily_build_dependencies_ mode, we're guaranteed there's no errors, so no
 7643|       |  // risk to calling containing_type() or other accessors that will build
 7644|       |  // dependencies.
 7645|    206|  if (!file_tables_->AddFieldByNumber(field)) {
  ------------------
  |  Branch (7645:7): [True: 0, False: 206]
  ------------------
 7646|      0|    const FieldDescriptor* conflicting_field = file_tables_->FindFieldByNumber(
 7647|      0|        field->containing_type(), field->number());
 7648|      0|    const absl::string_view containing_type_name =
 7649|      0|        field->containing_type() == nullptr
  ------------------
  |  Branch (7649:9): [True: 0, False: 0]
  ------------------
 7650|      0|            ? absl::string_view("unknown")
 7651|      0|            : field->containing_type()->full_name();
 7652|      0|    if (field->is_extension()) {
  ------------------
  |  Branch (7652:9): [True: 0, False: 0]
  ------------------
 7653|      0|      AddError(field->full_name(), proto,
 7654|      0|               DescriptorPool::ErrorCollector::NUMBER, [&] {
 7655|      0|                 return absl::Substitute(
 7656|      0|                     "Extension number $0 has already been used "
 7657|      0|                     "in \"$1\" by extension \"$2\".",
 7658|      0|                     field->number(), containing_type_name,
 7659|      0|                     conflicting_field->full_name());
 7660|      0|               });
 7661|      0|    } else {
 7662|      0|      AddError(field->full_name(), proto,
 7663|      0|               DescriptorPool::ErrorCollector::NUMBER, [&] {
 7664|      0|                 return absl::Substitute(
 7665|      0|                     "Field number $0 has already been used in "
 7666|      0|                     "\"$1\" by field \"$2\".",
 7667|      0|                     field->number(), containing_type_name,
 7668|      0|                     conflicting_field->name());
 7669|      0|               });
 7670|      0|    }
 7671|    206|  } else {
 7672|    206|    if (field->is_extension()) {
  ------------------
  |  Branch (7672:9): [True: 1, False: 205]
  ------------------
 7673|      1|      if (!tables_->AddExtension(field)) {
  ------------------
  |  Branch (7673:11): [True: 0, False: 1]
  ------------------
 7674|      0|        auto make_error = [&] {
 7675|      0|          const FieldDescriptor* conflicting_field =
 7676|      0|              tables_->FindExtension(field->containing_type(), field->number());
 7677|      0|          const absl::string_view containing_type_name =
 7678|      0|              field->containing_type() == nullptr
 7679|      0|                  ? absl::string_view("unknown")
 7680|      0|                  : field->containing_type()->full_name();
 7681|      0|          return absl::Substitute(
 7682|      0|              "Extension number $0 has already been used in \"$1\" by "
 7683|      0|              "extension "
 7684|      0|              "\"$2\" defined in $3.",
 7685|      0|              field->number(), containing_type_name,
 7686|      0|              conflicting_field->full_name(),
 7687|      0|              conflicting_field->file()->name());
 7688|      0|        };
 7689|       |        // Conflicting extension numbers should be an error. However, before
 7690|       |        // turning this into an error we need to fix all existing broken
 7691|       |        // protos first.
 7692|       |        // TODO: Change this to an error.
 7693|      0|        AddWarning(field->full_name(), proto,
 7694|      0|                   DescriptorPool::ErrorCollector::NUMBER, make_error);
 7695|      0|      }
 7696|      1|    }
 7697|    206|  }
 7698|    206|}
_ZN6google8protobuf17DescriptorBuilder17OptionInterpreterC2EPS1_:
 8612|      4|    : builder_(builder) {
 8613|      4|  ABSL_CHECK(builder_);
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8614|      4|}
_ZN6google8protobuf17DescriptorBuilder17OptionInterpreterD2Ev:
 8616|      4|DescriptorBuilder::OptionInterpreter::~OptionInterpreter() = default;
_ZNK6google8protobuf15FieldDescriptor12message_typeEv:
 9676|   106k|const Descriptor* FieldDescriptor::message_type() const {
 9677|   106k|  if (type_ == TYPE_MESSAGE || type_ == TYPE_GROUP) {
  ------------------
  |  Branch (9677:7): [True: 106k, False: 0]
  |  Branch (9677:32): [True: 0, False: 0]
  ------------------
 9678|   106k|    if (type_once_) {
  ------------------
  |  Branch (9678:9): [True: 0, False: 106k]
  ------------------
 9679|      0|      absl::call_once(*type_once_, FieldDescriptor::TypeOnceInit, this);
 9680|      0|    }
 9681|   106k|    return type_descriptor_.message_type;
 9682|   106k|  }
 9683|      0|  return nullptr;
 9684|   106k|}
_ZNK6google8protobuf15FieldDescriptor9enum_typeEv:
 9686|     75|const EnumDescriptor* FieldDescriptor::enum_type() const {
 9687|     75|  if (type_ == TYPE_ENUM) {
  ------------------
  |  Branch (9687:7): [True: 75, False: 0]
  ------------------
 9688|     75|    if (type_once_) {
  ------------------
  |  Branch (9688:9): [True: 0, False: 75]
  ------------------
 9689|      0|      absl::call_once(*type_once_, FieldDescriptor::TypeOnceInit, this);
 9690|      0|    }
 9691|     75|    return type_descriptor_.enum_type;
 9692|     75|  }
 9693|      0|  return nullptr;
 9694|     75|}
_ZN6google8protobuf8internal17ParseNoReflectionENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEERNS0_11MessageLiteE:
 9780|     24|bool ParseNoReflection(absl::string_view from, google::protobuf::MessageLite& to) {
 9781|     24|  auto cleanup = DisableTracking();
 9782|       |
 9783|     24|  to.Clear();
 9784|     24|  const char* ptr;
 9785|     24|  internal::ParseContext ctx(io::CodedInputStream::GetDefaultRecursionLimit(),
 9786|     24|                             false, &ptr, from);
 9787|     24|  ptr = to._InternalParse(ptr, &ctx);
 9788|     24|  if (ptr == nullptr || !ctx.EndedAtLimit()) return false;
  ------------------
  |  Branch (9788:7): [True: 0, False: 24]
  |  Branch (9788:25): [True: 0, False: 24]
  ------------------
 9789|     24|  return to.IsInitializedWithErrors();
 9790|     24|}
_ZN6google8protobuf8internal3cpp23IsLazilyInitializedFileENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
 9846|      4|bool IsLazilyInitializedFile(absl::string_view filename) {
 9847|      4|  if (filename == "third_party/protobuf/cpp_features.proto" ||
  ------------------
  |  Branch (9847:7): [True: 0, False: 4]
  ------------------
 9848|      4|      filename == "google/protobuf/cpp_features.proto") {
  ------------------
  |  Branch (9848:7): [True: 1, False: 3]
  ------------------
 9849|      1|    return true;
 9850|      1|  }
 9851|      3|  return filename == "net/proto2/proto/descriptor.proto" ||
  ------------------
  |  Branch (9851:10): [True: 0, False: 3]
  ------------------
 9852|      3|         filename == "google/protobuf/descriptor.proto";
  ------------------
  |  Branch (9852:10): [True: 1, False: 2]
  ------------------
 9853|      4|}
_ZNK6google8protobuf14FileDescriptor7editionEv:
 9860|    787|Edition FileDescriptor::edition() const { return edition_; }
_ZNK6google8protobuf14DescriptorPool6Tables10FindSymbolENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
 1693|    104|inline Symbol DescriptorPool::Tables::FindSymbol(absl::string_view key) const {
 1694|    104|  auto it = symbols_by_name_.find(FullNameQuery{key});
 1695|    104|  return it == symbols_by_name_.end() ? Symbol() : *it;
  ------------------
  |  Branch (1695:10): [True: 5, False: 99]
  ------------------
 1696|    104|}
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_118SymbolByFullNameEqclINS0_6SymbolENS1_13FullNameQueryEEEbRKT_RKT0_:
  958|    102|  bool operator()(const T& a, const U& b) const {
  959|    102|    return a.full_name() == b.full_name();
  960|    102|  }
_ZNK6google8protobuf6Symbol9full_nameEv:
  707|    964|  absl::string_view full_name() const {
  708|    964|    switch (type()) {
  709|    165|      case MESSAGE:
  ------------------
  |  Branch (709:7): [True: 165, False: 799]
  ------------------
  710|    165|        return descriptor()->full_name();
  711|    542|      case FIELD:
  ------------------
  |  Branch (711:7): [True: 542, False: 422]
  ------------------
  712|    542|        return field_descriptor()->full_name();
  713|      2|      case ONEOF:
  ------------------
  |  Branch (713:7): [True: 2, False: 962]
  ------------------
  714|      2|        return oneof_descriptor()->full_name();
  715|     58|      case ENUM:
  ------------------
  |  Branch (715:7): [True: 58, False: 906]
  ------------------
  716|     58|        return enum_descriptor()->full_name();
  717|    181|      case ENUM_VALUE:
  ------------------
  |  Branch (717:7): [True: 181, False: 783]
  ------------------
  718|    181|        return enum_value_descriptor()->full_name();
  719|      0|      case SERVICE:
  ------------------
  |  Branch (719:7): [True: 0, False: 964]
  ------------------
  720|      0|        return service_descriptor()->full_name();
  721|      0|      case METHOD:
  ------------------
  |  Branch (721:7): [True: 0, False: 964]
  ------------------
  722|      0|        return method_descriptor()->full_name();
  723|      9|      case FULL_PACKAGE:
  ------------------
  |  Branch (723:7): [True: 9, False: 955]
  ------------------
  724|      9|        return file_descriptor()->package();
  725|      7|      case SUB_PACKAGE:
  ------------------
  |  Branch (725:7): [True: 7, False: 957]
  ------------------
  726|      7|        return absl::string_view(sub_package_file_descriptor()->file->package())
  727|      7|            .substr(0, sub_package_file_descriptor()->name_size);
  728|      0|      default:
  ------------------
  |  Branch (728:7): [True: 0, False: 964]
  ------------------
  729|      0|        ABSL_CHECK(false);
  ------------------
  |  |   41|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  730|    964|    }
  731|      0|    return "";
  732|    964|  }
_ZNK6google8protobuf6Symbol15file_descriptorEv:
  622|      9|  const TYPE* FIELD() const {                                                  \
  623|      9|    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
  ------------------
  |  Branch (623:12): [True: 9, False: 0]
  ------------------
  624|      9|  }
_ZNK6google8protobuf6Symbol27sub_package_file_descriptorEv:
  622|     14|  const TYPE* FIELD() const {                                                  \
  623|     14|    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
  ------------------
  |  Branch (623:12): [True: 14, False: 0]
  ------------------
  624|     14|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_113FullNameQuery9full_nameEv:
  944|    206|  absl::string_view full_name() const { return query; }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashclINS1_13FullNameQueryEEEmRKT_:
  950|    104|  size_t operator()(const T& s) const {
  951|    104|    return absl::HashOf(s.full_name());
  952|    104|  }
_ZNK6google8protobuf6Symbol6IsNullEv:
  673|    491|  bool IsNull() const { return type() == NULL_SYMBOL; }
_ZN6google8protobuf14DescriptorPool18DeferredValidationC2EPKS1_:
 1337|      5|      : pool_(pool), error_collector_(pool->default_error_collector_) {}
_ZN6google8protobuf6SymbolC2Ev:
  607|    249|  Symbol() {
  608|    249|    static constexpr internal::SymbolBase null_symbol{};
  609|    249|    static_assert(null_symbol.symbol_type_ == NULL_SYMBOL, "");
  610|       |    // Initialize with a sentinel to make sure `ptr_` is never null.
  611|    249|    ptr_ = &null_symbol;
  612|    249|  }
_ZN6google8protobuf14DescriptorPool18DeferredValidation8ValidateEv:
 1373|      4|  bool Validate() {
 1374|      4|    if (lifetimes_info_map_.empty()) return true;
  ------------------
  |  Branch (1374:9): [True: 4, False: 0]
  ------------------
 1375|       |
 1376|      0|    static absl::string_view feature_set_name = "google.protobuf.FeatureSet";
 1377|      0|    const Descriptor* feature_set =
 1378|      0|        pool_->FindMessageTypeByName(feature_set_name);
 1379|       |
 1380|      0|    bool has_errors = false;
 1381|      0|    for (const auto& it : lifetimes_info_map_) {
  ------------------
  |  Branch (1381:25): [True: 0, False: 0]
  ------------------
 1382|      0|      const FileDescriptor* file = it.first;
 1383|       |
 1384|      0|      for (const auto& info : it.second) {
  ------------------
  |  Branch (1384:29): [True: 0, False: 0]
  ------------------
 1385|      0|        auto results = FeatureResolver::ValidateFeatureLifetimes(
 1386|      0|            file->edition(), *info.proto_features, feature_set);
 1387|      0|        for (const auto& error : results.errors) {
  ------------------
  |  Branch (1387:32): [True: 0, False: 0]
  ------------------
 1388|      0|          has_errors = true;
 1389|      0|          if (error_collector_ == nullptr) {
  ------------------
  |  Branch (1389:15): [True: 0, False: 0]
  ------------------
 1390|      0|            ABSL_LOG(ERROR)
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1391|      0|                << info.filename << " " << info.full_name << ": " << error;
 1392|      0|          } else {
 1393|      0|            error_collector_->RecordError(
 1394|      0|                info.filename, info.full_name, info.proto,
 1395|      0|                DescriptorPool::ErrorCollector::NAME, error);
 1396|      0|          }
 1397|      0|        }
 1398|      0|        if (pool_->direct_input_files_.find(file->name()) !=
  ------------------
  |  Branch (1398:13): [True: 0, False: 0]
  ------------------
 1399|      0|            pool_->direct_input_files_.end()) {
 1400|      0|          for (const auto& warning : results.warnings) {
  ------------------
  |  Branch (1400:36): [True: 0, False: 0]
  ------------------
 1401|      0|            if (error_collector_ == nullptr) {
  ------------------
  |  Branch (1401:17): [True: 0, False: 0]
  ------------------
 1402|      0|              ABSL_LOG(WARNING)
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  168|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|      0|  ::absl::log_internal::LogMessage(       \
  |  |  |  |  |  |   50|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::WarningTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1403|      0|                  << info.filename << " " << info.full_name << ": " << warning;
 1404|      0|            } else {
 1405|      0|              error_collector_->RecordWarning(
 1406|      0|                  info.filename, info.full_name, info.proto,
 1407|      0|                  DescriptorPool::ErrorCollector::NAME, warning);
 1408|      0|            }
 1409|      0|          }
 1410|      0|        }
 1411|      0|      }
 1412|      0|    }
 1413|      0|    lifetimes_info_map_.clear();
 1414|      0|    return !has_errors;
 1415|      0|  }
_ZN6google8protobuf14DescriptorPool18DeferredValidationD2Ev:
 1344|      5|  ~DeferredValidation() {
 1345|     10|    ABSL_CHECK(lifetimes_info_map_.empty())
  ------------------
  |  |   41|      5|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      5|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     10|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     10|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 5, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      5|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 5]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     10|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 5, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 5]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 5]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      5|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      5|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1346|     10|        << "DeferredValidation destroyed with unvalidated features";
 1347|      5|  }
_ZNK6google8protobuf6Symbol16field_descriptorEv:
  622|   128k|  const TYPE* FIELD() const {                                                  \
  623|   128k|    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
  ------------------
  |  Branch (623:12): [True: 128k, False: 72]
  ------------------
  624|   128k|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_19RoundUpToILi8EEEmm:
  162|    960|constexpr size_t RoundUpTo(size_t n) {
  163|    960|  static_assert((R & (R - 1)) == 0, "Must be power of two");
  164|    960|  return (n + (R - 1)) & ~(R - 1);
  165|    960|}
_ZNK6google8protobuf14DescriptorPool6Tables8FindFileENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
 1745|     14|    absl::string_view key) const {
 1746|     14|  auto it = files_by_name_.find(key);
 1747|     14|  if (it == files_by_name_.end()) return nullptr;
  ------------------
  |  Branch (1747:7): [True: 8, False: 6]
  ------------------
 1748|      6|  return *it;
 1749|     14|}
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_119DescriptorsByNameEqINS0_14FileDescriptorEEclEPKS3_NSt3__117basic_string_viewIcNS7_11char_traitsIcEEEE:
 1011|      6|  bool operator()(const DescriptorT* lhs, absl::string_view rhs) const {
 1012|      6|    return lhs->name() == rhs;
 1013|      6|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS0_14FileDescriptorEEclENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
  994|     14|  size_t operator()(absl::string_view name) const { return absl::HashOf(name); }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GeneratedDatabaseEv:
 2186|      8|EncodedDescriptorDatabase* GeneratedDatabase() {
 2187|      8|  static auto generated_database =
 2188|      8|      internal::OnShutdownDelete(new EncodedDescriptorDatabase());
 2189|      8|  return generated_database;
 2190|      8|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_116NewGeneratedPoolEv:
 2192|      2|DescriptorPool* NewGeneratedPool() {
 2193|      2|  auto generated_pool = new DescriptorPool(GeneratedDatabase());
 2194|      2|  generated_pool->InternalSetLazilyBuildDependencies();
 2195|      2|  return generated_pool;
 2196|      2|}
_ZNK6google8protobuf6Symbol7GetFileEv:
  682|    189|  const FileDescriptor* GetFile() const {
  683|    189|    switch (type()) {
  684|    143|      case MESSAGE:
  ------------------
  |  Branch (684:7): [True: 143, False: 46]
  ------------------
  685|    143|        return descriptor()->file();
  686|      2|      case FIELD:
  ------------------
  |  Branch (686:7): [True: 2, False: 187]
  ------------------
  687|      2|        return field_descriptor()->file();
  688|      0|      case ONEOF:
  ------------------
  |  Branch (688:7): [True: 0, False: 189]
  ------------------
  689|      0|        return oneof_descriptor()->containing_type()->file();
  690|     26|      case ENUM:
  ------------------
  |  Branch (690:7): [True: 26, False: 163]
  ------------------
  691|     26|        return enum_descriptor()->file();
  692|     18|      case ENUM_VALUE:
  ------------------
  |  Branch (692:7): [True: 18, False: 171]
  ------------------
  693|     18|        return enum_value_descriptor()->type()->file();
  694|      0|      case SERVICE:
  ------------------
  |  Branch (694:7): [True: 0, False: 189]
  ------------------
  695|      0|        return service_descriptor()->file();
  696|      0|      case METHOD:
  ------------------
  |  Branch (696:7): [True: 0, False: 189]
  ------------------
  697|      0|        return method_descriptor()->service()->file();
  698|      0|      case FULL_PACKAGE:
  ------------------
  |  Branch (698:7): [True: 0, False: 189]
  ------------------
  699|      0|        return file_descriptor();
  700|      0|      case SUB_PACKAGE:
  ------------------
  |  Branch (700:7): [True: 0, False: 189]
  ------------------
  701|      0|        return sub_package_file_descriptor()->file;
  702|      0|      default:
  ------------------
  |  Branch (702:7): [True: 0, False: 189]
  ------------------
  703|      0|        return nullptr;
  704|    189|    }
  705|    189|  }
_ZNK6google8protobuf6Symbol10descriptorEv:
  622|    568|  const TYPE* FIELD() const {                                                  \
  623|    568|    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
  ------------------
  |  Branch (623:12): [True: 568, False: 0]
  ------------------
  624|    568|  }
_ZNK6google8protobuf6Symbol16oneof_descriptorEv:
  622|     10|  const TYPE* FIELD() const {                                                  \
  623|     10|    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
  ------------------
  |  Branch (623:12): [True: 10, False: 0]
  ------------------
  624|     10|  }
_ZNK6google8protobuf6Symbol15enum_descriptorEv:
  622|    173|  const TYPE* FIELD() const {                                                  \
  623|    173|    return type() == TYPE_CONSTANT ? static_cast<const TYPE*>(ptr_) : nullptr; \
  ------------------
  |  Branch (623:12): [True: 173, False: 0]
  ------------------
  624|    173|  }
_ZNK6google8protobuf6Symbol21enum_value_descriptorEv:
  660|    882|  const EnumValueDescriptor* enum_value_descriptor() const {
  661|    882|    return type() == ENUM_VALUE
  ------------------
  |  Branch (661:12): [True: 550, False: 332]
  ------------------
  662|    882|               ? static_cast<const EnumValueDescriptor*>(
  663|    550|                     static_cast<const internal::SymbolBaseN<0>*>(ptr_))
  664|    882|           : type() == ENUM_VALUE_OTHER_PARENT
  ------------------
  |  Branch (664:14): [True: 332, False: 0]
  ------------------
  665|    332|               ? static_cast<const EnumValueDescriptor*>(
  666|    332|                     static_cast<const internal::SymbolBaseN<1>*>(ptr_))
  667|    332|               : nullptr;
  668|    882|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_120ObjectToParentNumberEPKNS0_15FieldDescriptorE:
 1031|    206|std::pair<const void*, int> ObjectToParentNumber(const FieldDescriptor* field) {
 1032|    206|  return {field->containing_type(), field->number()};
 1033|    206|}
_ZNK6google8protobuf20FileDescriptorTables16FindNestedSymbolEPKvNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEE:
 1699|  63.5k|    const void* parent, absl::string_view name) const {
 1700|  63.5k|  auto it = symbols_by_parent_.find(ParentNameQuery{{parent, name}});
 1701|  63.5k|  return it == symbols_by_parent_.end() ? Symbol() : *it;
  ------------------
  |  Branch (1701:10): [True: 72, False: 63.4k]
  ------------------
 1702|  63.5k|}
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_116SymbolByParentEqclINS0_6SymbolENS1_15ParentNameQueryEEEbRKT_RKT0_:
  983|  63.4k|  bool operator()(const T& a, const U& b) const {
  984|  63.4k|    return a.parent_name_key() == b.parent_name_key();
  985|  63.4k|  }
_ZNK6google8protobuf6Symbol15parent_name_keyEv:
  734|  64.4k|  std::pair<const void*, absl::string_view> parent_name_key() const {
  735|  64.4k|    const auto or_file = [&](const void* p) { return p ? p : GetFile(); };
  736|  64.4k|    switch (type()) {
  737|     96|      case MESSAGE:
  ------------------
  |  Branch (737:7): [True: 96, False: 64.3k]
  ------------------
  738|     96|        return {or_file(descriptor()->containing_type()), descriptor()->name()};
  739|  64.0k|      case FIELD: {
  ------------------
  |  Branch (739:7): [True: 64.0k, False: 471]
  ------------------
  740|  64.0k|        auto* field = field_descriptor();
  741|  64.0k|        return {or_file(field->is_extension() ? field->extension_scope()
  ------------------
  |  Branch (741:25): [True: 2, False: 64.0k]
  ------------------
  742|  64.0k|                                              : field->containing_type()),
  743|  64.0k|                field->name()};
  744|      0|      }
  745|      4|      case ONEOF:
  ------------------
  |  Branch (745:7): [True: 4, False: 64.4k]
  ------------------
  746|      4|        return {oneof_descriptor()->containing_type(),
  747|      4|                oneof_descriptor()->name()};
  748|     32|      case ENUM:
  ------------------
  |  Branch (748:7): [True: 32, False: 64.4k]
  ------------------
  749|     32|        return {or_file(enum_descriptor()->containing_type()),
  750|     32|                enum_descriptor()->name()};
  751|    173|      case ENUM_VALUE:
  ------------------
  |  Branch (751:7): [True: 173, False: 64.3k]
  ------------------
  752|    173|        return {or_file(enum_value_descriptor()->type()->containing_type()),
  753|    173|                enum_value_descriptor()->name()};
  754|    166|      case ENUM_VALUE_OTHER_PARENT:
  ------------------
  |  Branch (754:7): [True: 166, False: 64.3k]
  ------------------
  755|    166|        return {enum_value_descriptor()->type(),
  756|    166|                enum_value_descriptor()->name()};
  757|      0|      case SERVICE:
  ------------------
  |  Branch (757:7): [True: 0, False: 64.4k]
  ------------------
  758|      0|        return {GetFile(), service_descriptor()->name()};
  759|      0|      case METHOD:
  ------------------
  |  Branch (759:7): [True: 0, False: 64.4k]
  ------------------
  760|      0|        return {method_descriptor()->service(), method_descriptor()->name()};
  761|      0|      default:
  ------------------
  |  Branch (761:7): [True: 0, False: 64.4k]
  ------------------
  762|      0|        ABSL_CHECK(false);
  ------------------
  |  |   41|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  763|  64.4k|    }
  764|      0|    return {};
  765|  64.4k|  }
_ZZNK6google8protobuf6Symbol15parent_name_keyEvENKUlPKvE_clES3_:
  735|  64.3k|    const auto or_file = [&](const void* p) { return p ? p : GetFile(); };
  ------------------
  |  Branch (735:54): [True: 64.2k, False: 91]
  ------------------
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_115ParentNameQuery15parent_name_keyEv:
  967|   127k|  std::pair<const void*, absl::string_view> parent_name_key() const {
  968|   127k|    return query;
  969|   127k|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_118SymbolByParentHashclINS1_15ParentNameQueryEEEmRKT_:
  975|  63.5k|  size_t operator()(const T& s) const {
  976|  63.5k|    return absl::HashOf(s.parent_name_key());
  977|  63.5k|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_120ObjectToParentNumberEPKNS0_19EnumValueDescriptorE:
 1035|     29|    const EnumValueDescriptor* enum_value) {
 1036|     29|  return {enum_value->type(), enum_value->number()};
 1037|     29|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayIS9_EEPT_i:
  400|    367|  U* AllocateArray(int array_size) {
  401|    367|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|    367|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|    367|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|    367|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    734|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    367|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    734|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    734|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 367, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|    367|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 367]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    734|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 367, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 367]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 367]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    734|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    734|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|    367|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|    367|    int& used = used_.template Get<TypeToUse>();
  409|    367|    U* res = reinterpret_cast<U*>(data + used);
  410|    367|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [Folded, False: 367]
  ------------------
  411|    367|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|    367|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|    367|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    367|  while (                                                                      \
  |  |  |  |  |  |   62|    367|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 367]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    367|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|    367|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|    367|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|    367|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|    367|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|    367|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|    367|    return res;
  413|    367|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13has_allocatedEv:
  541|  2.16k|  bool has_allocated() const {
  542|  2.16k|    return pointers_.template Get<char>() != nullptr;
  543|  2.16k|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetIcEERKPT_v:
  243|  2.16k|  const ValueT<K>& Get() const {
  244|  2.16k|    return static_cast<const Base<K>&>(payload_).value;
  245|  2.16k|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISA_EERPT_v:
  238|    371|  ValueT<K>& Get() {
  239|    371|    return static_cast<Base<K>&>(payload_).value;
  240|    371|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISA_EERiv:
  238|  1.18k|  ValueT<K>& Get() {
  239|  1.18k|    return static_cast<Base<K>&>(payload_).value;
  240|  1.18k|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_14FoldESt16initializer_listINS1_15ExpressionEaterEE:
  159|    387|void Fold(std::initializer_list<ExpressionEater>) {}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEOT_:
  157|    820|  ExpressionEater(T&&) {}  // NOLINT
_ZN6google8protobuf14DescriptorPool18DeferredValidation11CreateProtoEv:
 1368|      4|  FileDescriptorProto& CreateProto() {
 1369|      4|    owned_protos_.push_back(Arena::Create<FileDescriptorProto>(&arena_));
 1370|      4|    return *owned_protos_.back();
 1371|      4|  }
descriptor.cc:_ZZNK6google8protobuf14DescriptorPool29TryFindFileInFallbackDatabaseENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEERNS1_18DeferredValidationEENK3$_0clERNS0_18DescriptorDatabaseES6_RNS0_19FileDescriptorProtoE:
 2711|      4|                            FileDescriptorProto& output) PROTOBUF_NOINLINE {
 2712|      4|    return database.FindFileByName(std::string(filename), &output);
 2713|      4|  };
_ZNK6google8protobuf6Symbol9IsPackageEv:
  678|     98|  bool IsPackage() const {
  679|     98|    return type() == FULL_PACKAGE || type() == SUB_PACKAGE;
  ------------------
  |  Branch (679:12): [True: 1, False: 97]
  |  Branch (679:38): [True: 0, False: 97]
  ------------------
  680|     98|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115IsLegacyEditionENS0_7EditionE:
 1198|    581|bool IsLegacyEdition(Edition edition) {
 1199|    581|  return edition < Edition::EDITION_2023;
 1200|    581|}
_ZN6google8protobuf17DescriptorBuilder3NewEPKNS0_14DescriptorPoolEPNS2_6TablesERNS2_18DeferredValidationEPNS2_14ErrorCollectorE:
 4159|      4|      DescriptorPool::ErrorCollector* error_collector) {
 4160|      4|    return std::unique_ptr<DescriptorBuilder>(new DescriptorBuilder(
 4161|      4|        pool, tables, deferred_validation, error_collector));
 4162|      4|  }
descriptor.cc:_ZZNK6google8protobuf14DescriptorPool21BuildFileFromDatabaseERKNS0_19FileDescriptorProtoERNS1_18DeferredValidationEENK3$_0clEv:
 4747|      4|  const auto build_file = [&] {
 4748|      4|    result = DescriptorBuilder::New(this, tables_.get(), deferred_validation,
 4749|      4|                                    default_error_collector_)
 4750|      4|                 ->BuildFile(proto);
 4751|      4|  };
_ZN6google8protobuf6SymbolC2EPNS0_14EnumDescriptorE:
  619|     18|  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
  620|     18|    value->symbol_type_ = TYPE_CONSTANT;                                       \
  621|     18|  }                                                                            \
_ZN6google8protobuf6SymbolC2EPNS0_10DescriptorE:
  619|     45|  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
  620|     45|    value->symbol_type_ = TYPE_CONSTANT;                                       \
  621|     45|  }                                                                            \
_ZN6google8protobuf6SymbolC2EPNS0_14FileDescriptorE:
  619|      3|  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
  620|      3|    value->symbol_type_ = TYPE_CONSTANT;                                       \
  621|      3|  }                                                                            \
_ZN6google8protobuf6SymbolC2EPNS1_10SubpackageE:
  619|      2|  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
  620|      2|    value->symbol_type_ = TYPE_CONSTANT;                                       \
  621|      2|  }                                                                            \
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorE:
 5798|      4|                               internal::FlatAllocator& alloc) {
 5799|      4|  alloc.PlanArray<FileDescriptor>(1);
 5800|      4|  alloc.PlanArray<FileDescriptorTables>(1);
 5801|      4|  alloc.PlanArray<std::string>(2);  // name + package
 5802|      4|  if (proto.has_options()) alloc.PlanArray<FileOptions>(1);
  ------------------
  |  Branch (5802:7): [True: 2, False: 2]
  ------------------
 5803|      4|  if (proto.has_source_code_info()) alloc.PlanArray<SourceCodeInfo>(1);
  ------------------
  |  Branch (5803:7): [True: 0, False: 4]
  ------------------
 5804|       |
 5805|      4|  PlanAllocationSize(proto.service(), alloc);
 5806|      4|  PlanAllocationSize(proto.message_type(), alloc);
 5807|      4|  PlanAllocationSize(proto.enum_type(), alloc);
 5808|      4|  PlanAllocationSize(proto.extension(), alloc);
 5809|       |
 5810|      4|  alloc.PlanArray<int>(proto.weak_dependency_size());
 5811|      4|  alloc.PlanArray<int>(proto.public_dependency_size());
 5812|      4|  alloc.PlanArray<const FileDescriptor*>(proto.dependency_size());
 5813|      4|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayISB_EEvi:
  382|      4|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|      4|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      4|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [Folded, False: 4]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      0|      static_assert(alignof(U) <= 8, "");
  388|      0|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|      4|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      4|      using TypeToUse =
  393|      4|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      4|                                    char, U>::type;
  395|      4|      total_.template Get<TypeToUse>() += array_size;
  396|      4|    }
  397|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISC_EERiv:
  238|     20|  ValueT<K>& Get() {
  239|     20|    return static_cast<Base<K>&>(payload_).value;
  240|     20|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayISL_EEvi:
  382|      2|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|      2|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      2|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      4|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      2|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      4|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      4|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      2|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 2]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      4|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      4|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      2|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [Folded, False: 2]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      0|      static_assert(alignof(U) <= 8, "");
  388|      0|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|      2|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      2|      using TypeToUse =
  393|      2|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      2|                                    char, U>::type;
  395|      2|      total_.template Get<TypeToUse>() += array_size;
  396|      2|    }
  397|      2|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISM_EERiv:
  238|     18|  ValueT<K>& Get() {
  239|     18|    return static_cast<Base<K>&>(payload_).value;
  240|     18|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISB_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEEERNS0_8internal13FlatAllocatorE:
 5788|      4|    internal::FlatAllocator& alloc) {
 5789|      4|  alloc.PlanArray<ServiceDescriptor>(services.size());
 5790|      4|  alloc.PlanArray<std::string>(2 * services.size());  // name + full_name
 5791|      4|  for (const auto& service : services) {
  ------------------
  |  Branch (5791:28): [True: 0, False: 4]
  ------------------
 5792|      0|    if (service.has_options()) alloc.PlanArray<ServiceOptions>(1);
  ------------------
  |  Branch (5792:9): [True: 0, False: 0]
  ------------------
 5793|      0|    PlanAllocationSize(service.method(), alloc);
 5794|      0|  }
 5795|      4|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_17ServiceDescriptorEEEvi:
  382|      4|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|      4|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      4|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 4, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      4|      static_assert(alignof(U) <= 8, "");
  388|      4|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|      4|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetIcEERiv:
  238|  1.34k|  ValueT<K>& Get() {
  239|  1.34k|    return static_cast<Base<K>&>(payload_).value;
  240|  1.34k|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISK_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISL_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_15DescriptorProtoEEERNS0_8internal13FlatAllocatorE:
 5758|     49|    internal::FlatAllocator& alloc) {
 5759|     49|  alloc.PlanArray<Descriptor>(messages.size());
 5760|     49|  alloc.PlanArray<std::string>(2 * messages.size());  // name + full_name
 5761|       |
 5762|     49|  for (const auto& message : messages) {
  ------------------
  |  Branch (5762:28): [True: 45, False: 49]
  ------------------
 5763|     45|    if (message.has_options()) alloc.PlanArray<MessageOptions>(1);
  ------------------
  |  Branch (5763:9): [True: 0, False: 45]
  ------------------
 5764|     45|    PlanAllocationSize(message.nested_type(), alloc);
 5765|     45|    PlanAllocationSize(message.field(), alloc);
 5766|     45|    PlanAllocationSize(message.extension(), alloc);
 5767|     45|    PlanAllocationSize(message.extension_range(), alloc);
 5768|     45|    alloc.PlanArray<Descriptor::ReservedRange>(message.reserved_range_size());
 5769|     45|    alloc.PlanArray<const std::string*>(message.reserved_name_size());
 5770|     45|    alloc.PlanArray<std::string>(message.reserved_name_size());
 5771|     45|    PlanAllocationSize(message.enum_type(), alloc);
 5772|     45|    PlanAllocationSize(message.oneof_decl(), alloc);
 5773|     45|  }
 5774|     49|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISE_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEEERNS0_8internal13FlatAllocatorE:
 5749|     45|    internal::FlatAllocator& alloc) {
 5750|     45|  alloc.PlanArray<Descriptor::ExtensionRange>(ranges.size());
 5751|     45|  for (const auto& r : ranges) {
  ------------------
  |  Branch (5751:22): [True: 14, False: 45]
  ------------------
 5752|     14|    if (r.has_options()) alloc.PlanArray<ExtensionRangeOptions>(1);
  ------------------
  |  Branch (5752:9): [True: 0, False: 14]
  ------------------
 5753|     14|  }
 5754|     45|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISI_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_10Descriptor13ReservedRangeEEEvi:
  382|     45|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     45|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     45|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     90|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     45|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     90|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     90|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     45|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     90|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 45]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     90|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     90|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     45|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 45, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     45|      static_assert(alignof(U) <= 8, "");
  388|     45|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     45|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     45|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayIPKS9_EEvi:
  382|     63|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     63|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     63|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    126|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     63|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    126|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    126|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 63, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     63|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 63]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    126|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 63, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 63]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 63]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    126|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    126|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     63|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 63, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     63|      static_assert(alignof(U) <= 8, "");
  388|     63|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     63|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     63|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_20OneofDescriptorProtoEEERNS0_8internal13FlatAllocatorE:
 5722|     45|    internal::FlatAllocator& alloc) {
 5723|     45|  alloc.PlanArray<OneofDescriptor>(oneofs.size());
 5724|     45|  alloc.PlanArray<std::string>(2 * oneofs.size());  // name + full_name
 5725|     45|  for (const auto& oneof : oneofs) {
  ------------------
  |  Branch (5725:26): [True: 2, False: 45]
  ------------------
 5726|      2|    if (oneof.has_options()) alloc.PlanArray<OneofOptions>(1);
  ------------------
  |  Branch (5726:9): [True: 0, False: 2]
  ------------------
 5727|      2|  }
 5728|     45|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_15OneofDescriptorEEEvi:
  382|     45|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     45|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     45|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     90|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     45|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     90|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     90|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     45|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     90|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 45]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     90|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     90|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     45|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 45, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     45|      static_assert(alignof(U) <= 8, "");
  388|     45|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     45|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     45|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISJ_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_19EnumDescriptorProtoEEERNS0_8internal13FlatAllocatorE:
 5708|     49|    internal::FlatAllocator& alloc) {
 5709|     49|  alloc.PlanArray<EnumDescriptor>(enums.size());
 5710|     49|  alloc.PlanArray<std::string>(2 * enums.size());  // name + full_name
 5711|     49|  for (const auto& e : enums) {
  ------------------
  |  Branch (5711:22): [True: 18, False: 49]
  ------------------
 5712|     18|    if (e.has_options()) alloc.PlanArray<EnumOptions>(1);
  ------------------
  |  Branch (5712:9): [True: 0, False: 18]
  ------------------
 5713|     18|    PlanAllocationSize(e.value(), alloc);
 5714|     18|    alloc.PlanArray<EnumDescriptor::ReservedRange>(e.reserved_range_size());
 5715|     18|    alloc.PlanArray<const std::string*>(e.reserved_name_size());
 5716|     18|    alloc.PlanArray<std::string>(e.reserved_name_size());
 5717|     18|  }
 5718|     49|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISG_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEEERNS0_8internal13FlatAllocatorE:
 5698|     18|    internal::FlatAllocator& alloc) {
 5699|     18|  alloc.PlanArray<EnumValueDescriptor>(values.size());
 5700|     18|  alloc.PlanArray<std::string>(2 * values.size());  // name + full_name
 5701|     86|  for (const auto& v : values) {
  ------------------
  |  Branch (5701:22): [True: 86, False: 18]
  ------------------
 5702|     86|    if (v.has_options()) alloc.PlanArray<EnumValueOptions>(1);
  ------------------
  |  Branch (5702:9): [True: 0, False: 86]
  ------------------
 5703|     86|  }
 5704|     18|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISH_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_14EnumDescriptor13ReservedRangeEEEvi:
  382|     18|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     18|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     18|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     36|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     18|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     36|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     36|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     18|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     36|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 18]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     36|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     36|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     18|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 18, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     18|      static_assert(alignof(U) <= 8, "");
  388|     18|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     18|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     18|  }
descriptor.cc:_ZN6google8protobufL18PlanAllocationSizeERKNS0_16RepeatedPtrFieldINS0_20FieldDescriptorProtoEEERNS0_8internal13FlatAllocatorE:
 5732|     94|    internal::FlatAllocator& alloc) {
 5733|     94|  alloc.PlanArray<FieldDescriptor>(fields.size());
 5734|    206|  for (const auto& field : fields) {
  ------------------
  |  Branch (5734:26): [True: 206, False: 94]
  ------------------
 5735|    206|    if (field.has_options()) alloc.PlanArray<FieldOptions>(1);
  ------------------
  |  Branch (5735:9): [True: 17, False: 189]
  ------------------
 5736|    206|    alloc.PlanFieldNames(field.name(),
 5737|    206|                         field.has_json_name() ? &field.json_name() : nullptr);
  ------------------
  |  Branch (5737:26): [True: 0, False: 206]
  ------------------
 5738|    206|    if (field.has_default_value() && field.has_type() &&
  ------------------
  |  Branch (5738:9): [True: 27, False: 179]
  |  Branch (5738:38): [True: 27, False: 0]
  ------------------
 5739|     27|        (field.type() == FieldDescriptorProto::TYPE_STRING ||
  ------------------
  |  Branch (5739:10): [True: 0, False: 27]
  ------------------
 5740|     27|         field.type() == FieldDescriptorProto::TYPE_BYTES)) {
  ------------------
  |  Branch (5740:10): [True: 0, False: 27]
  ------------------
 5741|       |      // For the default string value.
 5742|      0|      alloc.PlanArray<std::string>(1);
 5743|      0|    }
 5744|    206|  }
 5745|     94|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_15FieldDescriptorEEEvi:
  382|     94|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     94|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     94|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    188|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     94|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    188|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    188|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 94, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     94|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 94]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    188|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 94, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 94]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 94]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    188|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    188|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     94|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 94, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     94|      static_assert(alignof(U) <= 8, "");
  388|     94|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     94|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     94|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayISE_EEvi:
  382|     17|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     17|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     17|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     34|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     17|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     34|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     34|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 17, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     17|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     34|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 17, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 17]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     34|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     34|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     17|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [Folded, False: 17]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      0|      static_assert(alignof(U) <= 8, "");
  388|      0|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     17|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|     17|      using TypeToUse =
  393|     17|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|     17|                                    char, U>::type;
  395|     17|      total_.template Get<TypeToUse>() += array_size;
  396|     17|    }
  397|     17|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISF_EERiv:
  238|     59|  ValueT<K>& Get() {
  239|     59|    return static_cast<Base<K>&>(payload_).value;
  240|     59|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14PlanFieldNamesERKS9_PSN_:
  429|    206|                      const std::string* opt_json_name) {
  430|    206|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|    206|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    412|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    206|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    412|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    412|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 206, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|    206|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 206]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    412|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 206, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 206]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 206]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    412|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    412|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|       |
  432|       |    // Fast path for snake_case names, which follow the style guide.
  433|    206|    if (opt_json_name == nullptr) {
  ------------------
  |  Branch (433:9): [True: 206, False: 0]
  ------------------
  434|    206|      switch (GetFieldNameCase(name)) {
  435|    110|        case FieldNameCase::kAllLower:
  ------------------
  |  Branch (435:9): [True: 110, False: 96]
  ------------------
  436|       |          // Case 1: they are all the same.
  437|    110|          return PlanArray<std::string>(2);
  438|     96|        case FieldNameCase::kSnakeCase:
  ------------------
  |  Branch (438:9): [True: 96, False: 110]
  ------------------
  439|       |          // Case 2: name==lower, camel==json
  440|     96|          return PlanArray<std::string>(3);
  441|      0|        default:
  ------------------
  |  Branch (441:9): [True: 0, False: 206]
  ------------------
  442|      0|          break;
  443|    206|      }
  444|    206|    }
  445|       |
  446|      0|    std::string lowercase_name = name;
  447|      0|    absl::AsciiStrToLower(&lowercase_name);
  448|       |
  449|      0|    std::string camelcase_name = ToCamelCase(name, /* lower_first = */ true);
  450|      0|    std::string json_name =
  451|      0|        opt_json_name != nullptr ? *opt_json_name : ToJsonName(name);
  ------------------
  |  Branch (451:9): [True: 0, False: 0]
  ------------------
  452|       |
  453|      0|    absl::string_view all_names[] = {name, lowercase_name, camelcase_name,
  454|      0|                                     json_name};
  455|      0|    std::sort(all_names, all_names + 4);
  456|      0|    int unique =
  457|      0|        static_cast<int>(std::unique(all_names, all_names + 4) - all_names);
  458|       |
  459|      0|    PlanArray<std::string>(unique + 1);
  460|      0|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE16GetFieldNameCaseENS3_17basic_string_viewIcS6_EE:
  550|    412|  FieldNameCase GetFieldNameCase(const absl::string_view name) {
  551|    412|    if (!name.empty() && !IsLower(name[0])) return FieldNameCase::kOther;
  ------------------
  |  Branch (551:9): [True: 412, False: 0]
  |  Branch (551:26): [True: 0, False: 412]
  ------------------
  552|    412|    FieldNameCase best = FieldNameCase::kAllLower;
  553|  4.44k|    for (char c : name) {
  ------------------
  |  Branch (553:17): [True: 4.44k, False: 412]
  ------------------
  554|  4.44k|      if (IsLowerOrDigit(c)) {
  ------------------
  |  Branch (554:11): [True: 4.18k, False: 258]
  ------------------
  555|       |        // nothing to do
  556|  4.18k|      } else if (c == '_') {
  ------------------
  |  Branch (556:18): [True: 258, False: 0]
  ------------------
  557|    258|        best = FieldNameCase::kSnakeCase;
  558|    258|      } else {
  559|      0|        return FieldNameCase::kOther;
  560|      0|      }
  561|  4.44k|    }
  562|    412|    return best;
  563|    412|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE7IsLowerEc:
  545|  4.85k|  static bool IsLower(char c) { return 'a' <= c && c <= 'z'; }
  ------------------
  |  Branch (545:40): [True: 4.58k, False: 268]
  |  Branch (545:52): [True: 4.58k, False: 0]
  ------------------
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14IsLowerOrDigitEc:
  547|  4.44k|  static bool IsLowerOrDigit(char c) { return IsLower(c) || IsDigit(c); }
  ------------------
  |  Branch (547:47): [True: 4.17k, False: 268]
  |  Branch (547:61): [True: 10, False: 258]
  ------------------
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE7IsDigitEc:
  546|    268|  static bool IsDigit(char c) { return '0' <= c && c <= '9'; }
  ------------------
  |  Branch (546:40): [True: 268, False: 0]
  |  Branch (546:52): [True: 10, False: 258]
  ------------------
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayIiEEvi:
  382|      8|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|      8|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      8|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     16|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      8|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     16|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     16|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      8|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     16|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 8]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     16|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     16|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      8|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 8, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      8|      static_assert(alignof(U) <= 8, "");
  388|      8|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|      8|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayIPKNS0_14FileDescriptorEEEvi:
  382|      4|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|      4|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      4|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 4, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      4|      static_assert(alignof(U) <= 8, "");
  388|      4|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|      4|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_124GetCppFeatureSetDefaultsEv:
 1105|      4|const FeatureSetDefaults& GetCppFeatureSetDefaults() {
 1106|      4|  static const FeatureSetDefaults* default_spec =
 1107|      4|      internal::OnShutdownDelete([] {
 1108|      4|        auto* defaults = new FeatureSetDefaults();
 1109|      4|        internal::ParseNoReflection(
 1110|      4|            absl::string_view{
 1111|      4|                PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS,
 1112|      4|                sizeof(PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS) - 1},
 1113|      4|            *defaults);
 1114|      4|        return defaults;
 1115|      4|      }());
 1116|      4|  return *default_spec;
 1117|      4|}
descriptor.cc:_ZZN6google8protobuf12_GLOBAL__N_124GetCppFeatureSetDefaultsEvENK3$_0clEv:
 1107|      1|      internal::OnShutdownDelete([] {
 1108|      1|        auto* defaults = new FeatureSetDefaults();
 1109|      1|        internal::ParseNoReflection(
 1110|      1|            absl::string_view{
 1111|      1|                PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS,
  ------------------
  |  |    8|      1|#define PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS "\n\037\030\204\007\"\003\302>\000*\025\010\001\020\002\030\002 \003(\0010\002\302>\006\010\001\020\003\030\000\n\037\030\347\007\"\003\302>\000*\025\010\002\020\001\030\001 \002(\0010\001\302>\006\010\000\020\003\030\000\n\037\030\350\007\"\023\010\001\020\001\030\001 \002(\0010\001\302>\004\010\000\020\003*\005\302>\002\030\000\n\037\030\351\007\"\025\010\001\020\001\030\001 \002(\0010\001\302>\006\010\000\020\001\030\001*\003\302>\000 \346\007(\351\007"
  ------------------
 1112|      1|                sizeof(PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS) - 1},
  ------------------
  |  |    8|      1|#define PROTOBUF_INTERNAL_CPP_EDITION_DEFAULTS "\n\037\030\204\007\"\003\302>\000*\025\010\001\020\002\030\002 \003(\0010\002\302>\006\010\001\020\003\030\000\n\037\030\347\007\"\003\302>\000*\025\010\002\020\001\030\001 \002(\0010\001\302>\006\010\000\020\003\030\000\n\037\030\350\007\"\023\010\001\020\001\030\001 \002(\0010\001\302>\004\010\000\020\003*\005\302>\002\030\000\n\037\030\351\007\"\025\010\001\020\001\030\001 \002(\0010\001\302>\006\010\000\020\001\030\001*\003\302>\000 \346\007(\351\007"
  ------------------
 1113|      1|            *defaults);
 1114|      1|        return defaults;
 1115|      1|      }());
_ZN6google8protobuf17DescriptorBuilder14BuildExtensionERKNS0_20FieldDescriptorProtoEPNS0_10DescriptorEPNS0_15FieldDescriptorERNS0_8internal13FlatAllocatorE:
 4423|      1|                      FieldDescriptor* result, internal::FlatAllocator& alloc) {
 4424|      1|    BuildFieldOrExtension(proto, parent, result, true, alloc);
 4425|      1|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115DisableTrackingEv:
  583|     28|auto DisableTracking() {
  584|     28|  bool old_value = is_tracking_enabled();
  585|     28|  is_tracking_enabled() = false;
  586|     28|  return absl::MakeCleanup([=] { is_tracking_enabled() = old_value; });
  587|     28|}
_ZN6google8protobuf17DescriptorBuilder10BuildFieldERKNS0_20FieldDescriptorProtoEPNS0_10DescriptorEPNS0_15FieldDescriptorERNS0_8internal13FlatAllocatorE:
 4419|    205|                  FieldDescriptor* result, internal::FlatAllocator& alloc) {
 4420|    205|    BuildFieldOrExtension(proto, parent, result, false, alloc);
 4421|    205|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_122IncrementWhenDestroyedD2Ev:
 6295|     45|  ~IncrementWhenDestroyed() { ++to_increment; }
_ZN6google8protobuf6SymbolC2EPNS0_15FieldDescriptorE:
  619|    206|  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
  620|    206|    value->symbol_type_ = TYPE_CONSTANT;                                       \
  621|    206|  }                                                                            \
_ZN6google8protobuf6SymbolC2EPNS0_15OneofDescriptorE:
  619|      2|  explicit Symbol(TYPE* value) : ptr_(value) {                                 \
  620|      2|    value->symbol_type_ = TYPE_CONSTANT;                                       \
  621|      2|  }                                                                            \
_ZN6google8protobuf6Symbol9EnumValueEPNS0_19EnumValueDescriptorEi:
  646|    172|  static Symbol EnumValue(EnumValueDescriptor* value, int n) {
  647|    172|    Symbol s;
  648|    172|    internal::SymbolBase* ptr;
  649|    172|    if (n == 0) {
  ------------------
  |  Branch (649:9): [True: 86, False: 86]
  ------------------
  650|     86|      ptr = static_cast<internal::SymbolBaseN<0>*>(value);
  651|     86|      ptr->symbol_type_ = ENUM_VALUE;
  652|     86|    } else {
  653|     86|      ptr = static_cast<internal::SymbolBaseN<1>*>(value);
  654|     86|      ptr->symbol_type_ = ENUM_VALUE_OTHER_PARENT;
  655|     86|    }
  656|    172|    s.ptr_ = ptr;
  657|    172|    return s;
  658|    172|  }
_ZNK6google8protobuf6Symbol4typeEv:
  672|   196k|  Type type() const { return static_cast<Type>(ptr_->symbol_type_); }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_111ToCamelCaseENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEb:
   97|     96|std::string ToCamelCase(const absl::string_view input, bool lower_first) {
   98|     96|  bool capitalize_next = !lower_first;
   99|     96|  std::string result;
  100|     96|  result.reserve(input.size());
  101|       |
  102|  1.52k|  for (char character : input) {
  ------------------
  |  Branch (102:23): [True: 1.52k, False: 96]
  ------------------
  103|  1.52k|    if (character == '_') {
  ------------------
  |  Branch (103:9): [True: 129, False: 1.39k]
  ------------------
  104|    129|      capitalize_next = true;
  105|  1.39k|    } else if (capitalize_next) {
  ------------------
  |  Branch (105:16): [True: 129, False: 1.26k]
  ------------------
  106|    129|      result.push_back(absl::ascii_toupper(character));
  107|    129|      capitalize_next = false;
  108|  1.26k|    } else {
  109|  1.26k|      result.push_back(character);
  110|  1.26k|    }
  111|  1.52k|  }
  112|       |
  113|       |  // Lower-case the first letter.
  114|     96|  if (lower_first && !result.empty()) {
  ------------------
  |  Branch (114:7): [True: 96, False: 0]
  |  Branch (114:22): [True: 96, False: 0]
  ------------------
  115|     96|    result[0] = absl::ascii_tolower(result[0]);
  116|     96|  }
  117|       |
  118|     96|  return result;
  119|     96|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_119is_tracking_enabledEv:
  578|     84|bool& is_tracking_enabled() {
  579|     84|  static PROTOBUF_THREAD_LOCAL bool value = true;
  580|     84|  return value;
  581|     84|}
descriptor.cc:_ZZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvENK3$_0clEv:
  586|     28|  return absl::MakeCleanup([=] { is_tracking_enabled() = old_value; });
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IbEEOT_:
  157|    112|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginIS9_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 0, False: 4]
  ------------------
  327|      4|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetIS9_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetIcEERKiv:
  243|     24|  const ValueT<K>& Get() const {
  244|     24|    return static_cast<const Base<K>&>(payload_).value;
  245|     24|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetIS9_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISA_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4dataEv:
  357|    120|  char* data() const {
  358|    120|    return const_cast<char*>(reinterpret_cast<const char*>(this));
  359|    120|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISA_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISA_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISA_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISB_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISB_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 0, False: 4]
  ------------------
  327|      4|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISB_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISB_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISC_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISC_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISC_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISC_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISD_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISD_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISD_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISD_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISE_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISE_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 2, False: 2]
  ------------------
  327|      2|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISE_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISE_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISF_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISF_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISF_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISF_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISG_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISG_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISG_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISG_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISH_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISH_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISH_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISH_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISI_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISI_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISI_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISI_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISJ_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISJ_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISJ_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISJ_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISK_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISK_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 4, False: 0]
  ------------------
  327|      0|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISK_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISK_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISL_EERKiv:
  243|     28|  const ValueT<K>& Get() const {
  244|     28|    return static_cast<const Base<K>&>(payload_).value;
  245|     28|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginISL_EEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 2, False: 2]
  ------------------
  327|      2|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetISL_EEiv:
  302|      8|  int BeginOffset() const {
  303|      8|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      8|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [Folded, False: 8]
  ------------------
  306|      8|    using PrevType =
  307|      8|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      8|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      8|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [Folded, False: 8]
  ------------------
  311|      8|                           : ends_.template Get<PrevType>();
  312|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetISL_EEiv:
  315|      8|  int EndOffset() const {
  316|      8|    return ends_.template Get<U>();
  317|      8|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISM_EERKiv:
  243|     20|  const ValueT<K>& Get() const {
  244|     20|    return static_cast<const Base<K>&>(payload_).value;
  245|     20|  }
_ZN6google8protobuf14DescriptorPool6Tables10CheckPointC2EPKS2_:
 1588|      4|              static_cast<int>(tables->flat_allocs_.size())),
 1589|       |          misc_allocations_before_checkpoint(
 1590|      4|              static_cast<int>(tables->misc_allocs_.size())),
 1591|       |          pending_symbols_before_checkpoint(
 1592|      4|              tables->symbols_after_checkpoint_.size()),
 1593|       |          pending_files_before_checkpoint(
 1594|      4|              tables->files_after_checkpoint_.size()),
 1595|       |          pending_extensions_before_checkpoint(
 1596|      4|              tables->extensions_after_checkpoint_.size()) {}
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_118SymbolByFullNameEqclINS0_6SymbolES4_EEbRKT_RKT0_:
  958|     33|  bool operator()(const T& a, const U& b) const {
  959|     33|    return a.full_name() == b.full_name();
  960|     33|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashclINS0_6SymbolEEEmRKT_:
  950|    796|  size_t operator()(const T& s) const {
  951|    796|    return absl::HashOf(s.full_name());
  952|    796|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS0_14FileDescriptorEEclEPKS3_:
  996|      4|  size_t operator()(const DescriptorT* file) const {
  997|      4|    return absl::HashOf(file->name());
  998|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_19EnumValueDescriptorEEEvi:
  382|     18|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     18|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     18|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     36|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     18|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     36|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     36|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     18|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     36|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 18]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     36|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     36|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     18|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 18, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     18|      static_assert(alignof(U) <= 8, "");
  388|     18|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     18|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     18|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayIS9_EEvi:
  382|    438|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|    438|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|    438|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    876|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    438|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    876|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    876|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 438, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|    438|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 438]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    876|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 438, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 438]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 438]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    876|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    876|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|    438|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [Folded, False: 438]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      0|      static_assert(alignof(U) <= 8, "");
  388|      0|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|    438|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|    438|      using TypeToUse =
  393|    438|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|    438|                                    char, U>::type;
  395|    438|      total_.template Get<TypeToUse>() += array_size;
  396|    438|    }
  397|    438|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE16FinalizePlanningIPNS0_14DescriptorPool6TablesEEEvRT_:
  526|      4|  void FinalizePlanning(Alloc& alloc) {
  527|      4|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  528|       |
  529|      4|    pointers_ = alloc->CreateFlatAlloc(total_)->Pointers();
  530|       |
  531|      4|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  532|      4|  }
descriptor.cc:_ZN6google8protobuf14DescriptorPool6Tables15CreateFlatAllocIJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEEEPNS0_12_GLOBAL__N_114FlatAllocationIJcSA_SB_SC_SD_SE_SF_SG_SH_SI_SJ_SK_SL_SM_EEERKNSN_7TypeMapINSN_4IntTEJDpT_EEE:
 2027|      4|    const TypeMap<IntT, T...>& sizes) {
 2028|      4|  auto ends = CalculateEnds(sizes);
 2029|      4|  using FlatAlloc = internal::FlatAllocator::Allocation;
 2030|       |
 2031|      4|  int last_end = ends.template Get<
 2032|      4|      typename std::tuple_element<sizeof...(T) - 1, std::tuple<T...>>::type>();
 2033|      4|  size_t total_size =
 2034|      4|      last_end + RoundUpTo<FlatAlloc::kMaxAlign>(sizeof(FlatAlloc));
 2035|      4|  char* data = static_cast<char*>(::operator new(total_size));
 2036|      4|  auto* res = ::new (data) FlatAlloc(ends);
 2037|      4|  flat_allocs_.emplace_back(res);
 2038|       |
 2039|      4|  return res;
 2040|      4|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_113CalculateEndsIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEEENS1_7TypeMapINS1_4IntTEJDpT_EEERKSQ_:
  365|      4|TypeMap<IntT, T...> CalculateEnds(const TypeMap<IntT, T...>& sizes) {
  366|      4|  int total = 0;
  367|      4|  TypeMap<IntT, T...> out;
  368|      4|  Fold({(out.template Get<T>() = total +=
  369|      4|         sizeof(T) * sizes.template Get<T>())...});
  370|      4|  return out;
  371|      4|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRiEEOT_:
  157|    112|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_4IntTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISD_EERiv:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEEC2ERKNS1_7TypeMapINS1_4IntTEJcS9_SA_SB_SC_SD_SE_SF_SG_SH_SI_SJ_SK_SL_EEE:
  269|      4|  explicit FlatAllocation(const TypeMap<IntT, T...>& ends) : ends_(ends) {
  270|       |    // The arrays start just after FlatAllocation, so adjust the ends.
  271|      4|    Fold({(ends_.template Get<T>() +=
  272|      4|           RoundUpTo<kMaxAlign>(sizeof(FlatAllocation)))...});
  273|      4|    Fold({Init<T>()...});
  274|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitIcEEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [True: 4, Folded]
  ------------------
  341|      0|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      0|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 0]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      0|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitIS9_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|    824|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 820, False: 4]
  ------------------
  343|    820|      ::new (p) U{};
  344|    820|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISA_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISB_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      8|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 4, False: 4]
  ------------------
  343|      4|      ::new (p) U{};
  344|      4|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISC_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISD_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISE_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|     21|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 17, False: 4]
  ------------------
  343|     17|      ::new (p) U{};
  344|     17|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISF_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISG_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISH_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISI_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISJ_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISK_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      4|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 0, False: 4]
  ------------------
  343|      0|      ::new (p) U{};
  344|      0|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE4InitISL_EEbv:
  338|      4|  bool Init() {
  339|       |    // Skip for the `char` block. No need to zero initialize it.
  340|      4|    if (std::is_same<U, char>::value) return true;
  ------------------
  |  Branch (340:9): [Folded, False: 4]
  ------------------
  341|      4|    for (char *p = data() + BeginOffset<U>(), *end = data() + EndOffset<U>();
  342|      6|         p != end; p += sizeof(U)) {
  ------------------
  |  Branch (342:10): [True: 2, False: 4]
  ------------------
  343|      2|      ::new (p) U{};
  344|      2|    }
  345|      4|    return true;
  346|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE8PointersEv:
  285|      4|  TypeMap<PointerT, T...> Pointers() const {
  286|      4|    TypeMap<PointerT, T...> out;
  287|      4|    Fold({(out.template Get<T>() = Begin<T>())...});
  288|      4|    return out;
  289|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE5BeginIcEEPT_v:
  324|      4|  U* Begin() const {
  325|      4|    int begin = BeginOffset<U>(), end = EndOffset<U>();
  326|      4|    if (begin == end) return nullptr;
  ------------------
  |  Branch (326:9): [True: 0, False: 4]
  ------------------
  327|      4|    return reinterpret_cast<U*>(data() + begin);
  328|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE11BeginOffsetIcEEiv:
  302|      4|  int BeginOffset() const {
  303|      4|    constexpr int type_index = FindTypeIndex<U, T...>();
  304|       |    // Avoid a negative value here to keep it compiling when type_index == 0
  305|      4|    constexpr int prev_type_index = type_index == 0 ? 0 : type_index - 1;
  ------------------
  |  Branch (305:37): [True: 0, Folded]
  ------------------
  306|      4|    using PrevType =
  307|      4|        typename std::tuple_element<prev_type_index, std::tuple<T...>>::type;
  308|       |    // Ensure the types are properly aligned.
  309|      4|    static_assert(EffectiveAlignof<PrevType>() >= EffectiveAlignof<U>(), "");
  310|      4|    return type_index == 0 ? RoundUpTo<kMaxAlign>(sizeof(FlatAllocation))
  ------------------
  |  Branch (310:12): [True: 4, Folded]
  ------------------
  311|      4|                           : ends_.template Get<PrevType>();
  312|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114FlatAllocationIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9EndOffsetIcEEiv:
  315|      4|  int EndOffset() const {
  316|      4|    return ends_.template Get<U>();
  317|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetIcEERPT_v:
  238|    450|  ValueT<K>& Get() {
  239|    450|    return static_cast<Base<K>&>(payload_).value;
  240|    450|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPcEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISB_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_14SourceCodeInfoEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISC_EERPT_v:
  238|      8|  ValueT<K>& Get() {
  239|      8|    return static_cast<Base<K>&>(payload_).value;
  240|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_20FileDescriptorTablesEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISD_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_10FeatureSetEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISE_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_14MessageOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISF_EERPT_v:
  238|     21|  ValueT<K>& Get() {
  239|     21|    return static_cast<Base<K>&>(payload_).value;
  240|     21|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_12FieldOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISG_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_11EnumOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISH_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_16EnumValueOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISI_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_21ExtensionRangeOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISJ_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_12OneofOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISK_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_14ServiceOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISL_EERPT_v:
  238|      4|  ValueT<K>& Get() {
  239|      4|    return static_cast<Base<K>&>(payload_).value;
  240|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_13MethodOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_17TypeMapINS1_8PointerTEJcNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE3GetISM_EERPT_v:
  238|      6|  ValueT<K>& Get() {
  239|      6|    return static_cast<Base<K>&>(payload_).value;
  240|      6|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_115ExpressionEaterC2IRPNS0_11FileOptionsEEEOT_:
  157|      4|  ExpressionEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_19EnumValueDescriptorEEEPT_i:
  400|     18|  U* AllocateArray(int array_size) {
  401|     18|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     18|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     18|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     18|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     36|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     18|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     36|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     36|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     18|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     36|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 18]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     36|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     36|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     18|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     18|    int& used = used_.template Get<TypeToUse>();
  409|     18|    U* res = reinterpret_cast<U*>(data + used);
  410|     18|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 18, Folded]
  ------------------
  411|     18|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     18|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     18|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     18|  while (                                                                      \
  |  |  |  |  |  |   62|     18|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     18|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     18|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     18|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     18|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     18|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     18|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     18|    return res;
  413|     18|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_116ParentNumberHashclIPNS0_19EnumValueDescriptorEEEmRKT_:
 1045|     15|  size_t operator()(const T& t) const {
 1046|     15|    return absl::HashOf(ObjectToParentNumber(t));
 1047|     15|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_116ParentNumberHashclIPKNS0_19EnumValueDescriptorEEEmRKT_:
 1045|     14|  size_t operator()(const T& t) const {
 1046|     14|    return absl::HashOf(ObjectToParentNumber(t));
 1047|     14|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_118SymbolByParentHashclINS0_6SymbolEEEmRKT_:
  975|    919|  size_t operator()(const T& s) const {
  976|    919|    return absl::HashOf(s.parent_name_key());
  977|    919|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_116SymbolByParentEqclINS0_6SymbolES4_EEbRKT_RKT0_:
  983|     43|  bool operator()(const T& a, const U& b) const {
  984|     43|    return a.parent_name_key() == b.parent_name_key();
  985|     43|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_116ParentNumberHashclIPNS0_15FieldDescriptorEEEmRKT_:
 1045|    100|  size_t operator()(const T& t) const {
 1046|    100|    return absl::HashOf(ObjectToParentNumber(t));
 1047|    100|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_114ParentNumberEqclIPKNS0_15FieldDescriptorEPS4_EEbRKT_RKT0_:
 1053|      4|  bool operator()(const T& a, const U& b) const {
 1054|      4|    return ObjectToParentNumber(a) == ObjectToParentNumber(b);
 1055|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_116ParentNumberHashclIPKNS0_15FieldDescriptorEEEmRKT_:
 1045|     98|  size_t operator()(const T& t) const {
 1046|     98|    return absl::HashOf(ObjectToParentNumber(t));
 1047|     98|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_14FileDescriptorEEEvi:
  382|      4|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|      4|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|      4|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 4, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|      4|      static_assert(alignof(U) <= 8, "");
  388|      4|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|      4|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_14EnumDescriptorEEEvi:
  382|     49|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     49|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     49|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     98|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     49|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     98|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     98|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 49, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     49|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 49]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     98|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 49, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 49]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 49]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     98|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     98|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     49|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 49, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     49|      static_assert(alignof(U) <= 8, "");
  388|     49|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     49|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     49|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_10DescriptorEEEvi:
  382|     49|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     49|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     49|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     98|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     49|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     98|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     98|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 49, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     49|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 49]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     98|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 49, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 49]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 49]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     98|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     98|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     49|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 49, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     49|      static_assert(alignof(U) <= 8, "");
  388|     49|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     49|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     49|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE9PlanArrayINS0_10Descriptor14ExtensionRangeEEEvi:
  382|     45|  void PlanArray(int array_size) {
  383|       |    // We can't call PlanArray after FinalizePlanning has been called.
  384|     45|    ABSL_CHECK(!has_allocated());
  ------------------
  |  |   41|     45|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     90|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     45|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     90|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     90|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     45|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     90|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 45]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     90|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     90|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  385|     45|    if (std::is_trivially_destructible<U>::value) {
  ------------------
  |  Branch (385:9): [True: 45, Folded]
  ------------------
  386|       |      // Trivial types are aligned to 8 bytes.
  387|     45|      static_assert(alignof(U) <= 8, "");
  388|     45|      total_.template Get<char>() += RoundUpTo<8>(array_size * sizeof(U));
  389|     45|    } else {
  390|       |      // Since we can't use `if constexpr`, just make the expression compile
  391|       |      // when this path is not taken.
  392|      0|      using TypeToUse =
  393|      0|          typename std::conditional<std::is_trivially_destructible<U>::value,
  394|      0|                                    char, U>::type;
  395|      0|      total_.template Get<TypeToUse>() += array_size;
  396|      0|    }
  397|     45|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_14EnumDescriptorEEEPT_i:
  400|     49|  U* AllocateArray(int array_size) {
  401|     49|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     49|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     49|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     49|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     98|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     49|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     98|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     98|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 49, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     49|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 49]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     98|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 49, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 49]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 49]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     98|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     98|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     49|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     49|    int& used = used_.template Get<TypeToUse>();
  409|     49|    U* res = reinterpret_cast<U*>(data + used);
  410|     49|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 49, Folded]
  ------------------
  411|     49|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     49|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     49|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     49|  while (                                                                      \
  |  |  |  |  |  |   62|     49|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 49]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     49|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     49|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     49|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     49|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     49|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     49|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     49|    return res;
  413|     49|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_10DescriptorEEEPT_i:
  400|     49|  U* AllocateArray(int array_size) {
  401|     49|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     49|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     49|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     49|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     98|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     49|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     98|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     98|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 49, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     49|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 49]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     98|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 49, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 49]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 49]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     98|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     98|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     49|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     49|    int& used = used_.template Get<TypeToUse>();
  409|     49|    U* res = reinterpret_cast<U*>(data + used);
  410|     49|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 49, Folded]
  ------------------
  411|     49|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     49|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     49|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     49|  while (                                                                      \
  |  |  |  |  |  |   62|     49|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 49]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     49|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     49|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     49|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     49|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     49|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     49|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     49|    return res;
  413|     49|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_10Descriptor14ExtensionRangeEEEPT_i:
  400|     45|  U* AllocateArray(int array_size) {
  401|     45|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     45|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     45|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     45|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     90|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     45|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     90|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     90|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     45|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     90|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 45]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     90|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     90|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     45|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     45|    int& used = used_.template Get<TypeToUse>();
  409|     45|    U* res = reinterpret_cast<U*>(data + used);
  410|     45|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 45, Folded]
  ------------------
  411|     45|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     45|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     45|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     45|  while (                                                                      \
  |  |  |  |  |  |   62|     45|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 45]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     45|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     45|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     45|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     45|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     45|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     45|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     45|    return res;
  413|     45|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_14FileDescriptorEEEPT_i:
  400|      4|  U* AllocateArray(int array_size) {
  401|      4|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|      4|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|      4|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|      4|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|      4|    int& used = used_.template Get<TypeToUse>();
  409|      4|    U* res = reinterpret_cast<U*>(data + used);
  410|      4|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 4, Folded]
  ------------------
  411|      4|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|      4|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      4|    return res;
  413|      4|  }
_ZN6google8protobuf14DescriptorPool6Tables8AllocateINS0_6Symbol10SubpackageEEEPT_v:
 2010|      2|Type* DescriptorPool::Tables::Allocate() {
 2011|      2|  static_assert(std::is_trivially_destructible<Type>::value, "");
 2012|      2|  static_assert(alignof(Type) <= 8, "");
 2013|      2|  return ::new (AllocateBytes(sizeof(Type))) Type{};
 2014|      2|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_14FileDescriptorEEEPKNT_11OptionsTypeENSt3__117basic_string_viewIcNS8_11char_traitsIcEEEESC_RKNS4_5ProtoEN4absl12lts_202401164SpanIKiEESC_RNS0_8internal13FlatAllocatorE:
 5428|      4|    internal::FlatAllocator& alloc) {
 5429|      4|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 2, False: 2]
  ------------------
 5430|      2|    return &DescriptorT::OptionsType::default_instance();
 5431|      2|  }
 5432|      2|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|      2|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|      2|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 2]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|      2|  const bool parse_success =
 5444|      2|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|      2|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|      2|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      2|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      4|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      2|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      4|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      4|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      2|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      2|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      4|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      4|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|      2|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 2]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|      2|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|      2|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 2]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|      2|  return options;
 5478|      2|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayISL_EEPT_i:
  400|      2|  U* AllocateArray(int array_size) {
  401|      2|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|      2|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|      2|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      2|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      4|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      2|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      4|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      4|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      2|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 2]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      4|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      4|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|      2|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|      2|    int& used = used_.template Get<TypeToUse>();
  409|      2|    U* res = reinterpret_cast<U*>(data + used);
  410|      2|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [Folded, False: 2]
  ------------------
  411|      2|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|      2|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      2|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      2|  while (                                                                      \
  |  |  |  |  |  |   62|      2|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      2|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      2|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      2|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      2|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      2|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      2|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      2|    return res;
  413|      2|  }
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_14FileDescriptorEEEvNS0_7EditionERKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|      4|    bool force_merge) {
 5538|      4|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|      4|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|      4|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|      4|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|      4|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 4]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|      4|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|      4|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 4, False: 0]
  ------------------
 5556|      4|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 4]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|      4|  }
 5561|      4|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|      4|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 4, False: 0]
  |  Branch (5563:44): [True: 0, False: 4]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|      0|    descriptor->merged_features_ = &parent_features;
 5566|      0|    return;
 5567|      0|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|      4|  absl::StatusOr<FeatureSet> merged =
 5571|      4|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|      4|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 4]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|      4|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|      4|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_14FileDescriptorE:
 1142|      4|const FeatureSet& GetParentFeatures(const FileDescriptor* file) {
 1143|      4|  return FeatureSet::default_instance();
 1144|      4|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesINS0_19FileDescriptorProtoENS0_11FileOptionsEEEvRKT_RKT0_NS0_7EditionERNS0_10FeatureSetE:
 5483|      4|                                     FeatureSet& features) {}
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedEv:
  534|      4|  void ExpectConsumed() const {
  535|       |    // We verify that we consumed all the memory requested if there was no
  536|       |    // error in processing.
  537|      4|    Fold({ExpectConsumed<T>()...});
  538|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedIcEEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedIS9_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISA_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISB_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISC_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISD_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISE_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISF_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISG_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISH_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISI_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISJ_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISK_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZNK6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE14ExpectConsumedISL_EEbv:
  566|      4|  bool ExpectConsumed() const {
  567|      4|    ABSL_CHECK_EQ(total_.template Get<U>(), used_.template Get<U>());
  ------------------
  |  |   50|      4|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  568|      4|    return true;
  569|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayISB_EEPT_i:
  400|      4|  U* AllocateArray(int array_size) {
  401|      4|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|      4|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|      4|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|      4|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|      4|    int& used = used_.template Get<TypeToUse>();
  409|      4|    U* res = reinterpret_cast<U*>(data + used);
  410|      4|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [Folded, False: 4]
  ------------------
  411|      4|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|      4|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      4|    return res;
  413|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE15AllocateStringsIJRKS9_EEEPSO_DpOT_:
  416|     10|  const std::string* AllocateStrings(In&&... in) {
  417|     10|    std::string* strings = AllocateArray<std::string>(sizeof...(in));
  418|     10|    std::string* res = strings;
  419|     10|    Fold({(*strings++ = std::string(std::forward<In>(in)))...});
  420|     10|    return res;
  421|     10|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayIPKNS0_14FileDescriptorEEEPT_i:
  400|      4|  U* AllocateArray(int array_size) {
  401|      4|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|      4|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|      4|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|      4|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|      4|    int& used = used_.template Get<TypeToUse>();
  409|      4|    U* res = reinterpret_cast<U*>(data + used);
  410|      4|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 4, Folded]
  ------------------
  411|      4|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|      4|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      4|    return res;
  413|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayIiEEPT_i:
  400|      8|  U* AllocateArray(int array_size) {
  401|      8|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|      8|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|      8|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      8|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     16|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      8|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     16|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     16|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      8|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     16|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 8]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     16|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     16|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|      8|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|      8|    int& used = used_.template Get<TypeToUse>();
  409|      8|    U* res = reinterpret_cast<U*>(data + used);
  410|      8|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 8, Folded]
  ------------------
  411|      8|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|      8|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      8|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      8|  while (                                                                      \
  |  |  |  |  |  |   62|      8|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 8]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      8|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      8|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      8|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      8|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      8|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      8|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      8|    return res;
  413|      8|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_17ServiceDescriptorEEEPT_i:
  400|      4|  U* AllocateArray(int array_size) {
  401|      4|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|      4|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|      4|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|      4|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|      4|    int& used = used_.template Get<TypeToUse>();
  409|      4|    U* res = reinterpret_cast<U*>(data + used);
  410|      4|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 4, Folded]
  ------------------
  411|      4|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|      4|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      4|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      4|  while (                                                                      \
  |  |  |  |  |  |   62|      4|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 4]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      4|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      4|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      4|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      4|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      4|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      4|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|      4|    return res;
  413|      4|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_15FieldDescriptorEEEPT_i:
  400|     94|  U* AllocateArray(int array_size) {
  401|     94|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     94|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     94|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     94|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    188|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     94|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    188|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    188|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 94, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     94|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 94]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    188|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 94, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 94]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 94]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    188|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    188|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     94|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     94|    int& used = used_.template Get<TypeToUse>();
  409|     94|    U* res = reinterpret_cast<U*>(data + used);
  410|     94|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 94, Folded]
  ------------------
  411|     94|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     94|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     94|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     94|  while (                                                                      \
  |  |  |  |  |  |   62|     94|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 94]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     94|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     94|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     94|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     94|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     94|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     94|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     94|    return res;
  413|     94|  }
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_3clERKNS0_15FieldDescriptorERKNS0_20FieldDescriptorProtoE:
 6161|    206|        [&](const FieldDescriptor& field, const FieldDescriptorProto& proto) {
 6162|    206|          if (field.options_->has_ctype() && field.options_->features()
  ------------------
  |  Branch (6162:15): [True: 0, False: 206]
  |  Branch (6162:46): [True: 0, False: 0]
  ------------------
 6163|      0|                                                 .GetExtension(pb::cpp)
 6164|      0|                                                 .has_string_type()) {
 6165|      0|            AddError(field.full_name(), proto,
 6166|      0|                     DescriptorPool::ErrorCollector::TYPE, [&] {
 6167|      0|                       return absl::StrFormat(
 6168|      0|                           "Field %s specifies both string_type and ctype "
 6169|      0|                           "which is not supported.",
 6170|      0|                           field.full_name());
 6171|      0|                     });
 6172|      0|          }
 6173|    206|        });
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_14FileDescriptorES2_EEDaRKT_RKT0_:
 6180|      4|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|      4|            using OptionsT =
 6182|      4|                typename std::remove_const<typename std::remove_pointer<
 6183|      4|                    decltype(descriptor.options_)>::type>::type;
 6184|      4|            using DescriptorT =
 6185|      4|                typename std::remove_const<typename std::remove_reference<
 6186|      4|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|      4|            ResolveFeatures(
 6189|      4|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|      4|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|      4|                    OptionsT*>(descriptor.options_),
 6192|      4|                alloc);
 6193|      4|          });
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_10DescriptorENS0_15DescriptorProtoEEEDaRKT_RKT0_:
 6180|     45|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|     45|            using OptionsT =
 6182|     45|                typename std::remove_const<typename std::remove_pointer<
 6183|     45|                    decltype(descriptor.options_)>::type>::type;
 6184|     45|            using DescriptorT =
 6185|     45|                typename std::remove_const<typename std::remove_reference<
 6186|     45|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|     45|            ResolveFeatures(
 6189|     45|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|     45|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|     45|                    OptionsT*>(descriptor.options_),
 6192|     45|                alloc);
 6193|     45|          });
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesINS0_10DescriptorEEEvRKNT_5ProtoEPS4_PNS4_11OptionsTypeERNS0_8internal13FlatAllocatorE:
 5585|     45|    internal::FlatAllocator& alloc) {
 5586|     45|  ResolveFeaturesImpl(descriptor->file()->edition(), proto, descriptor, options,
 5587|     45|                      alloc, DescriptorPool::ErrorCollector::NAME);
 5588|     45|}
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_10DescriptorEEEvNS0_7EditionERKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|     45|    bool force_merge) {
 5538|     45|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|     45|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|     45|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|     45|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|     45|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     90|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     45|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     90|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     90|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     45|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     90|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 45]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     90|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     90|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|     45|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 45]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|     45|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|     45|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 45, False: 0]
  ------------------
 5556|     45|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 45]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|     45|  }
 5561|     45|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|     45|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 45, False: 0]
  |  Branch (5563:44): [True: 45, False: 0]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|     45|    descriptor->merged_features_ = &parent_features;
 5566|     45|    return;
 5567|     45|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|      0|  absl::StatusOr<FeatureSet> merged =
 5571|      0|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|      0|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 0]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|      0|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_10DescriptorE:
 1146|     45|const FeatureSet& GetParentFeatures(const Descriptor* message) {
 1147|     45|  if (message->containing_type() == nullptr) {
  ------------------
  |  Branch (1147:7): [True: 35, False: 10]
  ------------------
 1148|     35|    return internal::InternalFeatureHelper::GetFeatures(*message->file());
 1149|     35|  }
 1150|     10|  return internal::InternalFeatureHelper::GetFeatures(
 1151|     10|      *message->containing_type());
 1152|     45|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesINS0_15DescriptorProtoENS0_14MessageOptionsEEEvRKT_RKT0_NS0_7EditionERNS0_10FeatureSetE:
 5483|     45|                                     FeatureSet& features) {}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_15OneofDescriptorENS0_20OneofDescriptorProtoEEEDaRKT_RKT0_:
 6180|      2|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|      2|            using OptionsT =
 6182|      2|                typename std::remove_const<typename std::remove_pointer<
 6183|      2|                    decltype(descriptor.options_)>::type>::type;
 6184|      2|            using DescriptorT =
 6185|      2|                typename std::remove_const<typename std::remove_reference<
 6186|      2|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|      2|            ResolveFeatures(
 6189|      2|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|      2|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|      2|                    OptionsT*>(descriptor.options_),
 6192|      2|                alloc);
 6193|      2|          });
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesINS0_15OneofDescriptorEEEvRKNT_5ProtoEPS4_PNS4_11OptionsTypeERNS0_8internal13FlatAllocatorE:
 5585|      2|    internal::FlatAllocator& alloc) {
 5586|      2|  ResolveFeaturesImpl(descriptor->file()->edition(), proto, descriptor, options,
 5587|      2|                      alloc, DescriptorPool::ErrorCollector::NAME);
 5588|      2|}
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_15OneofDescriptorEEEvNS0_7EditionERKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|      2|    bool force_merge) {
 5538|      2|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|      2|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|      2|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|      2|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|      2|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      4|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      2|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      4|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      4|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      2|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 2]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      4|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      4|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|      2|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 2]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|      2|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|      2|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 2, False: 0]
  ------------------
 5556|      2|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 2]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|      2|  }
 5561|      2|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|      2|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 2, False: 0]
  |  Branch (5563:44): [True: 2, False: 0]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|      2|    descriptor->merged_features_ = &parent_features;
 5566|      2|    return;
 5567|      2|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|      0|  absl::StatusOr<FeatureSet> merged =
 5571|      0|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|      0|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 0]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|      0|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_15OneofDescriptorE:
 1154|      2|const FeatureSet& GetParentFeatures(const OneofDescriptor* oneof) {
 1155|      2|  return internal::InternalFeatureHelper::GetFeatures(
 1156|      2|      *oneof->containing_type());
 1157|      2|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesINS0_20OneofDescriptorProtoENS0_12OneofOptionsEEEvRKT_RKT0_NS0_7EditionERNS0_10FeatureSetE:
 5483|      2|                                     FeatureSet& features) {}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_10Descriptor14ExtensionRangeENS0_30DescriptorProto_ExtensionRangeEEEDaRKT_RKT0_:
 6180|     14|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|     14|            using OptionsT =
 6182|     14|                typename std::remove_const<typename std::remove_pointer<
 6183|     14|                    decltype(descriptor.options_)>::type>::type;
 6184|     14|            using DescriptorT =
 6185|     14|                typename std::remove_const<typename std::remove_reference<
 6186|     14|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|     14|            ResolveFeatures(
 6189|     14|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|     14|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|     14|                    OptionsT*>(descriptor.options_),
 6192|     14|                alloc);
 6193|     14|          });
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesINS0_10Descriptor14ExtensionRangeEEEvRKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorE:
 5585|     14|    internal::FlatAllocator& alloc) {
 5586|     14|  ResolveFeaturesImpl(descriptor->file()->edition(), proto, descriptor, options,
 5587|     14|                      alloc, DescriptorPool::ErrorCollector::NAME);
 5588|     14|}
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_10Descriptor14ExtensionRangeEEEvNS0_7EditionERKNT_5ProtoEPS6_PNS6_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|     14|    bool force_merge) {
 5538|     14|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|     14|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|     14|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|     14|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|     14|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     28|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     14|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     28|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     28|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 14, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     14|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     28|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 14, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 14]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     28|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     28|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|     14|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 14]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|     14|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|     14|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 14, False: 0]
  ------------------
 5556|     14|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 14]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|     14|  }
 5561|     14|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|     14|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 14, False: 0]
  |  Branch (5563:44): [True: 14, False: 0]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|     14|    descriptor->merged_features_ = &parent_features;
 5566|     14|    return;
 5567|     14|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|      0|  absl::StatusOr<FeatureSet> merged =
 5571|      0|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|      0|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 0]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|      0|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_10Descriptor14ExtensionRangeE:
 1159|     14|const FeatureSet& GetParentFeatures(const Descriptor::ExtensionRange* range) {
 1160|     14|  return internal::InternalFeatureHelper::GetFeatures(
 1161|     14|      *range->containing_type());
 1162|     14|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesINS0_30DescriptorProto_ExtensionRangeENS0_21ExtensionRangeOptionsEEEvRKT_RKT0_NS0_7EditionERNS0_10FeatureSetE:
 5483|     14|                                     FeatureSet& features) {}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_14EnumDescriptorENS0_19EnumDescriptorProtoEEEDaRKT_RKT0_:
 6180|     18|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|     18|            using OptionsT =
 6182|     18|                typename std::remove_const<typename std::remove_pointer<
 6183|     18|                    decltype(descriptor.options_)>::type>::type;
 6184|     18|            using DescriptorT =
 6185|     18|                typename std::remove_const<typename std::remove_reference<
 6186|     18|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|     18|            ResolveFeatures(
 6189|     18|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|     18|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|     18|                    OptionsT*>(descriptor.options_),
 6192|     18|                alloc);
 6193|     18|          });
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesINS0_14EnumDescriptorEEEvRKNT_5ProtoEPS4_PNS4_11OptionsTypeERNS0_8internal13FlatAllocatorE:
 5585|     18|    internal::FlatAllocator& alloc) {
 5586|     18|  ResolveFeaturesImpl(descriptor->file()->edition(), proto, descriptor, options,
 5587|     18|                      alloc, DescriptorPool::ErrorCollector::NAME);
 5588|     18|}
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_14EnumDescriptorEEEvNS0_7EditionERKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|     18|    bool force_merge) {
 5538|     18|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|     18|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|     18|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|     18|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|     18|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     36|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     18|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     36|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     36|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     18|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     36|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 18]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     36|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     36|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|     18|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 18]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|     18|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|     18|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 18, False: 0]
  ------------------
 5556|     18|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 18]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|     18|  }
 5561|     18|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|     18|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 18, False: 0]
  |  Branch (5563:44): [True: 18, False: 0]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|     18|    descriptor->merged_features_ = &parent_features;
 5566|     18|    return;
 5567|     18|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|      0|  absl::StatusOr<FeatureSet> merged =
 5571|      0|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|      0|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 0]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|      0|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_14EnumDescriptorE:
 1179|     18|const FeatureSet& GetParentFeatures(const EnumDescriptor* enm) {
 1180|     18|  if (enm->containing_type() == nullptr) {
  ------------------
  |  Branch (1180:7): [True: 1, False: 17]
  ------------------
 1181|      1|    return internal::InternalFeatureHelper::GetFeatures(*enm->file());
 1182|      1|  }
 1183|     17|  return internal::InternalFeatureHelper::GetFeatures(*enm->containing_type());
 1184|     18|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesINS0_19EnumDescriptorProtoENS0_11EnumOptionsEEEvRKT_RKT0_NS0_7EditionERNS0_10FeatureSetE:
 5483|     18|                                     FeatureSet& features) {}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_19EnumValueDescriptorENS0_24EnumValueDescriptorProtoEEEDaRKT_RKT0_:
 6180|     86|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|     86|            using OptionsT =
 6182|     86|                typename std::remove_const<typename std::remove_pointer<
 6183|     86|                    decltype(descriptor.options_)>::type>::type;
 6184|     86|            using DescriptorT =
 6185|     86|                typename std::remove_const<typename std::remove_reference<
 6186|     86|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|     86|            ResolveFeatures(
 6189|     86|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|     86|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|     86|                    OptionsT*>(descriptor.options_),
 6192|     86|                alloc);
 6193|     86|          });
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesINS0_19EnumValueDescriptorEEEvRKNT_5ProtoEPS4_PNS4_11OptionsTypeERNS0_8internal13FlatAllocatorE:
 5585|     86|    internal::FlatAllocator& alloc) {
 5586|     86|  ResolveFeaturesImpl(descriptor->file()->edition(), proto, descriptor, options,
 5587|     86|                      alloc, DescriptorPool::ErrorCollector::NAME);
 5588|     86|}
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_19EnumValueDescriptorEEEvNS0_7EditionERKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|     86|    bool force_merge) {
 5538|     86|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|     86|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|     86|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|     86|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|     86|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    172|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     86|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    172|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    172|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 86, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     86|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 86]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    172|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 86, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 86]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 86]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    172|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    172|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|     86|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 86]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|     86|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|     86|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 86, False: 0]
  ------------------
 5556|     86|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 86]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|     86|  }
 5561|     86|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|     86|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 86, False: 0]
  |  Branch (5563:44): [True: 86, False: 0]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|     86|    descriptor->merged_features_ = &parent_features;
 5566|     86|    return;
 5567|     86|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|      0|  absl::StatusOr<FeatureSet> merged =
 5571|      0|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|      0|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 0]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|      0|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_19EnumValueDescriptorE:
 1186|     86|const FeatureSet& GetParentFeatures(const EnumValueDescriptor* value) {
 1187|     86|  return internal::InternalFeatureHelper::GetFeatures(*value->type());
 1188|     86|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesINS0_24EnumValueDescriptorProtoENS0_16EnumValueOptionsEEEvRKT_RKT0_NS0_7EditionERNS0_10FeatureSetE:
 5483|     86|                                     FeatureSet& features) {}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_4clINS0_15FieldDescriptorENS0_20FieldDescriptorProtoEEEDaRKT_RKT0_:
 6180|    206|          *result, proto, [&](const auto& descriptor, const auto& proto) {
 6181|    206|            using OptionsT =
 6182|    206|                typename std::remove_const<typename std::remove_pointer<
 6183|    206|                    decltype(descriptor.options_)>::type>::type;
 6184|    206|            using DescriptorT =
 6185|    206|                typename std::remove_const<typename std::remove_reference<
 6186|    206|                    decltype(descriptor)>::type>::type;
 6187|       |
 6188|    206|            ResolveFeatures(
 6189|    206|                proto, const_cast<DescriptorT*>(&descriptor),
 6190|    206|                const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6191|    206|                    OptionsT*>(descriptor.options_),
 6192|    206|                alloc);
 6193|    206|          });
_ZN6google8protobuf17DescriptorBuilder15ResolveFeaturesINS0_15FieldDescriptorEEEvRKNT_5ProtoEPS4_PNS4_11OptionsTypeERNS0_8internal13FlatAllocatorE:
 5585|    206|    internal::FlatAllocator& alloc) {
 5586|    206|  ResolveFeaturesImpl(descriptor->file()->edition(), proto, descriptor, options,
 5587|    206|                      alloc, DescriptorPool::ErrorCollector::NAME);
 5588|    206|}
_ZN6google8protobuf17DescriptorBuilder19ResolveFeaturesImplINS0_15FieldDescriptorEEEvNS0_7EditionERKNT_5ProtoEPS5_PNS5_11OptionsTypeERNS0_8internal13FlatAllocatorENS0_14DescriptorPool14ErrorCollector13ErrorLocationEb:
 5537|    206|    bool force_merge) {
 5538|    206|  const FeatureSet& parent_features = GetParentFeatures(descriptor);
 5539|    206|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5540|    206|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5541|       |
 5542|    206|  ABSL_CHECK(feature_resolver_.has_value());
  ------------------
  |  |   41|    206|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    412|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    206|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    412|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    412|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 206, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|    206|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 206]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    412|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 206, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 206]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 206]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    412|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    412|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5543|       |
 5544|    206|  if (options->has_features()) {
  ------------------
  |  Branch (5544:7): [True: 0, False: 206]
  ------------------
 5545|       |    // Remove the features from the child's options proto to avoid leaking
 5546|       |    // internal details.
 5547|      0|    descriptor->proto_features_ =
 5548|      0|        tables_->InternFeatureSet(std::move(*options->mutable_features()));
 5549|      0|    options->clear_features();
 5550|      0|  }
 5551|       |
 5552|    206|  FeatureSet base_features = *descriptor->proto_features_;
 5553|       |
 5554|       |  // Handle feature inference from proto2/proto3.
 5555|    206|  if (IsLegacyEdition(edition)) {
  ------------------
  |  Branch (5555:7): [True: 206, False: 0]
  ------------------
 5556|    206|    if (descriptor->proto_features_ != &FeatureSet::default_instance()) {
  ------------------
  |  Branch (5556:9): [True: 0, False: 206]
  ------------------
 5557|      0|      AddError(descriptor->name(), proto, error_location,
 5558|      0|               "Features are only valid under editions.");
 5559|      0|    }
 5560|    206|  }
 5561|    206|  InferLegacyProtoFeatures(proto, *options, edition, base_features);
 5562|       |
 5563|    206|  if (base_features.ByteSizeLong() == 0 && !force_merge) {
  ------------------
  |  Branch (5563:7): [True: 0, False: 206]
  |  Branch (5563:44): [True: 0, False: 0]
  ------------------
 5564|       |    // Nothing to merge, and we aren't forcing it.
 5565|      0|    descriptor->merged_features_ = &parent_features;
 5566|      0|    return;
 5567|      0|  }
 5568|       |
 5569|       |  // Calculate the merged features for this target.
 5570|    206|  absl::StatusOr<FeatureSet> merged =
 5571|    206|      feature_resolver_->MergeFeatures(parent_features, base_features);
 5572|    206|  if (!merged.ok()) {
  ------------------
  |  Branch (5572:7): [True: 0, False: 206]
  ------------------
 5573|      0|    AddError(descriptor->name(), proto, error_location,
 5574|      0|             [&] { return std::string(merged.status().message()); });
 5575|      0|    return;
 5576|      0|  }
 5577|       |
 5578|    206|  descriptor->merged_features_ = tables_->InternFeatureSet(*std::move(merged));
 5579|    206|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117GetParentFeaturesEPKNS0_15FieldDescriptorE:
 1164|    206|const FeatureSet& GetParentFeatures(const FieldDescriptor* field) {
 1165|    206|  if (field->containing_oneof() != nullptr) {
  ------------------
  |  Branch (1165:7): [True: 7, False: 199]
  ------------------
 1166|      7|    return internal::InternalFeatureHelper::GetFeatures(
 1167|      7|        *field->containing_oneof());
 1168|    199|  } else if (field->is_extension()) {
  ------------------
  |  Branch (1168:14): [True: 1, False: 198]
  ------------------
 1169|      1|    if (field->extension_scope() == nullptr) {
  ------------------
  |  Branch (1169:9): [True: 1, False: 0]
  ------------------
 1170|      1|      return internal::InternalFeatureHelper::GetFeatures(*field->file());
 1171|      1|    }
 1172|      0|    return internal::InternalFeatureHelper::GetFeatures(
 1173|      0|        *field->extension_scope());
 1174|      1|  }
 1175|    198|  return internal::InternalFeatureHelper::GetFeatures(
 1176|    198|      *field->containing_type());
 1177|    206|}
descriptor.cc:_ZN6google8protobufL24InferLegacyProtoFeaturesERKNS0_20FieldDescriptorProtoERKNS0_12FieldOptionsENS0_7EditionERNS0_10FeatureSetE:
 5487|    206|                                     Edition edition, FeatureSet& features) {
 5488|    206|  if (!features.MutableExtension(pb::cpp)->has_string_type()) {
  ------------------
  |  Branch (5488:7): [True: 206, False: 0]
  ------------------
 5489|    206|    if (options.ctype() == FieldOptions::CORD) {
  ------------------
  |  Branch (5489:9): [True: 0, False: 206]
  ------------------
 5490|      0|      features.MutableExtension(pb::cpp)->set_string_type(
 5491|      0|          pb::CppFeatures::CORD);
 5492|      0|    }
 5493|    206|  }
 5494|       |
 5495|       |  // Everything below is specifically for proto2/proto.
 5496|    206|  if (!IsLegacyEdition(edition)) return;
  ------------------
  |  Branch (5496:7): [True: 0, False: 206]
  ------------------
 5497|       |
 5498|    206|  if (proto.label() == FieldDescriptorProto::LABEL_REQUIRED) {
  ------------------
  |  Branch (5498:7): [True: 2, False: 204]
  ------------------
 5499|      2|    features.set_field_presence(FeatureSet::LEGACY_REQUIRED);
 5500|      2|  }
 5501|    206|  if (proto.type() == FieldDescriptorProto::TYPE_GROUP) {
  ------------------
  |  Branch (5501:7): [True: 0, False: 206]
  ------------------
 5502|      0|    features.set_message_encoding(FeatureSet::DELIMITED);
 5503|      0|  }
 5504|    206|  if (options.packed()) {
  ------------------
  |  Branch (5504:7): [True: 3, False: 203]
  ------------------
 5505|      3|    features.set_repeated_field_encoding(FeatureSet::PACKED);
 5506|      3|  }
 5507|    206|  if (edition == Edition::EDITION_PROTO3) {
  ------------------
  |  Branch (5507:7): [True: 2, False: 204]
  ------------------
 5508|      2|    if (options.has_packed() && !options.packed()) {
  ------------------
  |  Branch (5508:9): [True: 0, False: 2]
  |  Branch (5508:33): [True: 0, False: 0]
  ------------------
 5509|      0|      features.set_repeated_field_encoding(FeatureSet::EXPANDED);
 5510|      0|    }
 5511|      2|  }
 5512|    206|}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_5clERKNS0_15FieldDescriptorE:
 6196|    206|    internal::VisitDescriptors(*result, [&](const FieldDescriptor& field) {
 6197|    206|      if (result->edition() >= Edition::EDITION_2024 &&
  ------------------
  |  Branch (6197:11): [True: 0, False: 206]
  ------------------
 6198|      0|          field.options().has_ctype()) {
  ------------------
  |  Branch (6198:11): [True: 0, False: 0]
  ------------------
 6199|       |        // "ctype" is no longer supported in edition 2024 and beyond.
 6200|      0|        AddError(
 6201|      0|            field.full_name(), proto, DescriptorPool::ErrorCollector::NAME,
 6202|      0|            "ctype option is not allowed under edition 2024 and beyond. Use "
 6203|      0|            "the feature string_type = VIEW|CORD|STRING|... instead.");
 6204|      0|      }
 6205|    206|      EnforceCTypeStringTypeConsistency(
 6206|    206|          field.file()->edition(), field.cpp_type(),
 6207|    206|          field.merged_features_->GetExtension(pb::cpp),
 6208|    206|          const_cast<  // NOLINT(google3-runtime-proto-const-cast)
 6209|    206|              FieldOptions&>(*field.options_));
 6210|    206|    });
descriptor.cc:_ZN6google8protobufL33EnforceCTypeStringTypeConsistencyENS0_7EditionENS0_8internal19FieldDescriptorLite7CppTypeERKN2pb11CppFeaturesERNS0_12FieldOptionsE:
 5518|    206|    const pb::CppFeatures& cpp_features, FieldOptions& options) {
 5519|    206|  if (&options == &FieldOptions::default_instance()) return;
  ------------------
  |  Branch (5519:7): [True: 189, False: 17]
  ------------------
 5520|     17|  if (type == FieldDescriptor::CPPTYPE_STRING) {
  ------------------
  |  Branch (5520:7): [True: 0, False: 17]
  ------------------
 5521|      0|    switch (cpp_features.string_type()) {
 5522|      0|      case pb::CppFeatures::CORD:
  ------------------
  |  Branch (5522:7): [True: 0, False: 0]
  ------------------
 5523|      0|        options.set_ctype(FieldOptions::CORD);
 5524|      0|        break;
 5525|      0|      default:
  ------------------
  |  Branch (5525:7): [True: 0, False: 0]
  ------------------
 5526|      0|        break;
 5527|      0|    }
 5528|      0|  }
 5529|     17|}
descriptor.cc:_ZZN6google8protobuf17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS0_8internal13FlatAllocatorEENK3$_6clERKNS0_15FieldDescriptorERKNS0_20FieldDescriptorProtoE:
 6215|    206|        [&](const FieldDescriptor& field, const FieldDescriptorProto& proto) {
 6216|    206|          PostProcessFieldFeatures(const_cast<FieldDescriptor&>(field), proto);
 6217|    206|        });
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE15AllocateStringsIJRKNS3_17basic_string_viewIcS6_EES9_EEEPKS9_DpOT_:
  416|    175|  const std::string* AllocateStrings(In&&... in) {
  417|    175|    std::string* strings = AllocateArray<std::string>(sizeof...(in));
  418|    175|    std::string* res = strings;
  419|    175|    Fold({(*strings++ = std::string(std::forward<In>(in)))...});
  420|    175|    return res;
  421|    175|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_15OneofDescriptorEEEPT_i:
  400|     45|  U* AllocateArray(int array_size) {
  401|     45|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     45|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     45|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     45|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     90|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     45|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     90|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     90|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     45|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     90|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 45]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     90|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     90|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     45|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     45|    int& used = used_.template Get<TypeToUse>();
  409|     45|    U* res = reinterpret_cast<U*>(data + used);
  410|     45|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 45, Folded]
  ------------------
  411|     45|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     45|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     45|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     45|  while (                                                                      \
  |  |  |  |  |  |   62|     45|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 45]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     45|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     45|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     45|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     45|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     45|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     45|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     45|    return res;
  413|     45|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_10Descriptor13ReservedRangeEEEPT_i:
  400|     45|  U* AllocateArray(int array_size) {
  401|     45|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     45|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     45|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     45|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     90|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     45|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     90|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     90|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     45|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     90|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 45, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 45]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 45]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     90|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     90|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     45|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     45|    int& used = used_.template Get<TypeToUse>();
  409|     45|    U* res = reinterpret_cast<U*>(data + used);
  410|     45|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 45, Folded]
  ------------------
  411|     45|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     45|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     45|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     45|  while (                                                                      \
  |  |  |  |  |  |   62|     45|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 45]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     45|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     45|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     45|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     45|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     45|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     45|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     45|    return res;
  413|     45|  }
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsINS0_10DescriptorEEEvRKNT_5ProtoEPS4_iNSt3__117basic_string_viewIcNS9_11char_traitsIcEEEERNS0_8internal13FlatAllocatorE:
 5396|     45|    internal::FlatAllocator& alloc) {
 5397|     45|  std::vector<int> options_path;
 5398|     45|  descriptor->GetLocationPath(&options_path);
 5399|     45|  options_path.push_back(options_field_tag);
 5400|     45|  auto options = AllocateOptionsImpl<DescriptorT>(
 5401|     45|      descriptor->full_name(), descriptor->full_name(), proto, options_path,
 5402|     45|      option_name, alloc);
 5403|     45|  descriptor->options_ = options;
 5404|     45|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5405|     45|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5406|     45|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_10DescriptorEEEPKNT_11OptionsTypeENSt3__117basic_string_viewIcNS8_11char_traitsIcEEEESC_RKNS4_5ProtoEN4absl12lts_202401164SpanIKiEESC_RNS0_8internal13FlatAllocatorE:
 5428|     45|    internal::FlatAllocator& alloc) {
 5429|     45|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 45, False: 0]
  ------------------
 5430|     45|    return &DescriptorT::OptionsType::default_instance();
 5431|     45|  }
 5432|      0|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|      0|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|      0|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 0]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|      0|  const bool parse_success =
 5444|      0|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|      0|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|      0|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 0]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|      0|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|      0|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 0]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|      0|  return options;
 5478|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayIPKS9_EEPT_i:
  400|     63|  U* AllocateArray(int array_size) {
  401|     63|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     63|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     63|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     63|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    126|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     63|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    126|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    126|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 63, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     63|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 63]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    126|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 63, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 63]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 63]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    126|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    126|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     63|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     63|    int& used = used_.template Get<TypeToUse>();
  409|     63|    U* res = reinterpret_cast<U*>(data + used);
  410|     63|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 63, Folded]
  ------------------
  411|     63|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     63|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     63|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     63|  while (                                                                      \
  |  |  |  |  |  |   62|     63|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 63]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     63|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     63|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     63|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     63|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     63|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     63|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     63|    return res;
  413|     63|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE18AllocateFieldNamesENS3_17basic_string_viewIcS6_EESO_PKS9_:
  470|    206|                                      const std::string* opt_json_name) {
  471|    206|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|    206|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|    412|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|    206|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|    412|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|    412|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 206, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|    206|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 206]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    412|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 206, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 206]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 206]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|    412|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|    412|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  472|       |
  473|    206|    std::string full_name =
  474|    206|        scope.empty() ? std::string(name) : absl::StrCat(scope, ".", name);
  ------------------
  |  Branch (474:9): [True: 0, False: 206]
  ------------------
  475|       |
  476|       |    // Fast path for snake_case names, which follow the style guide.
  477|    206|    if (opt_json_name == nullptr) {
  ------------------
  |  Branch (477:9): [True: 206, False: 0]
  ------------------
  478|    206|      switch (GetFieldNameCase(name)) {
  479|    110|        case FieldNameCase::kAllLower:
  ------------------
  |  Branch (479:9): [True: 110, False: 96]
  ------------------
  480|       |          // Case 1: they are all the same.
  481|    110|          return {AllocateStrings(name, std::move(full_name)), 0, 0, 0};
  482|     96|        case FieldNameCase::kSnakeCase:
  ------------------
  |  Branch (482:9): [True: 96, False: 110]
  ------------------
  483|       |          // Case 2: name==lower, camel==json
  484|     96|          return {AllocateStrings(name, std::move(full_name),
  485|     96|                                  ToCamelCase(name, /* lower_first = */ true)),
  486|     96|                  0, 2, 2};
  487|      0|        default:
  ------------------
  |  Branch (487:9): [True: 0, False: 206]
  ------------------
  488|      0|          break;
  489|    206|      }
  490|    206|    }
  491|       |
  492|      0|    std::vector<std::string> names;
  493|      0|    names.emplace_back(name);
  494|      0|    names.push_back(std::move(full_name));
  495|       |
  496|      0|    const auto push_name = [&](std::string new_name) {
  497|      0|      for (size_t i = 0; i < names.size(); ++i) {
  498|       |        // Do not compare the full_name. It is unlikely to match, except in
  499|       |        // custom json_name. We are not taking this into account in
  500|       |        // PlanFieldNames so better to not try it.
  501|      0|        if (i == 1) continue;
  502|      0|        if (names[i] == new_name) return i;
  503|      0|      }
  504|      0|      names.push_back(std::move(new_name));
  505|      0|      return names.size() - 1;
  506|      0|    };
  507|       |
  508|      0|    FieldNamesResult result{nullptr, 0, 0, 0};
  509|       |
  510|      0|    std::string lowercase_name = std::string(name);
  511|      0|    absl::AsciiStrToLower(&lowercase_name);
  512|      0|    result.lowercase_index = push_name(std::move(lowercase_name));
  513|      0|    result.camelcase_index =
  514|      0|        push_name(ToCamelCase(name, /* lower_first = */ true));
  515|      0|    result.json_index =
  516|      0|        push_name(opt_json_name != nullptr ? *opt_json_name : ToJsonName(name));
  ------------------
  |  Branch (516:19): [True: 0, False: 0]
  ------------------
  517|       |
  518|      0|    std::string* all_names = AllocateArray<std::string>(names.size());
  519|      0|    result.array = all_names;
  520|      0|    std::move(names.begin(), names.end(), all_names);
  521|       |
  522|      0|    return result;
  523|    206|  }
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE15AllocateStringsIJRKNS3_17basic_string_viewIcS6_EES9_S9_EEEPKS9_DpOT_:
  416|     96|  const std::string* AllocateStrings(In&&... in) {
  417|     96|    std::string* strings = AllocateArray<std::string>(sizeof...(in));
  418|     96|    std::string* res = strings;
  419|     96|    Fold({(*strings++ = std::string(std::forward<In>(in)))...});
  420|     96|    return res;
  421|     96|  }
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsINS0_15FieldDescriptorEEEvRKNT_5ProtoEPS4_iNSt3__117basic_string_viewIcNS9_11char_traitsIcEEEERNS0_8internal13FlatAllocatorE:
 5396|    206|    internal::FlatAllocator& alloc) {
 5397|    206|  std::vector<int> options_path;
 5398|    206|  descriptor->GetLocationPath(&options_path);
 5399|    206|  options_path.push_back(options_field_tag);
 5400|    206|  auto options = AllocateOptionsImpl<DescriptorT>(
 5401|    206|      descriptor->full_name(), descriptor->full_name(), proto, options_path,
 5402|    206|      option_name, alloc);
 5403|    206|  descriptor->options_ = options;
 5404|    206|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5405|    206|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5406|    206|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_15FieldDescriptorEEEPKNT_11OptionsTypeENSt3__117basic_string_viewIcNS8_11char_traitsIcEEEESC_RKNS4_5ProtoEN4absl12lts_202401164SpanIKiEESC_RNS0_8internal13FlatAllocatorE:
 5428|    206|    internal::FlatAllocator& alloc) {
 5429|    206|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 189, False: 17]
  ------------------
 5430|    189|    return &DescriptorT::OptionsType::default_instance();
 5431|    189|  }
 5432|     17|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|     17|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|     17|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 17]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|     17|  const bool parse_success =
 5444|     17|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|     17|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|     17|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     17|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     34|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     17|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     34|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     34|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 17, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     17|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     17|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 17, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     34|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     34|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|     17|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 17]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|     17|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|     17|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 17]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|     17|  return options;
 5478|     17|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayISE_EEPT_i:
  400|     17|  U* AllocateArray(int array_size) {
  401|     17|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     17|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     17|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     17|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     34|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     17|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     34|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     34|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 17, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     17|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     34|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 17, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 17]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     34|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     34|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     17|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     17|    int& used = used_.template Get<TypeToUse>();
  409|     17|    U* res = reinterpret_cast<U*>(data + used);
  410|     17|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [Folded, False: 17]
  ------------------
  411|     17|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     17|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     17|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     17|  while (                                                                      \
  |  |  |  |  |  |   62|     17|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     17|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     17|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     17|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     17|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     17|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     17|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     17|    return res;
  413|     17|  }
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsINS0_10Descriptor14ExtensionRangeEEEvRKNT_5ProtoEPS5_iNSt3__117basic_string_viewIcNSA_11char_traitsIcEEEERNS0_8internal13FlatAllocatorE:
 5396|     14|    internal::FlatAllocator& alloc) {
 5397|     14|  std::vector<int> options_path;
 5398|     14|  descriptor->GetLocationPath(&options_path);
 5399|     14|  options_path.push_back(options_field_tag);
 5400|     14|  auto options = AllocateOptionsImpl<DescriptorT>(
 5401|     14|      descriptor->full_name(), descriptor->full_name(), proto, options_path,
 5402|     14|      option_name, alloc);
 5403|     14|  descriptor->options_ = options;
 5404|     14|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5405|     14|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5406|     14|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_10Descriptor14ExtensionRangeEEEPKNT_11OptionsTypeENSt3__117basic_string_viewIcNS9_11char_traitsIcEEEESD_RKNS5_5ProtoEN4absl12lts_202401164SpanIKiEESD_RNS0_8internal13FlatAllocatorE:
 5428|     14|    internal::FlatAllocator& alloc) {
 5429|     14|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 14, False: 0]
  ------------------
 5430|     14|    return &DescriptorT::OptionsType::default_instance();
 5431|     14|  }
 5432|      0|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|      0|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|      0|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 0]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|      0|  const bool parse_success =
 5444|      0|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|      0|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|      0|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 0]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|      0|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|      0|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 0]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|      0|  return options;
 5478|      0|}
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsINS0_15OneofDescriptorEEEvRKNT_5ProtoEPS4_iNSt3__117basic_string_viewIcNS9_11char_traitsIcEEEERNS0_8internal13FlatAllocatorE:
 5396|      2|    internal::FlatAllocator& alloc) {
 5397|      2|  std::vector<int> options_path;
 5398|      2|  descriptor->GetLocationPath(&options_path);
 5399|      2|  options_path.push_back(options_field_tag);
 5400|      2|  auto options = AllocateOptionsImpl<DescriptorT>(
 5401|      2|      descriptor->full_name(), descriptor->full_name(), proto, options_path,
 5402|      2|      option_name, alloc);
 5403|      2|  descriptor->options_ = options;
 5404|      2|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5405|      2|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5406|      2|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_15OneofDescriptorEEEPKNT_11OptionsTypeENSt3__117basic_string_viewIcNS8_11char_traitsIcEEEESC_RKNS4_5ProtoEN4absl12lts_202401164SpanIKiEESC_RNS0_8internal13FlatAllocatorE:
 5428|      2|    internal::FlatAllocator& alloc) {
 5429|      2|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 2, False: 0]
  ------------------
 5430|      2|    return &DescriptorT::OptionsType::default_instance();
 5431|      2|  }
 5432|      0|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|      0|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|      0|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 0]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|      0|  const bool parse_success =
 5444|      0|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|      0|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|      0|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 0]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|      0|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|      0|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 0]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|      0|  return options;
 5478|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE13AllocateArrayINS0_14EnumDescriptor13ReservedRangeEEEPT_i:
  400|     18|  U* AllocateArray(int array_size) {
  401|     18|    constexpr bool trivial = std::is_trivially_destructible<U>::value;
  402|     18|    using TypeToUse = typename std::conditional<trivial, char, U>::type;
  403|       |
  404|       |    // We can only allocate after FinalizePlanning has been called.
  405|     18|    ABSL_CHECK(has_allocated());
  ------------------
  |  |   41|     18|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     36|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     18|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     36|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     36|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     18|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     36|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 18]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     36|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     36|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  406|       |
  407|     18|    TypeToUse*& data = pointers_.template Get<TypeToUse>();
  408|     18|    int& used = used_.template Get<TypeToUse>();
  409|     18|    U* res = reinterpret_cast<U*>(data + used);
  410|     18|    used += trivial ? RoundUpTo<8>(array_size * sizeof(U)) : array_size;
  ------------------
  |  Branch (410:13): [True: 18, Folded]
  ------------------
  411|     18|    ABSL_CHECK_LE(used, total_.template Get<TypeToUse>());
  ------------------
  |  |   54|     18|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|     18|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|     18|  while (                                                                      \
  |  |  |  |  |  |   62|     18|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|     18|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|     18|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|     18|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|     18|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|     18|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|     18|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|     18|    return res;
  413|     18|  }
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsINS0_14EnumDescriptorEEEvRKNT_5ProtoEPS4_iNSt3__117basic_string_viewIcNS9_11char_traitsIcEEEERNS0_8internal13FlatAllocatorE:
 5396|     18|    internal::FlatAllocator& alloc) {
 5397|     18|  std::vector<int> options_path;
 5398|     18|  descriptor->GetLocationPath(&options_path);
 5399|     18|  options_path.push_back(options_field_tag);
 5400|     18|  auto options = AllocateOptionsImpl<DescriptorT>(
 5401|     18|      descriptor->full_name(), descriptor->full_name(), proto, options_path,
 5402|     18|      option_name, alloc);
 5403|     18|  descriptor->options_ = options;
 5404|     18|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5405|     18|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5406|     18|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_14EnumDescriptorEEEPKNT_11OptionsTypeENSt3__117basic_string_viewIcNS8_11char_traitsIcEEEESC_RKNS4_5ProtoEN4absl12lts_202401164SpanIKiEESC_RNS0_8internal13FlatAllocatorE:
 5428|     18|    internal::FlatAllocator& alloc) {
 5429|     18|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 18, False: 0]
  ------------------
 5430|     18|    return &DescriptorT::OptionsType::default_instance();
 5431|     18|  }
 5432|      0|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|      0|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|      0|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 0]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|      0|  const bool parse_success =
 5444|      0|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|      0|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|      0|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 0]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|      0|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|      0|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 0]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|      0|  return options;
 5478|      0|}
descriptor.cc:_ZN6google8protobuf12_GLOBAL__N_117FlatAllocatorImplIJcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS0_14SourceCodeInfoENS0_20FileDescriptorTablesENS0_10FeatureSetENS0_14MessageOptionsENS0_12FieldOptionsENS0_11EnumOptionsENS0_16EnumValueOptionsENS0_21ExtensionRangeOptionsENS0_12OneofOptionsENS0_14ServiceOptionsENS0_13MethodOptionsENS0_11FileOptionsEEE15AllocateStringsIJRKS9_S9_EEEPSO_DpOT_:
  416|     86|  const std::string* AllocateStrings(In&&... in) {
  417|     86|    std::string* strings = AllocateArray<std::string>(sizeof...(in));
  418|     86|    std::string* res = strings;
  419|     86|    Fold({(*strings++ = std::string(std::forward<In>(in)))...});
  420|     86|    return res;
  421|     86|  }
_ZN6google8protobuf17DescriptorBuilder15AllocateOptionsINS0_19EnumValueDescriptorEEEvRKNT_5ProtoEPS4_iNSt3__117basic_string_viewIcNS9_11char_traitsIcEEEERNS0_8internal13FlatAllocatorE:
 5396|     86|    internal::FlatAllocator& alloc) {
 5397|     86|  std::vector<int> options_path;
 5398|     86|  descriptor->GetLocationPath(&options_path);
 5399|     86|  options_path.push_back(options_field_tag);
 5400|     86|  auto options = AllocateOptionsImpl<DescriptorT>(
 5401|     86|      descriptor->full_name(), descriptor->full_name(), proto, options_path,
 5402|     86|      option_name, alloc);
 5403|     86|  descriptor->options_ = options;
 5404|     86|  descriptor->proto_features_ = &FeatureSet::default_instance();
 5405|     86|  descriptor->merged_features_ = &FeatureSet::default_instance();
 5406|     86|}
_ZN6google8protobuf17DescriptorBuilder19AllocateOptionsImplINS0_19EnumValueDescriptorEEEPKNT_11OptionsTypeENSt3__117basic_string_viewIcNS8_11char_traitsIcEEEESC_RKNS4_5ProtoEN4absl12lts_202401164SpanIKiEESC_RNS0_8internal13FlatAllocatorE:
 5428|     86|    internal::FlatAllocator& alloc) {
 5429|     86|  if (!proto.has_options()) {
  ------------------
  |  Branch (5429:7): [True: 86, False: 0]
  ------------------
 5430|     86|    return &DescriptorT::OptionsType::default_instance();
 5431|     86|  }
 5432|      0|  const typename DescriptorT::OptionsType& orig_options = proto.options();
 5433|       |
 5434|      0|  auto* options = alloc.AllocateArray<typename DescriptorT::OptionsType>(1);
 5435|       |
 5436|      0|  if (!orig_options.IsInitialized()) {
  ------------------
  |  Branch (5436:7): [True: 0, False: 0]
  ------------------
 5437|      0|    AddError(absl::StrCat(name_scope, ".", element_name), orig_options,
 5438|      0|             DescriptorPool::ErrorCollector::OPTION_NAME,
 5439|      0|             "Uninterpreted option is missing name or value.");
 5440|      0|    return &DescriptorT::OptionsType::default_instance();
 5441|      0|  }
 5442|       |
 5443|      0|  const bool parse_success =
 5444|      0|      internal::ParseNoReflection(orig_options.SerializeAsString(), *options);
 5445|      0|  ABSL_DCHECK(parse_success);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5446|       |
 5447|       |  // Don't add to options_to_interpret_ unless there were uninterpreted
 5448|       |  // options.  This not only avoids unnecessary work, but prevents a
 5449|       |  // bootstrapping problem when building descriptors for descriptor.proto.
 5450|       |  // descriptor.proto does not contain any uninterpreted options, but
 5451|       |  // attempting to interpret options anyway will cause
 5452|       |  // OptionsType::GetDescriptor() to be called which may then deadlock since
 5453|       |  // we're still trying to build it.
 5454|      0|  if (options->uninterpreted_option_size() > 0) {
  ------------------
  |  Branch (5454:7): [True: 0, False: 0]
  ------------------
 5455|      0|    options_to_interpret_.push_back(OptionsToInterpret(
 5456|      0|        name_scope, element_name, options_path, &orig_options, options));
 5457|      0|  }
 5458|       |
 5459|       |  // If the custom option is in unknown fields, no need to interpret it.
 5460|       |  // Remove the dependency file from unused_dependency.
 5461|      0|  const UnknownFieldSet& unknown_fields = orig_options.unknown_fields();
 5462|      0|  if (!unknown_fields.empty()) {
  ------------------
  |  Branch (5462:7): [True: 0, False: 0]
  ------------------
 5463|       |    // Can not use options->GetDescriptor() which may case deadlock.
 5464|      0|    Symbol msg_symbol = tables_->FindSymbol(option_name);
 5465|      0|    if (msg_symbol.type() == Symbol::MESSAGE) {
  ------------------
  |  Branch (5465:9): [True: 0, False: 0]
  ------------------
 5466|      0|      for (int i = 0; i < unknown_fields.field_count(); ++i) {
  ------------------
  |  Branch (5466:23): [True: 0, False: 0]
  ------------------
 5467|      0|        assert_mutex_held(pool_);
 5468|      0|        const FieldDescriptor* field =
 5469|      0|            pool_->InternalFindExtensionByNumberNoLock(
 5470|      0|                msg_symbol.descriptor(), unknown_fields.field(i).number());
 5471|      0|        if (field) {
  ------------------
  |  Branch (5471:13): [True: 0, False: 0]
  ------------------
 5472|      0|          unused_dependency_.erase(field->file());
 5473|      0|        }
 5474|      0|      }
 5475|      0|    }
 5476|      0|  }
 5477|      0|  return options;
 5478|      0|}

_ZNK6google8protobuf10Descriptor14ExtensionRange12start_numberEv:
  493|    130|    int start_number() const { return start_; }
_ZNK6google8protobuf10Descriptor14ExtensionRange10end_numberEv:
  496|     31|    int end_number() const { return end_; }
_ZNK6google8protobuf10Descriptor14ExtensionRange9full_nameEv:
  511|     28|    internal::DescriptorStringView full_name() const {
  512|     28|      return containing_type_->full_name();
  513|     28|    }
_ZNK6google8protobuf10Descriptor14ExtensionRange4fileEv:
  517|     14|    const FileDescriptor* file() const { return containing_type_->file(); }
_ZNK6google8protobuf10Descriptor14ExtensionRange15containing_typeEv:
  521|     28|    const Descriptor* containing_type() const { return containing_type_; }
_ZNK6google8protobuf10Descriptor8featuresEv:
  667|    241|  const FeatureSet& features() const { return *merged_features_; }
_ZNK6google8protobuf15FieldDescriptor8featuresEv:
 1077|   200k|  const FeatureSet& features() const { return *merged_features_; }
_ZNK6google8protobuf15OneofDescriptor8featuresEv:
 1261|      7|  const FeatureSet& features() const { return *merged_features_; }
_ZNK6google8protobuf14EnumDescriptor8featuresEv:
 1436|     86|  const FeatureSet& features() const { return *merged_features_; }
_ZNK6google8protobuf14FileDescriptor8featuresEv:
 1992|     37|  const FeatureSet& features() const { return *merged_features_; }
_ZN6google8protobuf14DescriptorPool34InternalSetLazilyBuildDependenciesEv:
 2356|      2|  void InternalSetLazilyBuildDependencies() {
 2357|      2|    lazily_build_dependencies_ = true;
 2358|       |    // This needs to be set when lazily building dependencies, as it breaks
 2359|       |    // dependency checking.
 2360|      2|    InternalDontEnforceDependencies();
 2361|      2|  }
_ZNK6google8protobuf10Descriptor4nameEv:
 2520|    141|  inline internal::DescriptorStringView CLASS::name() const {      \
 2521|    141|    return all_names_[0];                                          \
 2522|    141|  }                                                                \
_ZNK6google8protobuf10Descriptor9full_nameEv:
 2523|  64.2k|  inline internal::DescriptorStringView CLASS::full_name() const { \
 2524|  64.2k|    return all_names_[1];                                          \
 2525|  64.2k|  }
_ZNK6google8protobuf10Descriptor15containing_typeEv:
 2510|    602|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor16oneof_decl_countEv:
 2510|    289|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor17nested_type_countEv:
 2510|    340|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor15enum_type_countEv:
 2510|    310|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor10oneof_declEi:
 2529|     17|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|     17|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|     17|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     17|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     17|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 17]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     17|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|     17|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|     17|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     17|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     17|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 17]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     17|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|     17|    return FIELD##s_ + index;                              \
 2533|     17|  }
_ZNK6google8protobuf10Descriptor11nested_typeEi:
 2529|     50|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|     50|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|     50|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     50|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     50|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 50]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     50|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|     50|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|     50|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     50|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     50|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 50]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     50|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|     50|    return FIELD##s_ + index;                              \
 2533|     50|  }
_ZNK6google8protobuf10Descriptor9enum_typeEi:
 2529|     85|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|     85|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|     85|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     85|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     85|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 85]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     85|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|     85|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|     85|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     85|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     85|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 85]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     85|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|     85|    return FIELD##s_ + index;                              \
 2533|     85|  }
_ZNK6google8protobuf10Descriptor21extension_range_countEv:
 2510|    603|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor15extension_countEv:
 2510|    225|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor15extension_rangeEi:
 2529|    161|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|    161|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|    161|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|    161|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    161|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 161]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    161|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|    161|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|    161|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    161|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    161|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 161]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    161|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|    161|    return FIELD##s_ + index;                              \
 2533|    161|  }
_ZNK6google8protobuf10Descriptor20reserved_range_countEv:
 2510|    359|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf10Descriptor14reserved_rangeEi:
 2529|    140|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|    140|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|    140|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|    140|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    140|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 140]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    140|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|    140|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|    140|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    140|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    140|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 140]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    140|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|    140|    return FIELD##s_ + index;                              \
 2533|    140|  }
_ZNK6google8protobuf10Descriptor19reserved_name_countEv:
 2510|     36|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15FieldDescriptor4nameEv:
 2520|  64.4k|  inline internal::DescriptorStringView CLASS::name() const {      \
 2521|  64.4k|    return all_names_[0];                                          \
 2522|  64.4k|  }                                                                \
_ZNK6google8protobuf15FieldDescriptor9full_nameEv:
 2523|  1.45k|  inline internal::DescriptorStringView CLASS::full_name() const { \
 2524|  1.45k|    return all_names_[1];                                          \
 2525|  1.45k|  }
_ZNK6google8protobuf15FieldDescriptor4fileEv:
 2510|    415|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15FieldDescriptor6numberEv:
 2510|  29.8k|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15FieldDescriptor12is_extensionEv:
 2510|   522k|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15FieldDescriptor15containing_typeEv:
 2510|  1.08M|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15FieldDescriptor7optionsEv:
 2536|  63.4k|  inline const TYPE& CLASS::options() const { return *options_; }
_ZNK6google8protobuf15FieldDescriptor17has_default_valueEv:
 2510|     92|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf15OneofDescriptor4nameEv:
 2520|      6|  inline internal::DescriptorStringView CLASS::name() const {      \
 2521|      6|    return all_names_[0];                                          \
 2522|      6|  }                                                                \
_ZNK6google8protobuf15OneofDescriptor9full_nameEv:
 2523|     10|  inline internal::DescriptorStringView CLASS::full_name() const { \
 2524|     10|    return all_names_[1];                                          \
 2525|     10|  }
_ZNK6google8protobuf15OneofDescriptor15containing_typeEv:
 2510|     10|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14EnumDescriptor4nameEv:
 2520|    136|  inline internal::DescriptorStringView CLASS::name() const {      \
 2521|    136|    return all_names_[0];                                          \
 2522|    136|  }                                                                \
_ZNK6google8protobuf14EnumDescriptor9full_nameEv:
 2523|    307|  inline internal::DescriptorStringView CLASS::full_name() const { \
 2524|    307|    return all_names_[1];                                          \
 2525|    307|  }
_ZNK6google8protobuf14EnumDescriptor4fileEv:
 2510|    149|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14EnumDescriptor15containing_typeEv:
 2510|    521|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14EnumDescriptor20reserved_range_countEv:
 2510|     89|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14EnumDescriptor14reserved_rangeEi:
 2529|      3|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|      3|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|      3|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|      3|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      3|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 3]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|      3|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|      3|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|      3|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      3|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 3]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|      3|    return FIELD##s_ + index;                              \
 2533|      3|  }
_ZNK6google8protobuf19EnumValueDescriptor4nameEv:
 2520|    597|  inline internal::DescriptorStringView CLASS::name() const {      \
 2521|    597|    return all_names_[0];                                          \
 2522|    597|  }                                                                \
_ZNK6google8protobuf19EnumValueDescriptor9full_nameEv:
 2523|    525|  inline internal::DescriptorStringView CLASS::full_name() const { \
 2524|    525|    return all_names_[1];                                          \
 2525|    525|  }
_ZNK6google8protobuf19EnumValueDescriptor6numberEv:
 2510|    292|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14FileDescriptor4nameEv:
 2514|     19|  inline internal::DescriptorStringView CLASS::FIELD() const { \
 2515|     19|    return *FIELD##_;                                          \
 2516|     19|  }
_ZNK6google8protobuf14FileDescriptor7packageEv:
 2514|     76|  inline internal::DescriptorStringView CLASS::FIELD() const { \
 2515|     76|    return *FIELD##_;                                          \
 2516|     76|  }
_ZNK6google8protobuf14FileDescriptor18message_type_countEv:
 2510|    245|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14FileDescriptor15enum_type_countEv:
 2510|     25|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14FileDescriptor13service_countEv:
 2510|     20|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14FileDescriptor15extension_countEv:
 2510|     25|  inline TYPE CLASS::FIELD() const { return FIELD##_; }
_ZNK6google8protobuf14FileDescriptor7optionsEv:
 2536|      4|  inline const TYPE& CLASS::options() const { return *options_; }
_ZNK6google8protobuf14FileDescriptor12message_typeEi:
 2529|    185|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|    185|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|    185|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|    185|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    185|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 185]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    185|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|    185|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|    185|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    185|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    185|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 185]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    185|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|    185|    return FIELD##s_ + index;                              \
 2533|    185|  }
_ZNK6google8protobuf14FileDescriptor9enum_typeEi:
 2529|      5|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|      5|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|      5|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|      5|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      5|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 5]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      5|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|      5|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|      5|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|      5|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      5|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 5]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      5|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|      5|    return FIELD##s_ + index;                              \
 2533|      5|  }
_ZNK6google8protobuf14FileDescriptor9extensionEi:
 2529|      4|  inline TYPE CLASS::FIELD(int index) const {              \
 2530|      4|    ABSL_DCHECK_LE(0, index);                              \
  ------------------
  |  |   78|      4|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|      4|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      4|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2531|      4|    ABSL_DCHECK_LT(index, FIELD##_count());                \
  ------------------
  |  |   80|      4|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|      4|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      4|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2532|      4|    return FIELD##s_ + index;                              \
 2533|      4|  }
_ZNK6google8protobuf10Descriptor14IsReservedNameENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
 2663|     36|inline bool Descriptor::IsReservedName(absl::string_view name) const {
 2664|     36|  for (int i = 0; i < reserved_name_count(); i++) {
  ------------------
  |  Branch (2664:19): [True: 0, False: 36]
  ------------------
 2665|      0|    if (name == static_cast<absl::string_view>(reserved_name(i))) {
  ------------------
  |  Branch (2665:9): [True: 0, False: 0]
  ------------------
 2666|      0|      return true;
 2667|      0|    }
 2668|      0|  }
 2669|     36|  return false;
 2670|     36|}
_ZNK6google8protobuf15FieldDescriptor15extension_scopeEv:
 2725|      5|inline const Descriptor* FieldDescriptor::extension_scope() const {
 2726|      5|  ABSL_CHECK(is_extension_);
  ------------------
  |  |   41|      5|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     10|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      5|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     10|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     10|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 5, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      5|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 5]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     10|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 5, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 5]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 5]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     10|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     10|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2727|      5|  return scope_.extension_scope;
 2728|      5|}
_ZNK6google8protobuf15FieldDescriptor5labelEv:
 2730|   394k|inline FieldDescriptor::Label FieldDescriptor::label() const {
 2731|   394k|  return static_cast<Label>(label_);
 2732|   394k|}
_ZNK6google8protobuf15FieldDescriptor6is_mapEv:
 2751|   102k|inline bool FieldDescriptor::is_map() const {
 2752|   102k|  return type() == TYPE_MESSAGE && is_map_message_type();
  ------------------
  |  Branch (2752:10): [True: 102k, False: 0]
  |  Branch (2752:36): [True: 0, False: 102k]
  ------------------
 2753|   102k|}
_ZNK6google8protobuf15FieldDescriptor21real_containing_oneofEv:
 2755|   543k|inline const OneofDescriptor* FieldDescriptor::real_containing_oneof() const {
 2756|   543k|  if (in_real_oneof_) {
  ------------------
  |  Branch (2756:7): [True: 36.0k, False: 507k]
  ------------------
 2757|  36.0k|    auto* res = containing_oneof();
 2758|  36.0k|    PROTOBUF_ASSUME(res != nullptr);
  ------------------
  |  |  941|  36.0k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
 2759|  36.0k|    ABSL_DCHECK(!res->is_synthetic());
  ------------------
  |  |   47|  36.0k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  36.0k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  72.0k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  36.0k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  72.0k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  72.0k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 36.0k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  36.0k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 36.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  36.0k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 36.0k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  72.0k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  72.0k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2760|  36.0k|    return res;
 2761|  36.0k|  }
 2762|   507k|  return nullptr;
 2763|   543k|}
_ZNK6google8protobuf15FieldDescriptor5indexEv:
 2767|   620k|inline int FieldDescriptor::index() const {
 2768|   620k|  if (!is_extension_) {
  ------------------
  |  Branch (2768:7): [True: 620k, False: 1]
  ------------------
 2769|   620k|    return static_cast<int>(this - containing_type()->fields_);
 2770|   620k|  } else if (extension_scope() != nullptr) {
  ------------------
  |  Branch (2770:14): [True: 0, False: 1]
  ------------------
 2771|      0|    return static_cast<int>(this - extension_scope()->extensions_);
 2772|      1|  } else {
 2773|      1|    return static_cast<int>(this - file_->extensions_);
 2774|      1|  }
 2775|   620k|}
_ZNK6google8protobuf10Descriptor5indexEv:
 2777|    404|inline int Descriptor::index() const {
 2778|    404|  if (containing_type_ == nullptr) {
  ------------------
  |  Branch (2778:7): [True: 357, False: 47]
  ------------------
 2779|    357|    return static_cast<int>(this - file_->message_types_);
 2780|    357|  } else {
 2781|     47|    return static_cast<int>(this - containing_type_->nested_types_);
 2782|     47|  }
 2783|    404|}
_ZNK6google8protobuf10Descriptor14ExtensionRange5indexEv:
 2785|     14|inline int Descriptor::ExtensionRange::index() const {
 2786|     14|  return static_cast<int>(this - containing_type_->extension_ranges_);
 2787|     14|}
_ZNK6google8protobuf15OneofDescriptor4fileEv:
 2789|      2|inline const FileDescriptor* OneofDescriptor::file() const {
 2790|      2|  return containing_type()->file();
 2791|      2|}
_ZNK6google8protobuf15OneofDescriptor5indexEv:
 2793|  35.1k|inline int OneofDescriptor::index() const {
 2794|  35.1k|  return static_cast<int>(this - containing_type_->oneof_decls_);
 2795|  35.1k|}
_ZNK6google8protobuf15OneofDescriptor12is_syntheticEv:
 2797|  2.93k|inline bool OneofDescriptor::is_synthetic() const {
 2798|  2.93k|  return field_count() == 1 && field(0)->proto3_optional_;
  ------------------
  |  Branch (2798:10): [True: 0, False: 2.93k]
  |  Branch (2798:32): [True: 0, False: 0]
  ------------------
 2799|  2.93k|}
_ZNK6google8protobuf14EnumDescriptor5indexEv:
 2801|    104|inline int EnumDescriptor::index() const {
 2802|    104|  if (containing_type_ == nullptr) {
  ------------------
  |  Branch (2802:7): [True: 13, False: 91]
  ------------------
 2803|     13|    return static_cast<int>(this - file_->enum_types_);
 2804|     91|  } else {
 2805|     91|    return static_cast<int>(this - containing_type_->enum_types_);
 2806|     91|  }
 2807|    104|}
_ZNK6google8protobuf19EnumValueDescriptor4fileEv:
 2809|     86|inline const FileDescriptor* EnumValueDescriptor::file() const {
 2810|     86|  return type()->file();
 2811|     86|}
_ZN6google8protobuf8internal3cpp33MaxMessageDeclarationNestingDepthEv:
 2942|      4|constexpr int MaxMessageDeclarationNestingDepth() { return 32; }
_ZN6google8protobuf8internal21InternalFeatureHelper11GetFeaturesINS0_14FileDescriptorEEERKNS0_10FeatureSetERKT_:
  264|     37|  static const FeatureSet& GetFeatures(const DescriptorT& desc) {
  265|     37|    return desc.features();
  266|     37|  }
_ZN6google8protobuf8internal21InternalFeatureHelper11GetFeaturesINS0_10DescriptorEEERKNS0_10FeatureSetERKT_:
  264|    241|  static const FeatureSet& GetFeatures(const DescriptorT& desc) {
  265|    241|    return desc.features();
  266|    241|  }
_ZN6google8protobuf8internal21InternalFeatureHelper11GetFeaturesINS0_14EnumDescriptorEEERKNS0_10FeatureSetERKT_:
  264|     86|  static const FeatureSet& GetFeatures(const DescriptorT& desc) {
  265|     86|    return desc.features();
  266|     86|  }
_ZN6google8protobuf8internal21InternalFeatureHelper11GetFeaturesINS0_15OneofDescriptorEEERKNS0_10FeatureSetERKT_:
  264|      7|  static const FeatureSet& GetFeatures(const DescriptorT& desc) {
  265|      7|    return desc.features();
  266|      7|  }
generated_message_reflection.cc:_ZN6google8protobuf8internal3cpp27VisitDescriptorsInFileOrderIZNS1_25RegisterFileLevelMetadataEPKNS1_15DescriptorTableEE3$_0EEDTclfp0_clptfp_12message_typeLi0EEEEPKNS0_14FileDescriptorET_:
 3011|      1|                                 F f) -> decltype(f(file->message_type(0))) {
 3012|     11|  for (int i = 0; i < file->message_type_count(); i++) {
  ------------------
  |  Branch (3012:19): [True: 10, False: 1]
  ------------------
 3013|     10|    if (auto res = VisitDescriptorsInFileOrder(file->message_type(i), f)) {
  ------------------
  |  Branch (3013:14): [Folded, False: 10]
  ------------------
 3014|      0|      return res;
 3015|      0|    }
 3016|     10|  }
 3017|      1|  return {};
 3018|      1|}
generated_message_reflection.cc:_ZN6google8protobuf8internal3cpp27VisitDescriptorsInFileOrderIZNS1_25RegisterFileLevelMetadataEPKNS1_15DescriptorTableEE3$_0EEDTclfp0_fp_EEPKNS0_10DescriptorERT_:
 2994|     10|                                 F& f) -> decltype(f(desc)) {
 2995|     10|  for (int i = 0; i < desc->nested_type_count(); i++) {
  ------------------
  |  Branch (2995:19): [True: 0, False: 10]
  ------------------
 2996|      0|    if (auto res = VisitDescriptorsInFileOrder(desc->nested_type(i), f)) {
  ------------------
  |  Branch (2996:14): [Folded, False: 0]
  ------------------
 2997|      0|      return res;
 2998|      0|    }
 2999|      0|  }
 3000|     10|  if (auto res = f(desc)) return res;
  ------------------
  |  Branch (3000:12): [Folded, False: 10]
  ------------------
 3001|     10|  return {};
 3002|     10|}

_ZN6google8protobuf32FeatureSet_FieldPresence_IsValidEi:
 2452|    226|bool FeatureSet_FieldPresence_IsValid(int value) {
 2453|    226|  return 0 <= value && value <= 3;
  ------------------
  |  Branch (2453:10): [True: 226, False: 0]
  |  Branch (2453:24): [True: 226, False: 0]
  ------------------
 2454|    226|}
_ZN6google8protobuf27FeatureSet_EnumType_IsValidEi:
 2474|    226|bool FeatureSet_EnumType_IsValid(int value) {
 2475|    226|  return 0 <= value && value <= 2;
  ------------------
  |  Branch (2475:10): [True: 226, False: 0]
  |  Branch (2475:24): [True: 226, False: 0]
  ------------------
 2476|    226|}
_ZN6google8protobuf40FeatureSet_RepeatedFieldEncoding_IsValidEi:
 2495|    226|bool FeatureSet_RepeatedFieldEncoding_IsValid(int value) {
 2496|    226|  return 0 <= value && value <= 2;
  ------------------
  |  Branch (2496:10): [True: 226, False: 0]
  |  Branch (2496:24): [True: 226, False: 0]
  ------------------
 2497|    226|}
_ZN6google8protobuf33FeatureSet_Utf8Validation_IsValidEi:
 2516|    226|bool FeatureSet_Utf8Validation_IsValid(int value) {
 2517|    226|  return 0 <= value && value <= 3 && ((13u >> value) & 1) != 0;
  ------------------
  |  Branch (2517:10): [True: 226, False: 0]
  |  Branch (2517:24): [True: 226, False: 0]
  |  Branch (2517:38): [True: 226, False: 0]
  ------------------
 2518|    226|}
_ZN6google8protobuf34FeatureSet_MessageEncoding_IsValidEi:
 2537|    226|bool FeatureSet_MessageEncoding_IsValid(int value) {
 2538|    226|  return 0 <= value && value <= 2;
  ------------------
  |  Branch (2538:10): [True: 226, False: 0]
  |  Branch (2538:24): [True: 226, False: 0]
  ------------------
 2539|    226|}
_ZN6google8protobuf29FeatureSet_JsonFormat_IsValidEi:
 2558|    226|bool FeatureSet_JsonFormat_IsValid(int value) {
 2559|    226|  return 0 <= value && value <= 2;
  ------------------
  |  Branch (2559:10): [True: 226, False: 0]
  |  Branch (2559:24): [True: 226, False: 0]
  ------------------
 2560|    226|}
_ZNK6google8protobuf17FileDescriptorSet12GetClassDataEv:
 2708|      1|const ::google::protobuf::internal::ClassData* FileDescriptorSet::GetClassData() const {
 2709|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 2710|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 2711|      1|  return _class_data_.base();
 2712|      1|}
_ZN6google8protobuf19FileDescriptorProtoC2EPNS0_5ArenaE:
 2882|     10|    : ::google::protobuf::Message(arena) {
 2883|     10|#endif  // PROTOBUF_CUSTOM_VTABLE
 2884|     10|  SharedCtor(arena);
 2885|       |  // @@protoc_insertion_point(arena_constructor:google.protobuf.FileDescriptorProto)
 2886|     10|}
_ZN6google8protobuf19FileDescriptorProtoD2Ev:
 2951|      6|FileDescriptorProto::~FileDescriptorProto() {
 2952|       |  // @@protoc_insertion_point(destructor:google.protobuf.FileDescriptorProto)
 2953|      6|  SharedDtor(*this);
 2954|      6|}
_ZNK6google8protobuf19FileDescriptorProto12GetClassDataEv:
 3033|     21|const ::google::protobuf::internal::ClassData* FileDescriptorProto::GetClassData() const {
 3034|     21|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 3035|     21|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 3036|     21|  return _class_data_.base();
 3037|     21|}
_ZN6google8protobuf19FileDescriptorProto5ClearEv:
 3158|     10|PROTOBUF_NOINLINE void FileDescriptorProto::Clear() {
 3159|       |// @@protoc_insertion_point(message_clear_start:google.protobuf.FileDescriptorProto)
 3160|     10|  ::google::protobuf::internal::TSanWrite(&_impl_);
 3161|     10|  ::uint32_t cached_has_bits = 0;
 3162|       |  // Prevent compiler warnings about cached_has_bits being unused
 3163|     10|  (void) cached_has_bits;
 3164|       |
 3165|     10|  _impl_.dependency_.Clear();
 3166|     10|  _impl_.message_type_.Clear();
 3167|     10|  _impl_.enum_type_.Clear();
 3168|     10|  _impl_.service_.Clear();
 3169|     10|  _impl_.extension_.Clear();
 3170|     10|  _impl_.public_dependency_.Clear();
 3171|     10|  _impl_.weak_dependency_.Clear();
 3172|     10|  cached_has_bits = _impl_._has_bits_[0];
 3173|     10|  if (cached_has_bits & 0x0000001fu) {
  ------------------
  |  Branch (3173:7): [True: 0, False: 10]
  ------------------
 3174|      0|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (3174:9): [True: 0, False: 0]
  ------------------
 3175|      0|      _impl_.name_.ClearNonDefaultToEmpty();
 3176|      0|    }
 3177|      0|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (3177:9): [True: 0, False: 0]
  ------------------
 3178|      0|      _impl_.package_.ClearNonDefaultToEmpty();
 3179|      0|    }
 3180|      0|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (3180:9): [True: 0, False: 0]
  ------------------
 3181|      0|      _impl_.syntax_.ClearNonDefaultToEmpty();
 3182|      0|    }
 3183|      0|    if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (3183:9): [True: 0, False: 0]
  ------------------
 3184|      0|      ABSL_DCHECK(_impl_.options_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3185|      0|      _impl_.options_->Clear();
 3186|      0|    }
 3187|      0|    if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (3187:9): [True: 0, False: 0]
  ------------------
 3188|      0|      ABSL_DCHECK(_impl_.source_code_info_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3189|      0|      _impl_.source_code_info_->Clear();
 3190|      0|    }
 3191|      0|  }
 3192|     10|  _impl_.edition_ = 0;
 3193|     10|  _impl_._has_bits_.Clear();
 3194|     10|  _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
 3195|     10|}
_ZN6google8protobuf19FileDescriptorProto17IsInitializedImplERKNS0_11MessageLiteE:
 3505|     10|    const MessageLite& msg) {
 3506|     10|  auto& this_ = static_cast<const FileDescriptorProto&>(msg);
 3507|     10|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_message_type()))
  ------------------
  |  Branch (3507:7): [True: 0, False: 10]
  ------------------
 3508|      0|    return false;
 3509|     10|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_enum_type()))
  ------------------
  |  Branch (3509:7): [True: 0, False: 10]
  ------------------
 3510|      0|    return false;
 3511|     10|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_service()))
  ------------------
  |  Branch (3511:7): [True: 0, False: 10]
  ------------------
 3512|      0|    return false;
 3513|     10|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_extension()))
  ------------------
  |  Branch (3513:7): [True: 0, False: 10]
  ------------------
 3514|      0|    return false;
 3515|     10|  if ((this_._impl_._has_bits_[0] & 0x00000008u) != 0) {
  ------------------
  |  Branch (3515:7): [True: 5, False: 5]
  ------------------
 3516|      5|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (3516:9): [True: 0, False: 5]
  ------------------
 3517|      5|  }
 3518|     10|  if ((this_._impl_._has_bits_[0] & 0x00000010u) != 0) {
  ------------------
  |  Branch (3518:7): [True: 0, False: 10]
  ------------------
 3519|      0|    if (!this_._impl_.source_code_info_->IsInitialized()) return false;
  ------------------
  |  Branch (3519:9): [True: 0, False: 0]
  ------------------
 3520|      0|  }
 3521|     10|  return true;
 3522|     10|}
_ZN6google8protobuf30DescriptorProto_ExtensionRangeD2Ev:
 3617|     14|DescriptorProto_ExtensionRange::~DescriptorProto_ExtensionRange() {
 3618|       |  // @@protoc_insertion_point(destructor:google.protobuf.DescriptorProto.ExtensionRange)
 3619|     14|  SharedDtor(*this);
 3620|     14|}
_ZNK6google8protobuf30DescriptorProto_ExtensionRange12GetClassDataEv:
 3659|      1|const ::google::protobuf::internal::ClassData* DescriptorProto_ExtensionRange::GetClassData() const {
 3660|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 3661|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 3662|      1|  return _class_data_.base();
 3663|      1|}
_ZN6google8protobuf30DescriptorProto_ExtensionRange17IsInitializedImplERKNS0_11MessageLiteE:
 3853|     28|    const MessageLite& msg) {
 3854|     28|  auto& this_ = static_cast<const DescriptorProto_ExtensionRange&>(msg);
 3855|     28|  if ((this_._impl_._has_bits_[0] & 0x00000001u) != 0) {
  ------------------
  |  Branch (3855:7): [True: 0, False: 28]
  ------------------
 3856|      0|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (3856:9): [True: 0, False: 0]
  ------------------
 3857|      0|  }
 3858|     28|  return true;
 3859|     28|}
_ZN6google8protobuf29DescriptorProto_ReservedRangeD2Ev:
 3914|     14|DescriptorProto_ReservedRange::~DescriptorProto_ReservedRange() {
 3915|       |  // @@protoc_insertion_point(destructor:google.protobuf.DescriptorProto.ReservedRange)
 3916|     14|  SharedDtor(*this);
 3917|     14|}
_ZNK6google8protobuf29DescriptorProto_ReservedRange12GetClassDataEv:
 3955|      1|const ::google::protobuf::internal::ClassData* DescriptorProto_ReservedRange::GetClassData() const {
 3956|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 3957|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 3958|      1|  return _class_data_.base();
 3959|      1|}
_ZN6google8protobuf15DescriptorProtoD2Ev:
 4203|     56|DescriptorProto::~DescriptorProto() {
 4204|       |  // @@protoc_insertion_point(destructor:google.protobuf.DescriptorProto)
 4205|     56|  SharedDtor(*this);
 4206|     56|}
_ZNK6google8protobuf15DescriptorProto12GetClassDataEv:
 4286|      4|const ::google::protobuf::internal::ClassData* DescriptorProto::GetClassData() const {
 4287|      4|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 4288|      4|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 4289|      4|  return _class_data_.base();
 4290|      4|}
_ZN6google8protobuf15DescriptorProto17IsInitializedImplERKNS0_11MessageLiteE:
 4692|    101|    const MessageLite& msg) {
 4693|    101|  auto& this_ = static_cast<const DescriptorProto&>(msg);
 4694|    101|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_field()))
  ------------------
  |  Branch (4694:7): [True: 0, False: 101]
  ------------------
 4695|      0|    return false;
 4696|    101|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_nested_type()))
  ------------------
  |  Branch (4696:7): [True: 0, False: 101]
  ------------------
 4697|      0|    return false;
 4698|    101|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_enum_type()))
  ------------------
  |  Branch (4698:7): [True: 0, False: 101]
  ------------------
 4699|      0|    return false;
 4700|    101|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_extension_range()))
  ------------------
  |  Branch (4700:7): [True: 0, False: 101]
  ------------------
 4701|      0|    return false;
 4702|    101|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_extension()))
  ------------------
  |  Branch (4702:7): [True: 0, False: 101]
  ------------------
 4703|      0|    return false;
 4704|    101|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_oneof_decl()))
  ------------------
  |  Branch (4704:7): [True: 0, False: 101]
  ------------------
 4705|      0|    return false;
 4706|    101|  if ((this_._impl_._has_bits_[0] & 0x00000002u) != 0) {
  ------------------
  |  Branch (4706:7): [True: 0, False: 101]
  ------------------
 4707|      0|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (4707:9): [True: 0, False: 0]
  ------------------
 4708|      0|  }
 4709|    101|  return true;
 4710|    101|}
_ZNK6google8protobuf15DescriptorProto11GetMetadataEv:
 4730|      3|::google::protobuf::Metadata DescriptorProto::GetMetadata() const {
 4731|      3|  return ::google::protobuf::Message::GetMetadataImpl(GetClassData()->full());
 4732|      3|}
_ZNK6google8protobuf33ExtensionRangeOptions_Declaration12GetClassDataEv:
 4842|      1|const ::google::protobuf::internal::ClassData* ExtensionRangeOptions_Declaration::GetClassData() const {
 4843|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 4844|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 4845|      1|  return _class_data_.base();
 4846|      1|}
_ZNK6google8protobuf21ExtensionRangeOptions12GetClassDataEv:
 5224|      1|const ::google::protobuf::internal::ClassData* ExtensionRangeOptions::GetClassData() const {
 5225|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 5226|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 5227|      1|  return _class_data_.base();
 5228|      1|}
_ZN6google8protobuf20FieldDescriptorProtoD2Ev:
 5574|    238|FieldDescriptorProto::~FieldDescriptorProto() {
 5575|       |  // @@protoc_insertion_point(destructor:google.protobuf.FieldDescriptorProto)
 5576|    238|  SharedDtor(*this);
 5577|    238|}
_ZNK6google8protobuf20FieldDescriptorProto12GetClassDataEv:
 5621|      1|const ::google::protobuf::internal::ClassData* FieldDescriptorProto::GetClassData() const {
 5622|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 5623|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 5624|      1|  return _class_data_.base();
 5625|      1|}
_ZN6google8protobuf20FieldDescriptorProto17IsInitializedImplERKNS0_11MessageLiteE:
 6024|    444|    const MessageLite& msg) {
 6025|    444|  auto& this_ = static_cast<const FieldDescriptorProto&>(msg);
 6026|    444|  if ((this_._impl_._has_bits_[0] & 0x00000020u) != 0) {
  ------------------
  |  Branch (6026:7): [True: 34, False: 410]
  ------------------
 6027|     34|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (6027:9): [True: 0, False: 34]
  ------------------
 6028|     34|  }
 6029|    444|  return true;
 6030|    444|}
_ZN6google8protobuf20OneofDescriptorProtoD2Ev:
 6110|      4|OneofDescriptorProto::~OneofDescriptorProto() {
 6111|       |  // @@protoc_insertion_point(destructor:google.protobuf.OneofDescriptorProto)
 6112|      4|  SharedDtor(*this);
 6113|      4|}
_ZNK6google8protobuf20OneofDescriptorProto12GetClassDataEv:
 6153|      1|const ::google::protobuf::internal::ClassData* OneofDescriptorProto::GetClassData() const {
 6154|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 6155|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 6156|      1|  return _class_data_.base();
 6157|      1|}
_ZN6google8protobuf20OneofDescriptorProto17IsInitializedImplERKNS0_11MessageLiteE:
 6329|      6|    const MessageLite& msg) {
 6330|      6|  auto& this_ = static_cast<const OneofDescriptorProto&>(msg);
 6331|      6|  if ((this_._impl_._has_bits_[0] & 0x00000002u) != 0) {
  ------------------
  |  Branch (6331:7): [True: 0, False: 6]
  ------------------
 6332|      0|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (6332:9): [True: 0, False: 0]
  ------------------
 6333|      0|  }
 6334|      6|  return true;
 6335|      6|}
_ZN6google8protobuf37EnumDescriptorProto_EnumReservedRangeD2Ev:
 6388|      1|EnumDescriptorProto_EnumReservedRange::~EnumDescriptorProto_EnumReservedRange() {
 6389|       |  // @@protoc_insertion_point(destructor:google.protobuf.EnumDescriptorProto.EnumReservedRange)
 6390|      1|  SharedDtor(*this);
 6391|      1|}
_ZNK6google8protobuf37EnumDescriptorProto_EnumReservedRange12GetClassDataEv:
 6429|      1|const ::google::protobuf::internal::ClassData* EnumDescriptorProto_EnumReservedRange::GetClassData() const {
 6430|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 6431|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 6432|      1|  return _class_data_.base();
 6433|      1|}
_ZN6google8protobuf19EnumDescriptorProtoD2Ev:
 6667|     18|EnumDescriptorProto::~EnumDescriptorProto() {
 6668|       |  // @@protoc_insertion_point(destructor:google.protobuf.EnumDescriptorProto)
 6669|     18|  SharedDtor(*this);
 6670|     18|}
_ZNK6google8protobuf19EnumDescriptorProto12GetClassDataEv:
 6730|      1|const ::google::protobuf::internal::ClassData* EnumDescriptorProto::GetClassData() const {
 6731|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 6732|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 6733|      1|  return _class_data_.base();
 6734|      1|}
_ZN6google8protobuf19EnumDescriptorProto17IsInitializedImplERKNS0_11MessageLiteE:
 6993|     36|    const MessageLite& msg) {
 6994|     36|  auto& this_ = static_cast<const EnumDescriptorProto&>(msg);
 6995|     36|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_value()))
  ------------------
  |  Branch (6995:7): [True: 0, False: 36]
  ------------------
 6996|      0|    return false;
 6997|     36|  if ((this_._impl_._has_bits_[0] & 0x00000002u) != 0) {
  ------------------
  |  Branch (6997:7): [True: 0, False: 36]
  ------------------
 6998|      0|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (6998:9): [True: 0, False: 0]
  ------------------
 6999|      0|  }
 7000|     36|  return true;
 7001|     36|}
_ZN6google8protobuf24EnumValueDescriptorProtoD2Ev:
 7081|     86|EnumValueDescriptorProto::~EnumValueDescriptorProto() {
 7082|       |  // @@protoc_insertion_point(destructor:google.protobuf.EnumValueDescriptorProto)
 7083|     86|  SharedDtor(*this);
 7084|     86|}
_ZNK6google8protobuf24EnumValueDescriptorProto12GetClassDataEv:
 7124|      1|const ::google::protobuf::internal::ClassData* EnumValueDescriptorProto::GetClassData() const {
 7125|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 7126|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 7127|      1|  return _class_data_.base();
 7128|      1|}
_ZN6google8protobuf24EnumValueDescriptorProto17IsInitializedImplERKNS0_11MessageLiteE:
 7323|    172|    const MessageLite& msg) {
 7324|    172|  auto& this_ = static_cast<const EnumValueDescriptorProto&>(msg);
 7325|    172|  if ((this_._impl_._has_bits_[0] & 0x00000002u) != 0) {
  ------------------
  |  Branch (7325:7): [True: 0, False: 172]
  ------------------
 7326|      0|    if (!this_._impl_.options_->IsInitialized()) return false;
  ------------------
  |  Branch (7326:9): [True: 0, False: 0]
  ------------------
 7327|      0|  }
 7328|    172|  return true;
 7329|    172|}
_ZNK6google8protobuf22ServiceDescriptorProto12GetClassDataEv:
 7462|      1|const ::google::protobuf::internal::ClassData* ServiceDescriptorProto::GetClassData() const {
 7463|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 7464|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 7465|      1|  return _class_data_.base();
 7466|      1|}
_ZNK6google8protobuf21MethodDescriptorProto12GetClassDataEv:
 7810|      1|const ::google::protobuf::internal::ClassData* MethodDescriptorProto::GetClassData() const {
 7811|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 7812|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 7813|      1|  return _class_data_.base();
 7814|      1|}
_ZN6google8protobuf11FileOptionsC2EPNS0_5ArenaE:
 8125|      2|    : ::google::protobuf::Message(arena) {
 8126|      2|#endif  // PROTOBUF_CUSTOM_VTABLE
 8127|      2|  SharedCtor(arena);
 8128|       |  // @@protoc_insertion_point(arena_constructor:google.protobuf.FileOptions)
 8129|      2|}
_ZN6google8protobuf11FileOptionsD2Ev:
 8204|      3|FileOptions::~FileOptions() {
 8205|       |  // @@protoc_insertion_point(destructor:google.protobuf.FileOptions)
 8206|      3|  SharedDtor(*this);
 8207|      3|}
_ZNK6google8protobuf11FileOptions12GetClassDataEv:
 8271|      5|const ::google::protobuf::internal::ClassData* FileOptions::GetClassData() const {
 8272|      5|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 8273|      5|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 8274|      5|  return _class_data_.base();
 8275|      5|}
_ZN6google8protobuf11FileOptions5ClearEv:
 8449|      2|PROTOBUF_NOINLINE void FileOptions::Clear() {
 8450|       |// @@protoc_insertion_point(message_clear_start:google.protobuf.FileOptions)
 8451|      2|  ::google::protobuf::internal::TSanWrite(&_impl_);
 8452|      2|  ::uint32_t cached_has_bits = 0;
 8453|       |  // Prevent compiler warnings about cached_has_bits being unused
 8454|      2|  (void) cached_has_bits;
 8455|       |
 8456|      2|  _impl_._extensions_.Clear();
 8457|      2|  _impl_.uninterpreted_option_.Clear();
 8458|      2|  cached_has_bits = _impl_._has_bits_[0];
 8459|      2|  if (cached_has_bits & 0x000000ffu) {
  ------------------
  |  Branch (8459:7): [True: 0, False: 2]
  ------------------
 8460|      0|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (8460:9): [True: 0, False: 0]
  ------------------
 8461|      0|      _impl_.java_package_.ClearNonDefaultToEmpty();
 8462|      0|    }
 8463|      0|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (8463:9): [True: 0, False: 0]
  ------------------
 8464|      0|      _impl_.java_outer_classname_.ClearNonDefaultToEmpty();
 8465|      0|    }
 8466|      0|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (8466:9): [True: 0, False: 0]
  ------------------
 8467|      0|      _impl_.go_package_.ClearNonDefaultToEmpty();
 8468|      0|    }
 8469|      0|    if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (8469:9): [True: 0, False: 0]
  ------------------
 8470|      0|      _impl_.objc_class_prefix_.ClearNonDefaultToEmpty();
 8471|      0|    }
 8472|      0|    if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (8472:9): [True: 0, False: 0]
  ------------------
 8473|      0|      _impl_.csharp_namespace_.ClearNonDefaultToEmpty();
 8474|      0|    }
 8475|      0|    if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (8475:9): [True: 0, False: 0]
  ------------------
 8476|      0|      _impl_.swift_prefix_.ClearNonDefaultToEmpty();
 8477|      0|    }
 8478|      0|    if (cached_has_bits & 0x00000040u) {
  ------------------
  |  Branch (8478:9): [True: 0, False: 0]
  ------------------
 8479|      0|      _impl_.php_class_prefix_.ClearNonDefaultToEmpty();
 8480|      0|    }
 8481|      0|    if (cached_has_bits & 0x00000080u) {
  ------------------
  |  Branch (8481:9): [True: 0, False: 0]
  ------------------
 8482|      0|      _impl_.php_namespace_.ClearNonDefaultToEmpty();
 8483|      0|    }
 8484|      0|  }
 8485|      2|  if (cached_has_bits & 0x00000700u) {
  ------------------
  |  Branch (8485:7): [True: 0, False: 2]
  ------------------
 8486|      0|    if (cached_has_bits & 0x00000100u) {
  ------------------
  |  Branch (8486:9): [True: 0, False: 0]
  ------------------
 8487|      0|      _impl_.php_metadata_namespace_.ClearNonDefaultToEmpty();
 8488|      0|    }
 8489|      0|    if (cached_has_bits & 0x00000200u) {
  ------------------
  |  Branch (8489:9): [True: 0, False: 0]
  ------------------
 8490|      0|      _impl_.ruby_package_.ClearNonDefaultToEmpty();
 8491|      0|    }
 8492|      0|    if (cached_has_bits & 0x00000400u) {
  ------------------
  |  Branch (8492:9): [True: 0, False: 0]
  ------------------
 8493|      0|      ABSL_DCHECK(_impl_.features_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8494|      0|      _impl_.features_->Clear();
 8495|      0|    }
 8496|      0|  }
 8497|      2|  if (cached_has_bits & 0x0000f800u) {
  ------------------
  |  Branch (8497:7): [True: 0, False: 2]
  ------------------
 8498|      0|    ::memset(&_impl_.java_multiple_files_, 0, static_cast<::size_t>(
 8499|      0|        reinterpret_cast<char*>(&_impl_.java_generic_services_) -
 8500|      0|        reinterpret_cast<char*>(&_impl_.java_multiple_files_)) + sizeof(_impl_.java_generic_services_));
 8501|      0|  }
 8502|      2|  if (cached_has_bits & 0x000f0000u) {
  ------------------
  |  Branch (8502:7): [True: 0, False: 2]
  ------------------
 8503|      0|    ::memset(&_impl_.py_generic_services_, 0, static_cast<::size_t>(
 8504|      0|        reinterpret_cast<char*>(&_impl_.deprecated_) -
 8505|      0|        reinterpret_cast<char*>(&_impl_.py_generic_services_)) + sizeof(_impl_.deprecated_));
 8506|      0|    _impl_.optimize_for_ = 1;
 8507|      0|    _impl_.cc_enable_arenas_ = true;
 8508|      0|  }
 8509|      2|  _impl_._has_bits_.Clear();
 8510|      2|  _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
 8511|      2|}
_ZNK6google8protobuf11FileOptions18_InternalSerializeEPhPNS0_2io19EpsCopyOutputStreamE:
 8521|      2|            ::google::protobuf::io::EpsCopyOutputStream* stream) const {
 8522|      2|          const FileOptions& this_ = *this;
 8523|      2|#endif  // PROTOBUF_CUSTOM_VTABLE
 8524|       |          // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FileOptions)
 8525|      2|          ::uint32_t cached_has_bits = 0;
 8526|      2|          (void)cached_has_bits;
 8527|       |
 8528|      2|          cached_has_bits = this_._impl_._has_bits_[0];
 8529|       |          // optional string java_package = 1;
 8530|      2|          if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (8530:15): [True: 2, False: 0]
  ------------------
 8531|      2|            const std::string& _s = this_._internal_java_package();
 8532|      2|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8533|      2|                                        "google.protobuf.FileOptions.java_package");
 8534|      2|            target = stream->WriteStringMaybeAliased(1, _s, target);
 8535|      2|          }
 8536|       |
 8537|       |          // optional string java_outer_classname = 8;
 8538|      2|          if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (8538:15): [True: 2, False: 0]
  ------------------
 8539|      2|            const std::string& _s = this_._internal_java_outer_classname();
 8540|      2|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8541|      2|                                        "google.protobuf.FileOptions.java_outer_classname");
 8542|      2|            target = stream->WriteStringMaybeAliased(8, _s, target);
 8543|      2|          }
 8544|       |
 8545|       |          // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
 8546|      2|          if (cached_has_bits & 0x00040000u) {
  ------------------
  |  Branch (8546:15): [True: 1, False: 1]
  ------------------
 8547|      1|            target = stream->EnsureSpace(target);
 8548|      1|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
 8549|      1|                9, this_._internal_optimize_for(), target);
 8550|      1|          }
 8551|       |
 8552|       |          // optional bool java_multiple_files = 10 [default = false];
 8553|      2|          if (cached_has_bits & 0x00000800u) {
  ------------------
  |  Branch (8553:15): [True: 1, False: 1]
  ------------------
 8554|      1|            target = stream->EnsureSpace(target);
 8555|      1|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8556|      1|                10, this_._internal_java_multiple_files(), target);
 8557|      1|          }
 8558|       |
 8559|       |          // optional string go_package = 11;
 8560|      2|          if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (8560:15): [True: 2, False: 0]
  ------------------
 8561|      2|            const std::string& _s = this_._internal_go_package();
 8562|      2|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8563|      2|                                        "google.protobuf.FileOptions.go_package");
 8564|      2|            target = stream->WriteStringMaybeAliased(11, _s, target);
 8565|      2|          }
 8566|       |
 8567|       |          // optional bool cc_generic_services = 16 [default = false];
 8568|      2|          if (cached_has_bits & 0x00004000u) {
  ------------------
  |  Branch (8568:15): [True: 0, False: 2]
  ------------------
 8569|      0|            target = stream->EnsureSpace(target);
 8570|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8571|      0|                16, this_._internal_cc_generic_services(), target);
 8572|      0|          }
 8573|       |
 8574|       |          // optional bool java_generic_services = 17 [default = false];
 8575|      2|          if (cached_has_bits & 0x00008000u) {
  ------------------
  |  Branch (8575:15): [True: 0, False: 2]
  ------------------
 8576|      0|            target = stream->EnsureSpace(target);
 8577|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8578|      0|                17, this_._internal_java_generic_services(), target);
 8579|      0|          }
 8580|       |
 8581|       |          // optional bool py_generic_services = 18 [default = false];
 8582|      2|          if (cached_has_bits & 0x00010000u) {
  ------------------
  |  Branch (8582:15): [True: 0, False: 2]
  ------------------
 8583|      0|            target = stream->EnsureSpace(target);
 8584|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8585|      0|                18, this_._internal_py_generic_services(), target);
 8586|      0|          }
 8587|       |
 8588|       |          // optional bool java_generate_equals_and_hash = 20 [deprecated = true];
 8589|      2|          if (cached_has_bits & 0x00001000u) {
  ------------------
  |  Branch (8589:15): [True: 0, False: 2]
  ------------------
 8590|      0|            target = stream->EnsureSpace(target);
 8591|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8592|      0|                20, this_._internal_java_generate_equals_and_hash(), target);
 8593|      0|          }
 8594|       |
 8595|       |          // optional bool deprecated = 23 [default = false];
 8596|      2|          if (cached_has_bits & 0x00020000u) {
  ------------------
  |  Branch (8596:15): [True: 0, False: 2]
  ------------------
 8597|      0|            target = stream->EnsureSpace(target);
 8598|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8599|      0|                23, this_._internal_deprecated(), target);
 8600|      0|          }
 8601|       |
 8602|       |          // optional bool java_string_check_utf8 = 27 [default = false];
 8603|      2|          if (cached_has_bits & 0x00002000u) {
  ------------------
  |  Branch (8603:15): [True: 0, False: 2]
  ------------------
 8604|      0|            target = stream->EnsureSpace(target);
 8605|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8606|      0|                27, this_._internal_java_string_check_utf8(), target);
 8607|      0|          }
 8608|       |
 8609|       |          // optional bool cc_enable_arenas = 31 [default = true];
 8610|      2|          if (cached_has_bits & 0x00080000u) {
  ------------------
  |  Branch (8610:15): [True: 1, False: 1]
  ------------------
 8611|      1|            target = stream->EnsureSpace(target);
 8612|      1|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
 8613|      1|                31, this_._internal_cc_enable_arenas(), target);
 8614|      1|          }
 8615|       |
 8616|       |          // optional string objc_class_prefix = 36;
 8617|      2|          if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (8617:15): [True: 2, False: 0]
  ------------------
 8618|      2|            const std::string& _s = this_._internal_objc_class_prefix();
 8619|      2|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8620|      2|                                        "google.protobuf.FileOptions.objc_class_prefix");
 8621|      2|            target = stream->WriteStringMaybeAliased(36, _s, target);
 8622|      2|          }
 8623|       |
 8624|       |          // optional string csharp_namespace = 37;
 8625|      2|          if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (8625:15): [True: 2, False: 0]
  ------------------
 8626|      2|            const std::string& _s = this_._internal_csharp_namespace();
 8627|      2|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8628|      2|                                        "google.protobuf.FileOptions.csharp_namespace");
 8629|      2|            target = stream->WriteStringMaybeAliased(37, _s, target);
 8630|      2|          }
 8631|       |
 8632|       |          // optional string swift_prefix = 39;
 8633|      2|          if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (8633:15): [True: 0, False: 2]
  ------------------
 8634|      0|            const std::string& _s = this_._internal_swift_prefix();
 8635|      0|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8636|      0|                                        "google.protobuf.FileOptions.swift_prefix");
 8637|      0|            target = stream->WriteStringMaybeAliased(39, _s, target);
 8638|      0|          }
 8639|       |
 8640|       |          // optional string php_class_prefix = 40;
 8641|      2|          if (cached_has_bits & 0x00000040u) {
  ------------------
  |  Branch (8641:15): [True: 0, False: 2]
  ------------------
 8642|      0|            const std::string& _s = this_._internal_php_class_prefix();
 8643|      0|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8644|      0|                                        "google.protobuf.FileOptions.php_class_prefix");
 8645|      0|            target = stream->WriteStringMaybeAliased(40, _s, target);
 8646|      0|          }
 8647|       |
 8648|       |          // optional string php_namespace = 41;
 8649|      2|          if (cached_has_bits & 0x00000080u) {
  ------------------
  |  Branch (8649:15): [True: 0, False: 2]
  ------------------
 8650|      0|            const std::string& _s = this_._internal_php_namespace();
 8651|      0|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8652|      0|                                        "google.protobuf.FileOptions.php_namespace");
 8653|      0|            target = stream->WriteStringMaybeAliased(41, _s, target);
 8654|      0|          }
 8655|       |
 8656|       |          // optional string php_metadata_namespace = 44;
 8657|      2|          if (cached_has_bits & 0x00000100u) {
  ------------------
  |  Branch (8657:15): [True: 0, False: 2]
  ------------------
 8658|      0|            const std::string& _s = this_._internal_php_metadata_namespace();
 8659|      0|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8660|      0|                                        "google.protobuf.FileOptions.php_metadata_namespace");
 8661|      0|            target = stream->WriteStringMaybeAliased(44, _s, target);
 8662|      0|          }
 8663|       |
 8664|       |          // optional string ruby_package = 45;
 8665|      2|          if (cached_has_bits & 0x00000200u) {
  ------------------
  |  Branch (8665:15): [True: 0, False: 2]
  ------------------
 8666|      0|            const std::string& _s = this_._internal_ruby_package();
 8667|      0|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 8668|      0|                                        "google.protobuf.FileOptions.ruby_package");
 8669|      0|            target = stream->WriteStringMaybeAliased(45, _s, target);
 8670|      0|          }
 8671|       |
 8672|       |          // optional .google.protobuf.FeatureSet features = 50;
 8673|      2|          if (cached_has_bits & 0x00000400u) {
  ------------------
  |  Branch (8673:15): [True: 0, False: 2]
  ------------------
 8674|      0|            target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
 8675|      0|                50, *this_._impl_.features_, this_._impl_.features_->GetCachedSize(), target,
 8676|      0|                stream);
 8677|      0|          }
 8678|       |
 8679|       |          // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
 8680|      2|          for (unsigned i = 0, n = static_cast<unsigned>(
 8681|      2|                                   this_._internal_uninterpreted_option_size());
 8682|      2|               i < n; i++) {
  ------------------
  |  Branch (8682:16): [True: 0, False: 2]
  ------------------
 8683|      0|            const auto& repfield = this_._internal_uninterpreted_option().Get(i);
 8684|      0|            target =
 8685|      0|                ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
 8686|      0|                    999, repfield, repfield.GetCachedSize(),
 8687|      0|                    target, stream);
 8688|      0|          }
 8689|       |
 8690|       |          // Extension range [1000, 536870912)
 8691|      2|          target = this_._impl_._extensions_._InternalSerialize(
 8692|      2|              internal_default_instance(), 1000, 536870912, target, stream);
 8693|      2|          if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|      2|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 2]
  |  |  |  Branch (365:54): [Folded, False: 2]
  |  |  |  Branch (365:63): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 8694|      0|            target =
 8695|      0|                ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
 8696|      0|                    this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
 8697|      0|          }
 8698|       |          // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.FileOptions)
 8699|      2|          return target;
 8700|      2|        }
_ZNK6google8protobuf11FileOptions12ByteSizeLongEv:
 8706|      2|        ::size_t FileOptions::ByteSizeLong() const {
 8707|      2|          const FileOptions& this_ = *this;
 8708|      2|#endif  // PROTOBUF_CUSTOM_VTABLE
 8709|       |          // @@protoc_insertion_point(message_byte_size_start:google.protobuf.FileOptions)
 8710|      2|          ::size_t total_size = 0;
 8711|      2|          total_size += this_._impl_._extensions_.ByteSize();
 8712|       |
 8713|      2|          ::uint32_t cached_has_bits = 0;
 8714|       |          // Prevent compiler warnings about cached_has_bits being unused
 8715|      2|          (void)cached_has_bits;
 8716|       |
 8717|      2|          ::_pbi::Prefetch5LinesFrom7Lines(&this_);
 8718|      2|           {
 8719|       |            // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
 8720|      2|            {
 8721|      2|              total_size += 2UL * this_._internal_uninterpreted_option_size();
 8722|      2|              for (const auto& msg : this_._internal_uninterpreted_option()) {
  ------------------
  |  Branch (8722:36): [True: 0, False: 2]
  ------------------
 8723|      0|                total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
 8724|      0|              }
 8725|      2|            }
 8726|      2|          }
 8727|      2|          cached_has_bits = this_._impl_._has_bits_[0];
 8728|      2|          if (cached_has_bits & 0x000000ffu) {
  ------------------
  |  Branch (8728:15): [True: 2, False: 0]
  ------------------
 8729|       |            // optional string java_package = 1;
 8730|      2|            if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (8730:17): [True: 2, False: 0]
  ------------------
 8731|      2|              total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8732|      2|                                              this_._internal_java_package());
 8733|      2|            }
 8734|       |            // optional string java_outer_classname = 8;
 8735|      2|            if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (8735:17): [True: 2, False: 0]
  ------------------
 8736|      2|              total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8737|      2|                                              this_._internal_java_outer_classname());
 8738|      2|            }
 8739|       |            // optional string go_package = 11;
 8740|      2|            if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (8740:17): [True: 2, False: 0]
  ------------------
 8741|      2|              total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8742|      2|                                              this_._internal_go_package());
 8743|      2|            }
 8744|       |            // optional string objc_class_prefix = 36;
 8745|      2|            if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (8745:17): [True: 2, False: 0]
  ------------------
 8746|      2|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8747|      2|                                              this_._internal_objc_class_prefix());
 8748|      2|            }
 8749|       |            // optional string csharp_namespace = 37;
 8750|      2|            if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (8750:17): [True: 2, False: 0]
  ------------------
 8751|      2|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8752|      2|                                              this_._internal_csharp_namespace());
 8753|      2|            }
 8754|       |            // optional string swift_prefix = 39;
 8755|      2|            if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (8755:17): [True: 0, False: 2]
  ------------------
 8756|      0|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8757|      0|                                              this_._internal_swift_prefix());
 8758|      0|            }
 8759|       |            // optional string php_class_prefix = 40;
 8760|      2|            if (cached_has_bits & 0x00000040u) {
  ------------------
  |  Branch (8760:17): [True: 0, False: 2]
  ------------------
 8761|      0|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8762|      0|                                              this_._internal_php_class_prefix());
 8763|      0|            }
 8764|       |            // optional string php_namespace = 41;
 8765|      2|            if (cached_has_bits & 0x00000080u) {
  ------------------
  |  Branch (8765:17): [True: 0, False: 2]
  ------------------
 8766|      0|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8767|      0|                                              this_._internal_php_namespace());
 8768|      0|            }
 8769|      2|          }
 8770|      2|          if (cached_has_bits & 0x0000ff00u) {
  ------------------
  |  Branch (8770:15): [True: 1, False: 1]
  ------------------
 8771|       |            // optional string php_metadata_namespace = 44;
 8772|      1|            if (cached_has_bits & 0x00000100u) {
  ------------------
  |  Branch (8772:17): [True: 0, False: 1]
  ------------------
 8773|      0|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8774|      0|                                              this_._internal_php_metadata_namespace());
 8775|      0|            }
 8776|       |            // optional string ruby_package = 45;
 8777|      1|            if (cached_has_bits & 0x00000200u) {
  ------------------
  |  Branch (8777:17): [True: 0, False: 1]
  ------------------
 8778|      0|              total_size += 2 + ::google::protobuf::internal::WireFormatLite::StringSize(
 8779|      0|                                              this_._internal_ruby_package());
 8780|      0|            }
 8781|       |            // optional .google.protobuf.FeatureSet features = 50;
 8782|      1|            if (cached_has_bits & 0x00000400u) {
  ------------------
  |  Branch (8782:17): [True: 0, False: 1]
  ------------------
 8783|      0|              total_size += 2 +
 8784|      0|                            ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.features_);
 8785|      0|            }
 8786|       |            // optional bool java_multiple_files = 10 [default = false];
 8787|      1|            if (cached_has_bits & 0x00000800u) {
  ------------------
  |  Branch (8787:17): [True: 1, False: 0]
  ------------------
 8788|      1|              total_size += 2;
 8789|      1|            }
 8790|       |            // optional bool java_generate_equals_and_hash = 20 [deprecated = true];
 8791|      1|            if (cached_has_bits & 0x00001000u) {
  ------------------
  |  Branch (8791:17): [True: 0, False: 1]
  ------------------
 8792|      0|              total_size += 3;
 8793|      0|            }
 8794|       |            // optional bool java_string_check_utf8 = 27 [default = false];
 8795|      1|            if (cached_has_bits & 0x00002000u) {
  ------------------
  |  Branch (8795:17): [True: 0, False: 1]
  ------------------
 8796|      0|              total_size += 3;
 8797|      0|            }
 8798|       |            // optional bool cc_generic_services = 16 [default = false];
 8799|      1|            if (cached_has_bits & 0x00004000u) {
  ------------------
  |  Branch (8799:17): [True: 0, False: 1]
  ------------------
 8800|      0|              total_size += 3;
 8801|      0|            }
 8802|       |            // optional bool java_generic_services = 17 [default = false];
 8803|      1|            if (cached_has_bits & 0x00008000u) {
  ------------------
  |  Branch (8803:17): [True: 0, False: 1]
  ------------------
 8804|      0|              total_size += 3;
 8805|      0|            }
 8806|      1|          }
 8807|      2|          if (cached_has_bits & 0x000f0000u) {
  ------------------
  |  Branch (8807:15): [True: 1, False: 1]
  ------------------
 8808|       |            // optional bool py_generic_services = 18 [default = false];
 8809|      1|            if (cached_has_bits & 0x00010000u) {
  ------------------
  |  Branch (8809:17): [True: 0, False: 1]
  ------------------
 8810|      0|              total_size += 3;
 8811|      0|            }
 8812|       |            // optional bool deprecated = 23 [default = false];
 8813|      1|            if (cached_has_bits & 0x00020000u) {
  ------------------
  |  Branch (8813:17): [True: 0, False: 1]
  ------------------
 8814|      0|              total_size += 3;
 8815|      0|            }
 8816|       |            // optional .google.protobuf.FileOptions.OptimizeMode optimize_for = 9 [default = SPEED];
 8817|      1|            if (cached_has_bits & 0x00040000u) {
  ------------------
  |  Branch (8817:17): [True: 1, False: 0]
  ------------------
 8818|      1|              total_size += 1 +
 8819|      1|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_optimize_for());
 8820|      1|            }
 8821|       |            // optional bool cc_enable_arenas = 31 [default = true];
 8822|      1|            if (cached_has_bits & 0x00080000u) {
  ------------------
  |  Branch (8822:17): [True: 1, False: 0]
  ------------------
 8823|      1|              total_size += 3;
 8824|      1|            }
 8825|      1|          }
 8826|      2|          return this_.MaybeComputeUnknownFieldsSize(total_size,
 8827|      2|                                                     &this_._impl_._cached_size_);
 8828|      2|        }
_ZN6google8protobuf11FileOptions17IsInitializedImplERKNS0_11MessageLiteE:
 8927|      9|    const MessageLite& msg) {
 8928|      9|  auto& this_ = static_cast<const FileOptions&>(msg);
 8929|      9|  if (!this_._impl_._extensions_.IsInitialized(
  ------------------
  |  Branch (8929:7): [True: 0, False: 9]
  ------------------
 8930|      9|          internal_default_instance())) {
 8931|      0|    return false;
 8932|      0|  }
 8933|      9|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_uninterpreted_option()))
  ------------------
  |  Branch (8933:7): [True: 0, False: 9]
  ------------------
 8934|      0|    return false;
 8935|      9|  if ((this_._impl_._has_bits_[0] & 0x00000400u) != 0) {
  ------------------
  |  Branch (8935:7): [True: 0, False: 9]
  ------------------
 8936|      0|    if (!this_._impl_.features_->IsInitialized()) return false;
  ------------------
  |  Branch (8936:9): [True: 0, False: 0]
  ------------------
 8937|      0|  }
 8938|      9|  return true;
 8939|      9|}
_ZNK6google8protobuf14MessageOptions12GetClassDataEv:
 9098|      1|const ::google::protobuf::internal::ClassData* MessageOptions::GetClassData() const {
 9099|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 9100|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 9101|      1|  return _class_data_.base();
 9102|      1|}
_ZN6google8protobuf27FieldOptions_EditionDefaultD2Ev:
 9468|     18|FieldOptions_EditionDefault::~FieldOptions_EditionDefault() {
 9469|       |  // @@protoc_insertion_point(destructor:google.protobuf.FieldOptions.EditionDefault)
 9470|     18|  SharedDtor(*this);
 9471|     18|}
_ZNK6google8protobuf27FieldOptions_EditionDefault12GetClassDataEv:
 9510|      1|const ::google::protobuf::internal::ClassData* FieldOptions_EditionDefault::GetClassData() const {
 9511|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 9512|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 9513|      1|  return _class_data_.base();
 9514|      1|}
_ZNK6google8protobuf27FieldOptions_EditionDefault18_InternalSerializeEPhPNS0_2io19EpsCopyOutputStreamE:
 9581|     18|            ::google::protobuf::io::EpsCopyOutputStream* stream) const {
 9582|     18|          const FieldOptions_EditionDefault& this_ = *this;
 9583|     18|#endif  // PROTOBUF_CUSTOM_VTABLE
 9584|       |          // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FieldOptions.EditionDefault)
 9585|     18|          ::uint32_t cached_has_bits = 0;
 9586|     18|          (void)cached_has_bits;
 9587|       |
 9588|     18|          cached_has_bits = this_._impl_._has_bits_[0];
 9589|       |          // optional string value = 2;
 9590|     18|          if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (9590:15): [True: 18, False: 0]
  ------------------
 9591|     18|            const std::string& _s = this_._internal_value();
 9592|     18|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 9593|     18|                                        "google.protobuf.FieldOptions.EditionDefault.value");
 9594|     18|            target = stream->WriteStringMaybeAliased(2, _s, target);
 9595|     18|          }
 9596|       |
 9597|       |          // optional .google.protobuf.Edition edition = 3;
 9598|     18|          if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (9598:15): [True: 18, False: 0]
  ------------------
 9599|     18|            target = stream->EnsureSpace(target);
 9600|     18|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
 9601|     18|                3, this_._internal_edition(), target);
 9602|     18|          }
 9603|       |
 9604|     18|          if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|     18|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 18]
  |  |  |  Branch (365:54): [Folded, False: 18]
  |  |  |  Branch (365:63): [True: 0, False: 18]
  |  |  ------------------
  ------------------
 9605|      0|            target =
 9606|      0|                ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
 9607|      0|                    this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
 9608|      0|          }
 9609|       |          // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.FieldOptions.EditionDefault)
 9610|     18|          return target;
 9611|     18|        }
_ZNK6google8protobuf27FieldOptions_EditionDefault12ByteSizeLongEv:
 9617|     18|        ::size_t FieldOptions_EditionDefault::ByteSizeLong() const {
 9618|     18|          const FieldOptions_EditionDefault& this_ = *this;
 9619|     18|#endif  // PROTOBUF_CUSTOM_VTABLE
 9620|       |          // @@protoc_insertion_point(message_byte_size_start:google.protobuf.FieldOptions.EditionDefault)
 9621|     18|          ::size_t total_size = 0;
 9622|       |
 9623|     18|          ::uint32_t cached_has_bits = 0;
 9624|       |          // Prevent compiler warnings about cached_has_bits being unused
 9625|     18|          (void)cached_has_bits;
 9626|       |
 9627|     18|          ::_pbi::Prefetch5LinesFrom7Lines(&this_);
 9628|     18|          cached_has_bits = this_._impl_._has_bits_[0];
 9629|     18|          if (cached_has_bits & 0x00000003u) {
  ------------------
  |  Branch (9629:15): [True: 18, False: 0]
  ------------------
 9630|       |            // optional string value = 2;
 9631|     18|            if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (9631:17): [True: 18, False: 0]
  ------------------
 9632|     18|              total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 9633|     18|                                              this_._internal_value());
 9634|     18|            }
 9635|       |            // optional .google.protobuf.Edition edition = 3;
 9636|     18|            if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (9636:17): [True: 18, False: 0]
  ------------------
 9637|     18|              total_size += 1 +
 9638|     18|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_edition());
 9639|     18|            }
 9640|     18|          }
 9641|     18|          return this_.MaybeComputeUnknownFieldsSize(total_size,
 9642|     18|                                                     &this_._impl_._cached_size_);
 9643|     18|        }
_ZN6google8protobuf27FieldOptions_FeatureSupportD2Ev:
 9751|      9|FieldOptions_FeatureSupport::~FieldOptions_FeatureSupport() {
 9752|       |  // @@protoc_insertion_point(destructor:google.protobuf.FieldOptions.FeatureSupport)
 9753|      9|  SharedDtor(*this);
 9754|      9|}
_ZNK6google8protobuf27FieldOptions_FeatureSupport12GetClassDataEv:
 9793|      1|const ::google::protobuf::internal::ClassData* FieldOptions_FeatureSupport::GetClassData() const {
 9794|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
 9795|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
 9796|      1|  return _class_data_.base();
 9797|      1|}
_ZNK6google8protobuf27FieldOptions_FeatureSupport18_InternalSerializeEPhPNS0_2io19EpsCopyOutputStreamE:
 9882|      9|            ::google::protobuf::io::EpsCopyOutputStream* stream) const {
 9883|      9|          const FieldOptions_FeatureSupport& this_ = *this;
 9884|      9|#endif  // PROTOBUF_CUSTOM_VTABLE
 9885|       |          // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FieldOptions.FeatureSupport)
 9886|      9|          ::uint32_t cached_has_bits = 0;
 9887|      9|          (void)cached_has_bits;
 9888|       |
 9889|      9|          cached_has_bits = this_._impl_._has_bits_[0];
 9890|       |          // optional .google.protobuf.Edition edition_introduced = 1;
 9891|      9|          if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (9891:15): [True: 9, False: 0]
  ------------------
 9892|      9|            target = stream->EnsureSpace(target);
 9893|      9|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
 9894|      9|                1, this_._internal_edition_introduced(), target);
 9895|      9|          }
 9896|       |
 9897|       |          // optional .google.protobuf.Edition edition_deprecated = 2;
 9898|      9|          if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (9898:15): [True: 1, False: 8]
  ------------------
 9899|      1|            target = stream->EnsureSpace(target);
 9900|      1|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
 9901|      1|                2, this_._internal_edition_deprecated(), target);
 9902|      1|          }
 9903|       |
 9904|       |          // optional string deprecation_warning = 3;
 9905|      9|          if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (9905:15): [True: 1, False: 8]
  ------------------
 9906|      1|            const std::string& _s = this_._internal_deprecation_warning();
 9907|      1|            ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField(_s.data(), static_cast<int>(_s.length()), ::google::protobuf::internal::WireFormat::SERIALIZE,
 9908|      1|                                        "google.protobuf.FieldOptions.FeatureSupport.deprecation_warning");
 9909|      1|            target = stream->WriteStringMaybeAliased(3, _s, target);
 9910|      1|          }
 9911|       |
 9912|       |          // optional .google.protobuf.Edition edition_removed = 4;
 9913|      9|          if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (9913:15): [True: 0, False: 9]
  ------------------
 9914|      0|            target = stream->EnsureSpace(target);
 9915|      0|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
 9916|      0|                4, this_._internal_edition_removed(), target);
 9917|      0|          }
 9918|       |
 9919|      9|          if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|      9|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 9]
  |  |  |  Branch (365:54): [Folded, False: 9]
  |  |  |  Branch (365:63): [True: 0, False: 9]
  |  |  ------------------
  ------------------
 9920|      0|            target =
 9921|      0|                ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
 9922|      0|                    this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
 9923|      0|          }
 9924|       |          // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.FieldOptions.FeatureSupport)
 9925|      9|          return target;
 9926|      9|        }
_ZNK6google8protobuf27FieldOptions_FeatureSupport12ByteSizeLongEv:
 9932|      9|        ::size_t FieldOptions_FeatureSupport::ByteSizeLong() const {
 9933|      9|          const FieldOptions_FeatureSupport& this_ = *this;
 9934|      9|#endif  // PROTOBUF_CUSTOM_VTABLE
 9935|       |          // @@protoc_insertion_point(message_byte_size_start:google.protobuf.FieldOptions.FeatureSupport)
 9936|      9|          ::size_t total_size = 0;
 9937|       |
 9938|      9|          ::uint32_t cached_has_bits = 0;
 9939|       |          // Prevent compiler warnings about cached_has_bits being unused
 9940|      9|          (void)cached_has_bits;
 9941|       |
 9942|      9|          ::_pbi::Prefetch5LinesFrom7Lines(&this_);
 9943|      9|          cached_has_bits = this_._impl_._has_bits_[0];
 9944|      9|          if (cached_has_bits & 0x0000000fu) {
  ------------------
  |  Branch (9944:15): [True: 9, False: 0]
  ------------------
 9945|       |            // optional string deprecation_warning = 3;
 9946|      9|            if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (9946:17): [True: 1, False: 8]
  ------------------
 9947|      1|              total_size += 1 + ::google::protobuf::internal::WireFormatLite::StringSize(
 9948|      1|                                              this_._internal_deprecation_warning());
 9949|      1|            }
 9950|       |            // optional .google.protobuf.Edition edition_introduced = 1;
 9951|      9|            if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (9951:17): [True: 9, False: 0]
  ------------------
 9952|      9|              total_size += 1 +
 9953|      9|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_edition_introduced());
 9954|      9|            }
 9955|       |            // optional .google.protobuf.Edition edition_deprecated = 2;
 9956|      9|            if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (9956:17): [True: 1, False: 8]
  ------------------
 9957|      1|              total_size += 1 +
 9958|      1|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_edition_deprecated());
 9959|      1|            }
 9960|       |            // optional .google.protobuf.Edition edition_removed = 4;
 9961|      9|            if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (9961:17): [True: 0, False: 9]
  ------------------
 9962|      0|              total_size += 1 +
 9963|      0|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_edition_removed());
 9964|      0|            }
 9965|      9|          }
 9966|      9|          return this_.MaybeComputeUnknownFieldsSize(total_size,
 9967|      9|                                                     &this_._impl_._cached_size_);
 9968|      9|        }
_ZN6google8protobuf12FieldOptionsC2EPNS0_5ArenaE:
10037|     17|    : ::google::protobuf::Message(arena) {
10038|     17|#endif  // PROTOBUF_CUSTOM_VTABLE
10039|     17|  SharedCtor(arena);
10040|       |  // @@protoc_insertion_point(arena_constructor:google.protobuf.FieldOptions)
10041|     17|}
_ZN6google8protobuf12FieldOptionsD2Ev:
10101|     17|FieldOptions::~FieldOptions() {
10102|       |  // @@protoc_insertion_point(destructor:google.protobuf.FieldOptions)
10103|     17|  SharedDtor(*this);
10104|     17|}
_ZNK6google8protobuf12FieldOptions12GetClassDataEv:
10167|     35|const ::google::protobuf::internal::ClassData* FieldOptions::GetClassData() const {
10168|     35|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
10169|     35|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
10170|     35|  return _class_data_.base();
10171|     35|}
_ZN6google8protobuf12FieldOptions5ClearEv:
10286|     17|PROTOBUF_NOINLINE void FieldOptions::Clear() {
10287|       |// @@protoc_insertion_point(message_clear_start:google.protobuf.FieldOptions)
10288|     17|  ::google::protobuf::internal::TSanWrite(&_impl_);
10289|     17|  ::uint32_t cached_has_bits = 0;
10290|       |  // Prevent compiler warnings about cached_has_bits being unused
10291|     17|  (void) cached_has_bits;
10292|       |
10293|     17|  _impl_._extensions_.Clear();
10294|     17|  _impl_.targets_.Clear();
10295|     17|  _impl_.edition_defaults_.Clear();
10296|     17|  _impl_.uninterpreted_option_.Clear();
10297|     17|  cached_has_bits = _impl_._has_bits_[0];
10298|     17|  if (cached_has_bits & 0x00000003u) {
  ------------------
  |  Branch (10298:7): [True: 0, False: 17]
  ------------------
10299|      0|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (10299:9): [True: 0, False: 0]
  ------------------
10300|      0|      ABSL_DCHECK(_impl_.features_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10301|      0|      _impl_.features_->Clear();
10302|      0|    }
10303|      0|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (10303:9): [True: 0, False: 0]
  ------------------
10304|      0|      ABSL_DCHECK(_impl_.feature_support_ != nullptr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10305|      0|      _impl_.feature_support_->Clear();
10306|      0|    }
10307|      0|  }
10308|     17|  if (cached_has_bits & 0x000000fcu) {
  ------------------
  |  Branch (10308:7): [True: 0, False: 17]
  ------------------
10309|      0|    ::memset(&_impl_.ctype_, 0, static_cast<::size_t>(
10310|      0|        reinterpret_cast<char*>(&_impl_.deprecated_) -
10311|      0|        reinterpret_cast<char*>(&_impl_.ctype_)) + sizeof(_impl_.deprecated_));
10312|      0|  }
10313|     17|  if (cached_has_bits & 0x00000700u) {
  ------------------
  |  Branch (10313:7): [True: 0, False: 17]
  ------------------
10314|      0|    ::memset(&_impl_.weak_, 0, static_cast<::size_t>(
10315|      0|        reinterpret_cast<char*>(&_impl_.retention_) -
10316|      0|        reinterpret_cast<char*>(&_impl_.weak_)) + sizeof(_impl_.retention_));
10317|      0|  }
10318|     17|  _impl_._has_bits_.Clear();
10319|     17|  _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
10320|     17|}
_ZNK6google8protobuf12FieldOptions18_InternalSerializeEPhPNS0_2io19EpsCopyOutputStreamE:
10330|     17|            ::google::protobuf::io::EpsCopyOutputStream* stream) const {
10331|     17|          const FieldOptions& this_ = *this;
10332|     17|#endif  // PROTOBUF_CUSTOM_VTABLE
10333|       |          // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FieldOptions)
10334|     17|          ::uint32_t cached_has_bits = 0;
10335|     17|          (void)cached_has_bits;
10336|       |
10337|     17|          cached_has_bits = this_._impl_._has_bits_[0];
10338|       |          // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
10339|     17|          if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (10339:15): [True: 0, False: 17]
  ------------------
10340|      0|            target = stream->EnsureSpace(target);
10341|      0|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
10342|      0|                1, this_._internal_ctype(), target);
10343|      0|          }
10344|       |
10345|       |          // optional bool packed = 2;
10346|     17|          if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (10346:15): [True: 3, False: 14]
  ------------------
10347|      3|            target = stream->EnsureSpace(target);
10348|      3|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
10349|      3|                2, this_._internal_packed(), target);
10350|      3|          }
10351|       |
10352|       |          // optional bool deprecated = 3 [default = false];
10353|     17|          if (cached_has_bits & 0x00000080u) {
  ------------------
  |  Branch (10353:15): [True: 3, False: 14]
  ------------------
10354|      3|            target = stream->EnsureSpace(target);
10355|      3|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
10356|      3|                3, this_._internal_deprecated(), target);
10357|      3|          }
10358|       |
10359|       |          // optional bool lazy = 5 [default = false];
10360|     17|          if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (10360:15): [True: 0, False: 17]
  ------------------
10361|      0|            target = stream->EnsureSpace(target);
10362|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
10363|      0|                5, this_._internal_lazy(), target);
10364|      0|          }
10365|       |
10366|       |          // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL];
10367|     17|          if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (10367:15): [True: 0, False: 17]
  ------------------
10368|      0|            target = stream->EnsureSpace(target);
10369|      0|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
10370|      0|                6, this_._internal_jstype(), target);
10371|      0|          }
10372|       |
10373|       |          // optional bool weak = 10 [default = false];
10374|     17|          if (cached_has_bits & 0x00000100u) {
  ------------------
  |  Branch (10374:15): [True: 0, False: 17]
  ------------------
10375|      0|            target = stream->EnsureSpace(target);
10376|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
10377|      0|                10, this_._internal_weak(), target);
10378|      0|          }
10379|       |
10380|       |          // optional bool unverified_lazy = 15 [default = false];
10381|     17|          if (cached_has_bits & 0x00000040u) {
  ------------------
  |  Branch (10381:15): [True: 0, False: 17]
  ------------------
10382|      0|            target = stream->EnsureSpace(target);
10383|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
10384|      0|                15, this_._internal_unverified_lazy(), target);
10385|      0|          }
10386|       |
10387|       |          // optional bool debug_redact = 16 [default = false];
10388|     17|          if (cached_has_bits & 0x00000200u) {
  ------------------
  |  Branch (10388:15): [True: 0, False: 17]
  ------------------
10389|      0|            target = stream->EnsureSpace(target);
10390|      0|            target = ::_pbi::WireFormatLite::WriteBoolToArray(
10391|      0|                16, this_._internal_debug_redact(), target);
10392|      0|          }
10393|       |
10394|       |          // optional .google.protobuf.FieldOptions.OptionRetention retention = 17;
10395|     17|          if (cached_has_bits & 0x00000400u) {
  ------------------
  |  Branch (10395:15): [True: 11, False: 6]
  ------------------
10396|     11|            target = stream->EnsureSpace(target);
10397|     11|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
10398|     11|                17, this_._internal_retention(), target);
10399|     11|          }
10400|       |
10401|       |          // repeated .google.protobuf.FieldOptions.OptionTargetType targets = 19;
10402|     36|          for (int i = 0, n = this_._internal_targets_size(); i < n; ++i) {
  ------------------
  |  Branch (10402:63): [True: 19, False: 17]
  ------------------
10403|     19|            target = stream->EnsureSpace(target);
10404|     19|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
10405|     19|                19, static_cast<::google::protobuf::FieldOptions_OptionTargetType>(this_._internal_targets().Get(i)),
10406|     19|                target);
10407|     19|          }
10408|       |
10409|       |          // repeated .google.protobuf.FieldOptions.EditionDefault edition_defaults = 20;
10410|     17|          for (unsigned i = 0, n = static_cast<unsigned>(
10411|     17|                                   this_._internal_edition_defaults_size());
10412|     35|               i < n; i++) {
  ------------------
  |  Branch (10412:16): [True: 18, False: 17]
  ------------------
10413|     18|            const auto& repfield = this_._internal_edition_defaults().Get(i);
10414|     18|            target =
10415|     18|                ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
10416|     18|                    20, repfield, repfield.GetCachedSize(),
10417|     18|                    target, stream);
10418|     18|          }
10419|       |
10420|       |          // optional .google.protobuf.FeatureSet features = 21;
10421|     17|          if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (10421:15): [True: 0, False: 17]
  ------------------
10422|      0|            target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
10423|      0|                21, *this_._impl_.features_, this_._impl_.features_->GetCachedSize(), target,
10424|      0|                stream);
10425|      0|          }
10426|       |
10427|       |          // optional .google.protobuf.FieldOptions.FeatureSupport feature_support = 22;
10428|     17|          if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (10428:15): [True: 9, False: 8]
  ------------------
10429|      9|            target = ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
10430|      9|                22, *this_._impl_.feature_support_, this_._impl_.feature_support_->GetCachedSize(), target,
10431|      9|                stream);
10432|      9|          }
10433|       |
10434|       |          // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
10435|     17|          for (unsigned i = 0, n = static_cast<unsigned>(
10436|     17|                                   this_._internal_uninterpreted_option_size());
10437|     17|               i < n; i++) {
  ------------------
  |  Branch (10437:16): [True: 0, False: 17]
  ------------------
10438|      0|            const auto& repfield = this_._internal_uninterpreted_option().Get(i);
10439|      0|            target =
10440|      0|                ::google::protobuf::internal::WireFormatLite::InternalWriteMessage(
10441|      0|                    999, repfield, repfield.GetCachedSize(),
10442|      0|                    target, stream);
10443|      0|          }
10444|       |
10445|       |          // Extension range [1000, 536870912)
10446|     17|          target = this_._impl_._extensions_._InternalSerialize(
10447|     17|              internal_default_instance(), 1000, 536870912, target, stream);
10448|     17|          if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|     17|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 17]
  |  |  |  Branch (365:54): [Folded, False: 17]
  |  |  |  Branch (365:63): [True: 0, False: 17]
  |  |  ------------------
  ------------------
10449|      0|            target =
10450|      0|                ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
10451|      0|                    this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
10452|      0|          }
10453|       |          // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.FieldOptions)
10454|     17|          return target;
10455|     17|        }
_ZNK6google8protobuf12FieldOptions12ByteSizeLongEv:
10461|     17|        ::size_t FieldOptions::ByteSizeLong() const {
10462|     17|          const FieldOptions& this_ = *this;
10463|     17|#endif  // PROTOBUF_CUSTOM_VTABLE
10464|       |          // @@protoc_insertion_point(message_byte_size_start:google.protobuf.FieldOptions)
10465|     17|          ::size_t total_size = 0;
10466|     17|          total_size += this_._impl_._extensions_.ByteSize();
10467|       |
10468|     17|          ::uint32_t cached_has_bits = 0;
10469|       |          // Prevent compiler warnings about cached_has_bits being unused
10470|     17|          (void)cached_has_bits;
10471|       |
10472|     17|          ::_pbi::Prefetch5LinesFrom7Lines(&this_);
10473|     17|           {
10474|       |            // repeated .google.protobuf.FieldOptions.OptionTargetType targets = 19;
10475|     17|            {
10476|     17|              std::size_t data_size =
10477|     17|                  ::_pbi::WireFormatLite::EnumSize(this_._internal_targets());
10478|     17|              std::size_t tag_size = std::size_t{2} *
10479|     17|                  ::_pbi::FromIntSize(this_._internal_targets_size());
10480|     17|              total_size += data_size + tag_size;
10481|     17|            }
10482|       |            // repeated .google.protobuf.FieldOptions.EditionDefault edition_defaults = 20;
10483|     17|            {
10484|     17|              total_size += 2UL * this_._internal_edition_defaults_size();
10485|     18|              for (const auto& msg : this_._internal_edition_defaults()) {
  ------------------
  |  Branch (10485:36): [True: 18, False: 17]
  ------------------
10486|     18|                total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
10487|     18|              }
10488|     17|            }
10489|       |            // repeated .google.protobuf.UninterpretedOption uninterpreted_option = 999;
10490|     17|            {
10491|     17|              total_size += 2UL * this_._internal_uninterpreted_option_size();
10492|     17|              for (const auto& msg : this_._internal_uninterpreted_option()) {
  ------------------
  |  Branch (10492:36): [True: 0, False: 17]
  ------------------
10493|      0|                total_size += ::google::protobuf::internal::WireFormatLite::MessageSize(msg);
10494|      0|              }
10495|     17|            }
10496|     17|          }
10497|     17|          cached_has_bits = this_._impl_._has_bits_[0];
10498|     17|          if (cached_has_bits & 0x000000ffu) {
  ------------------
  |  Branch (10498:15): [True: 15, False: 2]
  ------------------
10499|       |            // optional .google.protobuf.FeatureSet features = 21;
10500|     15|            if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (10500:17): [True: 0, False: 15]
  ------------------
10501|      0|              total_size += 2 +
10502|      0|                            ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.features_);
10503|      0|            }
10504|       |            // optional .google.protobuf.FieldOptions.FeatureSupport feature_support = 22;
10505|     15|            if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (10505:17): [True: 9, False: 6]
  ------------------
10506|      9|              total_size += 2 +
10507|      9|                            ::google::protobuf::internal::WireFormatLite::MessageSize(*this_._impl_.feature_support_);
10508|      9|            }
10509|       |            // optional .google.protobuf.FieldOptions.CType ctype = 1 [default = STRING];
10510|     15|            if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (10510:17): [True: 0, False: 15]
  ------------------
10511|      0|              total_size += 1 +
10512|      0|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_ctype());
10513|      0|            }
10514|       |            // optional .google.protobuf.FieldOptions.JSType jstype = 6 [default = JS_NORMAL];
10515|     15|            if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (10515:17): [True: 0, False: 15]
  ------------------
10516|      0|              total_size += 1 +
10517|      0|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_jstype());
10518|      0|            }
10519|       |            // optional bool packed = 2;
10520|     15|            if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (10520:17): [True: 3, False: 12]
  ------------------
10521|      3|              total_size += 2;
10522|      3|            }
10523|       |            // optional bool lazy = 5 [default = false];
10524|     15|            if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (10524:17): [True: 0, False: 15]
  ------------------
10525|      0|              total_size += 2;
10526|      0|            }
10527|       |            // optional bool unverified_lazy = 15 [default = false];
10528|     15|            if (cached_has_bits & 0x00000040u) {
  ------------------
  |  Branch (10528:17): [True: 0, False: 15]
  ------------------
10529|      0|              total_size += 2;
10530|      0|            }
10531|       |            // optional bool deprecated = 3 [default = false];
10532|     15|            if (cached_has_bits & 0x00000080u) {
  ------------------
  |  Branch (10532:17): [True: 3, False: 12]
  ------------------
10533|      3|              total_size += 2;
10534|      3|            }
10535|     15|          }
10536|     17|          if (cached_has_bits & 0x00000700u) {
  ------------------
  |  Branch (10536:15): [True: 11, False: 6]
  ------------------
10537|       |            // optional bool weak = 10 [default = false];
10538|     11|            if (cached_has_bits & 0x00000100u) {
  ------------------
  |  Branch (10538:17): [True: 0, False: 11]
  ------------------
10539|      0|              total_size += 2;
10540|      0|            }
10541|       |            // optional bool debug_redact = 16 [default = false];
10542|     11|            if (cached_has_bits & 0x00000200u) {
  ------------------
  |  Branch (10542:17): [True: 0, False: 11]
  ------------------
10543|      0|              total_size += 3;
10544|      0|            }
10545|       |            // optional .google.protobuf.FieldOptions.OptionRetention retention = 17;
10546|     11|            if (cached_has_bits & 0x00000400u) {
  ------------------
  |  Branch (10546:17): [True: 11, False: 0]
  ------------------
10547|     11|              total_size += 2 +
10548|     11|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_retention());
10549|     11|            }
10550|     11|          }
10551|     17|          return this_.MaybeComputeUnknownFieldsSize(total_size,
10552|     17|                                                     &this_._impl_._cached_size_);
10553|     17|        }
_ZN6google8protobuf12FieldOptions17IsInitializedImplERKNS0_11MessageLiteE:
10632|     68|    const MessageLite& msg) {
10633|     68|  auto& this_ = static_cast<const FieldOptions&>(msg);
10634|     68|  if (!this_._impl_._extensions_.IsInitialized(
  ------------------
  |  Branch (10634:7): [True: 0, False: 68]
  ------------------
10635|     68|          internal_default_instance())) {
10636|      0|    return false;
10637|      0|  }
10638|     68|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_uninterpreted_option()))
  ------------------
  |  Branch (10638:7): [True: 0, False: 68]
  ------------------
10639|      0|    return false;
10640|     68|  if ((this_._impl_._has_bits_[0] & 0x00000001u) != 0) {
  ------------------
  |  Branch (10640:7): [True: 0, False: 68]
  ------------------
10641|      0|    if (!this_._impl_.features_->IsInitialized()) return false;
  ------------------
  |  Branch (10641:9): [True: 0, False: 0]
  ------------------
10642|      0|  }
10643|     68|  return true;
10644|     68|}
_ZNK6google8protobuf12OneofOptions12GetClassDataEv:
10781|      1|const ::google::protobuf::internal::ClassData* OneofOptions::GetClassData() const {
10782|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
10783|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
10784|      1|  return _class_data_.base();
10785|      1|}
_ZNK6google8protobuf11EnumOptions12GetClassDataEv:
11119|      1|const ::google::protobuf::internal::ClassData* EnumOptions::GetClassData() const {
11120|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
11121|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
11122|      1|  return _class_data_.base();
11123|      1|}
_ZNK6google8protobuf16EnumValueOptions12GetClassDataEv:
11530|      1|const ::google::protobuf::internal::ClassData* EnumValueOptions::GetClassData() const {
11531|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
11532|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
11533|      1|  return _class_data_.base();
11534|      1|}
_ZNK6google8protobuf14ServiceOptions12GetClassDataEv:
11947|      1|const ::google::protobuf::internal::ClassData* ServiceOptions::GetClassData() const {
11948|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
11949|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
11950|      1|  return _class_data_.base();
11951|      1|}
_ZNK6google8protobuf13MethodOptions12GetClassDataEv:
12313|      1|const ::google::protobuf::internal::ClassData* MethodOptions::GetClassData() const {
12314|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
12315|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
12316|      1|  return _class_data_.base();
12317|      1|}
_ZNK6google8protobuf28UninterpretedOption_NamePart12GetClassDataEv:
12678|      1|const ::google::protobuf::internal::ClassData* UninterpretedOption_NamePart::GetClassData() const {
12679|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
12680|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
12681|      1|  return _class_data_.base();
12682|      1|}
_ZNK6google8protobuf19UninterpretedOption12GetClassDataEv:
12988|      1|const ::google::protobuf::internal::ClassData* UninterpretedOption::GetClassData() const {
12989|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
12990|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
12991|      1|  return _class_data_.base();
12992|      1|}
_ZN6google8protobuf10FeatureSetC2EPNS0_5ArenaE:
13320|    230|    : ::google::protobuf::Message(arena) {
13321|    230|#endif  // PROTOBUF_CUSTOM_VTABLE
13322|    230|  SharedCtor(arena);
13323|       |  // @@protoc_insertion_point(arena_constructor:google.protobuf.FeatureSet)
13324|    230|}
_ZN6google8protobuf10FeatureSetC2EPNS0_5ArenaERKS1_:
13338|    605|    : ::google::protobuf::Message(arena) {
13339|    605|#endif  // PROTOBUF_CUSTOM_VTABLE
13340|    605|  FeatureSet* const _this = this;
13341|    605|  (void)_this;
13342|    605|  _internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(
13343|    605|      from._internal_metadata_);
13344|    605|  new (&_impl_) Impl_(internal_visibility(), arena, from._impl_, from);
13345|    605|  _impl_._extensions_.MergeFrom(this, from._impl_._extensions_);
13346|    605|  ::memcpy(reinterpret_cast<char *>(&_impl_) +
13347|    605|               offsetof(Impl_, field_presence_),
13348|    605|           reinterpret_cast<const char *>(&from._impl_) +
13349|    605|               offsetof(Impl_, field_presence_),
13350|    605|           offsetof(Impl_, json_format_) -
13351|    605|               offsetof(Impl_, field_presence_) +
13352|    605|               sizeof(Impl_::json_format_));
13353|       |
13354|       |  // @@protoc_insertion_point(copy_constructor:google.protobuf.FeatureSet)
13355|    605|}
_ZN6google8protobuf10FeatureSetD2Ev:
13371|    831|FeatureSet::~FeatureSet() {
13372|       |  // @@protoc_insertion_point(destructor:google.protobuf.FeatureSet)
13373|    831|  SharedDtor(*this);
13374|    831|}
_ZNK6google8protobuf10FeatureSet12GetClassDataEv:
13423|      1|const ::google::protobuf::internal::ClassData* FeatureSet::GetClassData() const {
13424|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
13425|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
13426|      1|  return _class_data_.base();
13427|      1|}
_ZNK6google8protobuf10FeatureSet18_InternalSerializeEPhPNS0_2io19EpsCopyOutputStreamE:
13524|    210|            ::google::protobuf::io::EpsCopyOutputStream* stream) const {
13525|    210|          const FeatureSet& this_ = *this;
13526|    210|#endif  // PROTOBUF_CUSTOM_VTABLE
13527|       |          // @@protoc_insertion_point(serialize_to_array_start:google.protobuf.FeatureSet)
13528|    210|          ::uint32_t cached_has_bits = 0;
13529|    210|          (void)cached_has_bits;
13530|       |
13531|    210|          cached_has_bits = this_._impl_._has_bits_[0];
13532|       |          // optional .google.protobuf.FeatureSet.FieldPresence field_presence = 1 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13533|    210|          if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (13533:15): [True: 210, False: 0]
  ------------------
13534|    210|            target = stream->EnsureSpace(target);
13535|    210|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
13536|    210|                1, this_._internal_field_presence(), target);
13537|    210|          }
13538|       |
13539|       |          // optional .google.protobuf.FeatureSet.EnumType enum_type = 2 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {
13540|    210|          if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (13540:15): [True: 210, False: 0]
  ------------------
13541|    210|            target = stream->EnsureSpace(target);
13542|    210|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
13543|    210|                2, this_._internal_enum_type(), target);
13544|    210|          }
13545|       |
13546|       |          // optional .google.protobuf.FeatureSet.RepeatedFieldEncoding repeated_field_encoding = 3 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13547|    210|          if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (13547:15): [True: 210, False: 0]
  ------------------
13548|    210|            target = stream->EnsureSpace(target);
13549|    210|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
13550|    210|                3, this_._internal_repeated_field_encoding(), target);
13551|    210|          }
13552|       |
13553|       |          // optional .google.protobuf.FeatureSet.Utf8Validation utf8_validation = 4 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13554|    210|          if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (13554:15): [True: 210, False: 0]
  ------------------
13555|    210|            target = stream->EnsureSpace(target);
13556|    210|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
13557|    210|                4, this_._internal_utf8_validation(), target);
13558|    210|          }
13559|       |
13560|       |          // optional .google.protobuf.FeatureSet.MessageEncoding message_encoding = 5 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13561|    210|          if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (13561:15): [True: 210, False: 0]
  ------------------
13562|    210|            target = stream->EnsureSpace(target);
13563|    210|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
13564|    210|                5, this_._internal_message_encoding(), target);
13565|    210|          }
13566|       |
13567|       |          // optional .google.protobuf.FeatureSet.JsonFormat json_format = 6 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_MESSAGE, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {
13568|    210|          if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (13568:15): [True: 210, False: 0]
  ------------------
13569|    210|            target = stream->EnsureSpace(target);
13570|    210|            target = ::_pbi::WireFormatLite::WriteEnumToArray(
13571|    210|                6, this_._internal_json_format(), target);
13572|    210|          }
13573|       |
13574|       |          // Extension range [1000, 10001)
13575|    210|          target = this_._impl_._extensions_._InternalSerialize(
13576|    210|              internal_default_instance(), 1000, 10001, target, stream);
13577|    210|          if (PROTOBUF_PREDICT_FALSE(this_._internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|    210|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 210]
  |  |  |  Branch (365:54): [Folded, False: 210]
  |  |  |  Branch (365:63): [True: 0, False: 210]
  |  |  ------------------
  ------------------
13578|      0|            target =
13579|      0|                ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray(
13580|      0|                    this_._internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance), target, stream);
13581|      0|          }
13582|       |          // @@protoc_insertion_point(serialize_to_array_end:google.protobuf.FeatureSet)
13583|    210|          return target;
13584|    210|        }
_ZNK6google8protobuf10FeatureSet12ByteSizeLongEv:
13590|    585|        ::size_t FeatureSet::ByteSizeLong() const {
13591|    585|          const FeatureSet& this_ = *this;
13592|    585|#endif  // PROTOBUF_CUSTOM_VTABLE
13593|       |          // @@protoc_insertion_point(message_byte_size_start:google.protobuf.FeatureSet)
13594|    585|          ::size_t total_size = 0;
13595|    585|          total_size += this_._impl_._extensions_.ByteSize();
13596|       |
13597|    585|          ::uint32_t cached_has_bits = 0;
13598|       |          // Prevent compiler warnings about cached_has_bits being unused
13599|    585|          (void)cached_has_bits;
13600|       |
13601|    585|          ::_pbi::Prefetch5LinesFrom7Lines(&this_);
13602|    585|          cached_has_bits = this_._impl_._has_bits_[0];
13603|    585|          if (cached_has_bits & 0x0000003fu) {
  ------------------
  |  Branch (13603:15): [True: 215, False: 370]
  ------------------
13604|       |            // optional .google.protobuf.FeatureSet.FieldPresence field_presence = 1 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13605|    215|            if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (13605:17): [True: 212, False: 3]
  ------------------
13606|    212|              total_size += 1 +
13607|    212|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_field_presence());
13608|    212|            }
13609|       |            // optional .google.protobuf.FeatureSet.EnumType enum_type = 2 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {
13610|    215|            if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (13610:17): [True: 210, False: 5]
  ------------------
13611|    210|              total_size += 1 +
13612|    210|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_enum_type());
13613|    210|            }
13614|       |            // optional .google.protobuf.FeatureSet.RepeatedFieldEncoding repeated_field_encoding = 3 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13615|    215|            if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (13615:17): [True: 213, False: 2]
  ------------------
13616|    213|              total_size += 1 +
13617|    213|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_repeated_field_encoding());
13618|    213|            }
13619|       |            // optional .google.protobuf.FeatureSet.Utf8Validation utf8_validation = 4 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13620|    215|            if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (13620:17): [True: 210, False: 5]
  ------------------
13621|    210|              total_size += 1 +
13622|    210|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_utf8_validation());
13623|    210|            }
13624|       |            // optional .google.protobuf.FeatureSet.MessageEncoding message_encoding = 5 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_FIELD, targets = TARGET_TYPE_FILE, edition_defaults = {
13625|    215|            if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (13625:17): [True: 210, False: 5]
  ------------------
13626|    210|              total_size += 1 +
13627|    210|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_message_encoding());
13628|    210|            }
13629|       |            // optional .google.protobuf.FeatureSet.JsonFormat json_format = 6 [retention = RETENTION_RUNTIME, targets = TARGET_TYPE_MESSAGE, targets = TARGET_TYPE_ENUM, targets = TARGET_TYPE_FILE, edition_defaults = {
13630|    215|            if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (13630:17): [True: 210, False: 5]
  ------------------
13631|    210|              total_size += 1 +
13632|    210|                            ::_pbi::WireFormatLite::EnumSize(this_._internal_json_format());
13633|    210|            }
13634|    215|          }
13635|    585|          return this_.MaybeComputeUnknownFieldsSize(total_size,
13636|    585|                                                     &this_._impl_._cached_size_);
13637|    585|        }
_ZN6google8protobuf10FeatureSet9MergeImplERNS0_11MessageLiteERKS2_:
13639|    440|void FeatureSet::MergeImpl(::google::protobuf::MessageLite& to_msg, const ::google::protobuf::MessageLite& from_msg) {
13640|    440|  auto* const _this = static_cast<FeatureSet*>(&to_msg);
13641|    440|  auto& from = static_cast<const FeatureSet&>(from_msg);
13642|       |  // @@protoc_insertion_point(class_specific_merge_from_start:google.protobuf.FeatureSet)
13643|    440|  ABSL_DCHECK_NE(&from, _this);
  ------------------
  |  |   76|    440|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|    440|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    440|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 440]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    440|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13644|    440|  ::uint32_t cached_has_bits = 0;
13645|    440|  (void) cached_has_bits;
13646|       |
13647|    440|  cached_has_bits = from._impl_._has_bits_[0];
13648|    440|  if (cached_has_bits & 0x0000003fu) {
  ------------------
  |  Branch (13648:7): [True: 219, False: 221]
  ------------------
13649|    219|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (13649:9): [True: 216, False: 3]
  ------------------
13650|    216|      _this->_impl_.field_presence_ = from._impl_.field_presence_;
13651|    216|    }
13652|    219|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (13652:9): [True: 214, False: 5]
  ------------------
13653|    214|      _this->_impl_.enum_type_ = from._impl_.enum_type_;
13654|    214|    }
13655|    219|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (13655:9): [True: 217, False: 2]
  ------------------
13656|    217|      _this->_impl_.repeated_field_encoding_ = from._impl_.repeated_field_encoding_;
13657|    217|    }
13658|    219|    if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (13658:9): [True: 214, False: 5]
  ------------------
13659|    214|      _this->_impl_.utf8_validation_ = from._impl_.utf8_validation_;
13660|    214|    }
13661|    219|    if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (13661:9): [True: 214, False: 5]
  ------------------
13662|    214|      _this->_impl_.message_encoding_ = from._impl_.message_encoding_;
13663|    214|    }
13664|    219|    if (cached_has_bits & 0x00000020u) {
  ------------------
  |  Branch (13664:9): [True: 214, False: 5]
  ------------------
13665|    214|      _this->_impl_.json_format_ = from._impl_.json_format_;
13666|    214|    }
13667|    219|  }
13668|    440|  _this->_impl_._has_bits_[0] |= cached_has_bits;
13669|    440|  _this->_impl_._extensions_.MergeFrom(internal_default_instance(), from._impl_._extensions_);
13670|    440|  _this->_internal_metadata_.MergeFrom<::google::protobuf::UnknownFieldSet>(from._internal_metadata_);
13671|    440|}
_ZN6google8protobuf10FeatureSet17IsInitializedImplERKNS0_11MessageLiteE:
13681|      8|    const MessageLite& msg) {
13682|      8|  auto& this_ = static_cast<const FeatureSet&>(msg);
13683|      8|  if (!this_._impl_._extensions_.IsInitialized(
  ------------------
  |  Branch (13683:7): [True: 0, False: 8]
  ------------------
13684|      8|          internal_default_instance())) {
13685|      0|    return false;
13686|      0|  }
13687|      8|  return true;
13688|      8|}
_ZN6google8protobuf10FeatureSet12InternalSwapEPS1_:
13690|    230|void FeatureSet::InternalSwap(FeatureSet* PROTOBUF_RESTRICT other) {
13691|    230|  using std::swap;
13692|    230|  _impl_._extensions_.InternalSwap(&other->_impl_._extensions_);
13693|    230|  _internal_metadata_.InternalSwap(&other->_internal_metadata_);
13694|    230|  swap(_impl_._has_bits_[0], other->_impl_._has_bits_[0]);
13695|    230|  ::google::protobuf::internal::memswap<
13696|    230|      PROTOBUF_FIELD_OFFSET(FeatureSet, _impl_.json_format_)
13697|    230|      + sizeof(FeatureSet::_impl_.json_format_)
13698|    230|      - PROTOBUF_FIELD_OFFSET(FeatureSet, _impl_.field_presence_)>(
13699|    230|          reinterpret_cast<char*>(&_impl_.field_presence_),
13700|    230|          reinterpret_cast<char*>(&other->_impl_.field_presence_));
13701|    230|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefaultC2EPNS0_5ArenaE:
13720|      4|    : ::google::protobuf::Message(arena) {
13721|      4|#endif  // PROTOBUF_CUSTOM_VTABLE
13722|      4|  SharedCtor(arena);
13723|       |  // @@protoc_insertion_point(arena_constructor:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault)
13724|      4|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefaultD2Ev:
13769|      4|FeatureSetDefaults_FeatureSetEditionDefault::~FeatureSetDefaults_FeatureSetEditionDefault() {
13770|       |  // @@protoc_insertion_point(destructor:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault)
13771|      4|  SharedDtor(*this);
13772|      4|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault12GetClassDataEv:
13812|      1|const ::google::protobuf::internal::ClassData* FeatureSetDefaults_FeatureSetEditionDefault::GetClassData() const {
13813|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
13814|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
13815|      1|  return _class_data_.base();
13816|      1|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault17IsInitializedImplERKNS0_11MessageLiteE:
14016|      4|    const MessageLite& msg) {
14017|      4|  auto& this_ = static_cast<const FeatureSetDefaults_FeatureSetEditionDefault&>(msg);
14018|      4|  if ((this_._impl_._has_bits_[0] & 0x00000001u) != 0) {
  ------------------
  |  Branch (14018:7): [True: 4, False: 0]
  ------------------
14019|      4|    if (!this_._impl_.overridable_features_->IsInitialized()) return false;
  ------------------
  |  Branch (14019:9): [True: 0, False: 4]
  ------------------
14020|      4|  }
14021|      4|  if ((this_._impl_._has_bits_[0] & 0x00000002u) != 0) {
  ------------------
  |  Branch (14021:7): [True: 4, False: 0]
  ------------------
14022|      4|    if (!this_._impl_.fixed_features_->IsInitialized()) return false;
  ------------------
  |  Branch (14022:9): [True: 0, False: 4]
  ------------------
14023|      4|  }
14024|      4|  return true;
14025|      4|}
_ZN6google8protobuf18FeatureSetDefaultsC2EPNS0_5ArenaE:
14056|      1|    : ::google::protobuf::Message(arena) {
14057|      1|#endif  // PROTOBUF_CUSTOM_VTABLE
14058|      1|  SharedCtor(arena);
14059|       |  // @@protoc_insertion_point(arena_constructor:google.protobuf.FeatureSetDefaults)
14060|      1|}
_ZNK6google8protobuf18FeatureSetDefaults12GetClassDataEv:
14159|      3|const ::google::protobuf::internal::ClassData* FeatureSetDefaults::GetClassData() const {
14160|      3|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
14161|      3|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
14162|      3|  return _class_data_.base();
14163|      3|}
_ZN6google8protobuf18FeatureSetDefaults5ClearEv:
14208|      1|PROTOBUF_NOINLINE void FeatureSetDefaults::Clear() {
14209|       |// @@protoc_insertion_point(message_clear_start:google.protobuf.FeatureSetDefaults)
14210|      1|  ::google::protobuf::internal::TSanWrite(&_impl_);
14211|      1|  ::uint32_t cached_has_bits = 0;
14212|       |  // Prevent compiler warnings about cached_has_bits being unused
14213|      1|  (void) cached_has_bits;
14214|       |
14215|      1|  _impl_.defaults_.Clear();
14216|      1|  cached_has_bits = _impl_._has_bits_[0];
14217|      1|  if (cached_has_bits & 0x00000003u) {
  ------------------
  |  Branch (14217:7): [True: 0, False: 1]
  ------------------
14218|      0|    ::memset(&_impl_.minimum_edition_, 0, static_cast<::size_t>(
14219|      0|        reinterpret_cast<char*>(&_impl_.maximum_edition_) -
14220|      0|        reinterpret_cast<char*>(&_impl_.minimum_edition_)) + sizeof(_impl_.maximum_edition_));
14221|      0|  }
14222|      1|  _impl_._has_bits_.Clear();
14223|      1|  _internal_metadata_.Clear<::google::protobuf::UnknownFieldSet>();
14224|      1|}
_ZN6google8protobuf18FeatureSetDefaults17IsInitializedImplERKNS0_11MessageLiteE:
14348|      1|    const MessageLite& msg) {
14349|      1|  auto& this_ = static_cast<const FeatureSetDefaults&>(msg);
14350|      1|  if (!::google::protobuf::internal::AllAreInitialized(this_._internal_defaults()))
  ------------------
  |  Branch (14350:7): [True: 0, False: 1]
  ------------------
14351|      0|    return false;
14352|      1|  return true;
14353|      1|}
_ZNK6google8protobuf23SourceCodeInfo_Location12GetClassDataEv:
14497|      1|const ::google::protobuf::internal::ClassData* SourceCodeInfo_Location::GetClassData() const {
14498|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
14499|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
14500|      1|  return _class_data_.base();
14501|      1|}
_ZNK6google8protobuf14SourceCodeInfo12GetClassDataEv:
14867|      1|const ::google::protobuf::internal::ClassData* SourceCodeInfo::GetClassData() const {
14868|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
14869|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
14870|      1|  return _class_data_.base();
14871|      1|}
_ZNK6google8protobuf28GeneratedCodeInfo_Annotation12GetClassDataEv:
15147|      1|const ::google::protobuf::internal::ClassData* GeneratedCodeInfo_Annotation::GetClassData() const {
15148|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
15149|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
15150|      1|  return _class_data_.base();
15151|      1|}
_ZNK6google8protobuf17GeneratedCodeInfo12GetClassDataEv:
15504|      1|const ::google::protobuf::internal::ClassData* GeneratedCodeInfo::GetClassData() const {
15505|      1|  ::google::protobuf::internal::PrefetchToLocalCache(&_class_data_);
15506|      1|  ::google::protobuf::internal::PrefetchToLocalCache(_class_data_.tc_table);
15507|      1|  return _class_data_.base();
15508|      1|}
_ZN6google8protobuf19FileDescriptorProto10SharedCtorEPNS0_5ArenaE:
 2942|     10|inline void FileDescriptorProto::SharedCtor(::_pb::Arena* arena) {
 2943|     10|  new (&_impl_) Impl_(internal_visibility(), arena);
 2944|     10|  ::memset(reinterpret_cast<char *>(&_impl_) +
 2945|     10|               offsetof(Impl_, options_),
 2946|     10|           0,
 2947|     10|           offsetof(Impl_, edition_) -
 2948|       |               offsetof(Impl_, options_) +
 2949|     10|               sizeof(Impl_::edition_));
 2950|     10|}
_ZN6google8protobuf19FileDescriptorProto5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
 2930|     10|      : _cached_size_{0},
 2931|     10|        dependency_{visibility, arena},
 2932|     10|        message_type_{visibility, arena},
 2933|     10|        enum_type_{visibility, arena},
 2934|     10|        service_{visibility, arena},
 2935|     10|        extension_{visibility, arena},
 2936|     10|        public_dependency_{visibility, arena},
 2937|     10|        weak_dependency_{visibility, arena},
 2938|     10|        name_(arena),
 2939|     10|        package_(arena),
 2940|     10|        syntax_(arena) {}
_ZN6google8protobuf19FileDescriptorProto10SharedDtorERNS0_11MessageLiteE:
 2955|      6|inline void FileDescriptorProto::SharedDtor(MessageLite& self) {
 2956|      6|  FileDescriptorProto& this_ = static_cast<FileDescriptorProto&>(self);
 2957|      6|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 2958|      6|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      6|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      6|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     12|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      6|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     12|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     12|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 6, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      6|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 6]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      6|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 6, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     12|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     12|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2959|      6|  this_._impl_.name_.Destroy();
 2960|      6|  this_._impl_.package_.Destroy();
 2961|      6|  this_._impl_.syntax_.Destroy();
 2962|      6|  delete this_._impl_.options_;
 2963|      6|  delete this_._impl_.source_code_info_;
 2964|      6|  this_._impl_.~Impl_();
 2965|      6|}
_ZN6google8protobuf30DescriptorProto_ExtensionRange10SharedDtorERNS0_11MessageLiteE:
 3621|     14|inline void DescriptorProto_ExtensionRange::SharedDtor(MessageLite& self) {
 3622|     14|  DescriptorProto_ExtensionRange& this_ = static_cast<DescriptorProto_ExtensionRange&>(self);
 3623|     14|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 3624|     14|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     14|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     14|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     28|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     14|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     28|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     28|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 14, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     14|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     14|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 14, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     28|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     28|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3625|     14|  delete this_._impl_.options_;
 3626|     14|  this_._impl_.~Impl_();
 3627|     14|}
_ZN6google8protobuf29DescriptorProto_ReservedRange10SharedDtorERNS0_11MessageLiteE:
 3918|     14|inline void DescriptorProto_ReservedRange::SharedDtor(MessageLite& self) {
 3919|     14|  DescriptorProto_ReservedRange& this_ = static_cast<DescriptorProto_ReservedRange&>(self);
 3920|     14|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 3921|     14|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     14|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     14|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     28|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     14|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     28|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     28|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 14, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     14|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     14|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 14, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     28|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     28|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3922|     14|  this_._impl_.~Impl_();
 3923|     14|}
_ZN6google8protobuf15DescriptorProto10SharedDtorERNS0_11MessageLiteE:
 4207|     56|inline void DescriptorProto::SharedDtor(MessageLite& self) {
 4208|     56|  DescriptorProto& this_ = static_cast<DescriptorProto&>(self);
 4209|     56|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 4210|     56|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     56|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     56|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    112|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     56|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    112|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    112|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 56, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     56|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 56]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     56|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 56, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    112|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    112|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 4211|     56|  this_._impl_.name_.Destroy();
 4212|     56|  delete this_._impl_.options_;
 4213|     56|  this_._impl_.~Impl_();
 4214|     56|}
_ZN6google8protobuf20FieldDescriptorProto10SharedDtorERNS0_11MessageLiteE:
 5578|    238|inline void FieldDescriptorProto::SharedDtor(MessageLite& self) {
 5579|    238|  FieldDescriptorProto& this_ = static_cast<FieldDescriptorProto&>(self);
 5580|    238|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 5581|    238|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|    238|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    238|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    476|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    238|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    476|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    476|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 238, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    238|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 238]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    238|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 238, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    476|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    476|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5582|    238|  this_._impl_.name_.Destroy();
 5583|    238|  this_._impl_.extendee_.Destroy();
 5584|    238|  this_._impl_.type_name_.Destroy();
 5585|    238|  this_._impl_.default_value_.Destroy();
 5586|    238|  this_._impl_.json_name_.Destroy();
 5587|    238|  delete this_._impl_.options_;
 5588|    238|  this_._impl_.~Impl_();
 5589|    238|}
_ZN6google8protobuf20OneofDescriptorProto10SharedDtorERNS0_11MessageLiteE:
 6114|      4|inline void OneofDescriptorProto::SharedDtor(MessageLite& self) {
 6115|      4|  OneofDescriptorProto& this_ = static_cast<OneofDescriptorProto&>(self);
 6116|      4|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 6117|      4|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      4|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6118|      4|  this_._impl_.name_.Destroy();
 6119|      4|  delete this_._impl_.options_;
 6120|      4|  this_._impl_.~Impl_();
 6121|      4|}
_ZN6google8protobuf37EnumDescriptorProto_EnumReservedRange10SharedDtorERNS0_11MessageLiteE:
 6392|      1|inline void EnumDescriptorProto_EnumReservedRange::SharedDtor(MessageLite& self) {
 6393|      1|  EnumDescriptorProto_EnumReservedRange& this_ = static_cast<EnumDescriptorProto_EnumReservedRange&>(self);
 6394|      1|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 6395|      1|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      1|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      1|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      2|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      1|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      2|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      2|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      1|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      1|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      2|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      2|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6396|      1|  this_._impl_.~Impl_();
 6397|      1|}
_ZN6google8protobuf19EnumDescriptorProto10SharedDtorERNS0_11MessageLiteE:
 6671|     18|inline void EnumDescriptorProto::SharedDtor(MessageLite& self) {
 6672|     18|  EnumDescriptorProto& this_ = static_cast<EnumDescriptorProto&>(self);
 6673|     18|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 6674|     18|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     18|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     18|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     36|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     18|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     36|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     36|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     18|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     18|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 18, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     36|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     36|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6675|     18|  this_._impl_.name_.Destroy();
 6676|     18|  delete this_._impl_.options_;
 6677|     18|  this_._impl_.~Impl_();
 6678|     18|}
_ZN6google8protobuf24EnumValueDescriptorProto10SharedDtorERNS0_11MessageLiteE:
 7085|     86|inline void EnumValueDescriptorProto::SharedDtor(MessageLite& self) {
 7086|     86|  EnumValueDescriptorProto& this_ = static_cast<EnumValueDescriptorProto&>(self);
 7087|     86|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 7088|     86|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     86|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     86|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    172|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     86|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    172|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    172|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 86, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     86|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 86]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     86|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 86, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    172|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    172|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7089|     86|  this_._impl_.name_.Destroy();
 7090|     86|  delete this_._impl_.options_;
 7091|     86|  this_._impl_.~Impl_();
 7092|     86|}
_ZN6google8protobuf11FileOptions10SharedCtorEPNS0_5ArenaE:
 8195|      2|inline void FileOptions::SharedCtor(::_pb::Arena* arena) {
 8196|      2|  new (&_impl_) Impl_(internal_visibility(), arena);
 8197|      2|  ::memset(reinterpret_cast<char *>(&_impl_) +
 8198|      2|               offsetof(Impl_, features_),
 8199|      2|           0,
 8200|      2|           offsetof(Impl_, deprecated_) -
 8201|       |               offsetof(Impl_, features_) +
 8202|      2|               sizeof(Impl_::deprecated_));
 8203|      2|}
_ZN6google8protobuf11FileOptions5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
 8179|      2|      : _extensions_{visibility, arena},
 8180|      2|        _cached_size_{0},
 8181|      2|        uninterpreted_option_{visibility, arena},
 8182|      2|        java_package_(arena),
 8183|      2|        java_outer_classname_(arena),
 8184|      2|        go_package_(arena),
 8185|      2|        objc_class_prefix_(arena),
 8186|      2|        csharp_namespace_(arena),
 8187|      2|        swift_prefix_(arena),
 8188|      2|        php_class_prefix_(arena),
 8189|      2|        php_namespace_(arena),
 8190|      2|        php_metadata_namespace_(arena),
 8191|      2|        ruby_package_(arena),
 8192|      2|        optimize_for_{static_cast< ::google::protobuf::FileOptions_OptimizeMode >(1)},
 8193|      2|        cc_enable_arenas_{true} {}
_ZN6google8protobuf11FileOptions10SharedDtorERNS0_11MessageLiteE:
 8208|      3|inline void FileOptions::SharedDtor(MessageLite& self) {
 8209|      3|  FileOptions& this_ = static_cast<FileOptions&>(self);
 8210|      3|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 8211|      3|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      3|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      3|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      6|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      3|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      6|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      6|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      3|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      3|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      6|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      6|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8212|      3|  this_._impl_.java_package_.Destroy();
 8213|      3|  this_._impl_.java_outer_classname_.Destroy();
 8214|      3|  this_._impl_.go_package_.Destroy();
 8215|      3|  this_._impl_.objc_class_prefix_.Destroy();
 8216|      3|  this_._impl_.csharp_namespace_.Destroy();
 8217|      3|  this_._impl_.swift_prefix_.Destroy();
 8218|      3|  this_._impl_.php_class_prefix_.Destroy();
 8219|      3|  this_._impl_.php_namespace_.Destroy();
 8220|      3|  this_._impl_.php_metadata_namespace_.Destroy();
 8221|      3|  this_._impl_.ruby_package_.Destroy();
 8222|      3|  delete this_._impl_.features_;
 8223|      3|  this_._impl_.~Impl_();
 8224|      3|}
_ZN6google8protobuf27FieldOptions_EditionDefault10SharedDtorERNS0_11MessageLiteE:
 9472|     18|inline void FieldOptions_EditionDefault::SharedDtor(MessageLite& self) {
 9473|     18|  FieldOptions_EditionDefault& this_ = static_cast<FieldOptions_EditionDefault&>(self);
 9474|     18|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 9475|     18|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     18|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     18|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     36|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     18|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     36|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     36|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     18|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     18|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 18, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     36|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     36|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9476|     18|  this_._impl_.value_.Destroy();
 9477|     18|  this_._impl_.~Impl_();
 9478|     18|}
_ZN6google8protobuf27FieldOptions_FeatureSupport10SharedDtorERNS0_11MessageLiteE:
 9755|      9|inline void FieldOptions_FeatureSupport::SharedDtor(MessageLite& self) {
 9756|      9|  FieldOptions_FeatureSupport& this_ = static_cast<FieldOptions_FeatureSupport&>(self);
 9757|      9|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
 9758|      9|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      9|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      9|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     18|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      9|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     18|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     18|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 9, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      9|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 9]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      9|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 9, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     18|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     18|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9759|      9|  this_._impl_.deprecation_warning_.Destroy();
 9760|      9|  this_._impl_.~Impl_();
 9761|      9|}
_ZN6google8protobuf12FieldOptions10SharedCtorEPNS0_5ArenaE:
10092|     17|inline void FieldOptions::SharedCtor(::_pb::Arena* arena) {
10093|     17|  new (&_impl_) Impl_(internal_visibility(), arena);
10094|     17|  ::memset(reinterpret_cast<char *>(&_impl_) +
10095|     17|               offsetof(Impl_, features_),
10096|     17|           0,
10097|     17|           offsetof(Impl_, retention_) -
10098|       |               offsetof(Impl_, features_) +
10099|     17|               sizeof(Impl_::retention_));
10100|     17|}
_ZN6google8protobuf12FieldOptions5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
10086|     17|      : _extensions_{visibility, arena},
10087|     17|        _cached_size_{0},
10088|     17|        targets_{visibility, arena},
10089|     17|        edition_defaults_{visibility, arena},
10090|     17|        uninterpreted_option_{visibility, arena} {}
_ZN6google8protobuf12FieldOptions10SharedDtorERNS0_11MessageLiteE:
10105|     17|inline void FieldOptions::SharedDtor(MessageLite& self) {
10106|     17|  FieldOptions& this_ = static_cast<FieldOptions&>(self);
10107|     17|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
10108|     17|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|     17|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     17|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     34|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     17|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     34|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     34|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 17, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     17|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     17|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 17, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     34|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     34|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
10109|     17|  delete this_._impl_.features_;
10110|     17|  delete this_._impl_.feature_support_;
10111|     17|  this_._impl_.~Impl_();
10112|     17|}
_ZN6google8protobuf10FeatureSet5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaERKS2_RKS1_:
13328|    605|      : _extensions_{visibility, arena},
13329|    605|        _has_bits_{from._has_bits_},
13330|    605|        _cached_size_{0} {}
_ZN6google8protobuf10FeatureSet10SharedCtorEPNS0_5ArenaE:
13362|    230|inline void FeatureSet::SharedCtor(::_pb::Arena* arena) {
13363|    230|  new (&_impl_) Impl_(internal_visibility(), arena);
13364|    230|  ::memset(reinterpret_cast<char *>(&_impl_) +
13365|    230|               offsetof(Impl_, field_presence_),
13366|    230|           0,
13367|    230|           offsetof(Impl_, json_format_) -
13368|       |               offsetof(Impl_, field_presence_) +
13369|    230|               sizeof(Impl_::json_format_));
13370|    230|}
_ZN6google8protobuf10FeatureSet5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
13359|    230|      : _extensions_{visibility, arena},
13360|    230|        _cached_size_{0} {}
_ZN6google8protobuf10FeatureSet10SharedDtorERNS0_11MessageLiteE:
13375|    831|inline void FeatureSet::SharedDtor(MessageLite& self) {
13376|    831|  FeatureSet& this_ = static_cast<FeatureSet&>(self);
13377|    831|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
13378|    831|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|    831|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    831|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.66k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    831|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.66k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.66k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 831, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    831|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 831]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    831|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 831, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.66k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.66k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13379|    831|  this_._impl_.~Impl_();
13380|    831|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault10SharedCtorEPNS0_5ArenaE:
13760|      4|inline void FeatureSetDefaults_FeatureSetEditionDefault::SharedCtor(::_pb::Arena* arena) {
13761|      4|  new (&_impl_) Impl_(internal_visibility(), arena);
13762|      4|  ::memset(reinterpret_cast<char *>(&_impl_) +
13763|      4|               offsetof(Impl_, overridable_features_),
13764|      4|           0,
13765|      4|           offsetof(Impl_, edition_) -
13766|       |               offsetof(Impl_, overridable_features_) +
13767|      4|               sizeof(Impl_::edition_));
13768|      4|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
13758|      4|      : _cached_size_{0} {}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault10SharedDtorERNS0_11MessageLiteE:
13773|      4|inline void FeatureSetDefaults_FeatureSetEditionDefault::SharedDtor(MessageLite& self) {
13774|      4|  FeatureSetDefaults_FeatureSetEditionDefault& this_ = static_cast<FeatureSetDefaults_FeatureSetEditionDefault&>(self);
13775|      4|  this_._internal_metadata_.Delete<::google::protobuf::UnknownFieldSet>();
13776|      4|  ABSL_DCHECK(this_.GetArena() == nullptr);
  ------------------
  |  |   47|      4|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      4|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
13777|      4|  delete this_._impl_.overridable_features_;
13778|      4|  delete this_._impl_.fixed_features_;
13779|      4|  this_._impl_.~Impl_();
13780|      4|}
_ZN6google8protobuf18FeatureSetDefaults10SharedCtorEPNS0_5ArenaE:
14097|      1|inline void FeatureSetDefaults::SharedCtor(::_pb::Arena* arena) {
14098|      1|  new (&_impl_) Impl_(internal_visibility(), arena);
14099|      1|  ::memset(reinterpret_cast<char *>(&_impl_) +
14100|      1|               offsetof(Impl_, minimum_edition_),
14101|      1|           0,
14102|      1|           offsetof(Impl_, maximum_edition_) -
14103|       |               offsetof(Impl_, minimum_edition_) +
14104|      1|               sizeof(Impl_::maximum_edition_));
14105|      1|}
_ZN6google8protobuf18FeatureSetDefaults5Impl_C2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
14094|      1|      : _cached_size_{0},
14095|      1|        defaults_{visibility, arena} {}

_ZNK6google8protobuf27FieldOptions_FeatureSupport13GetCachedSizeEv:
 1598|      9|  int GetCachedSize() const { return _impl_._cached_size_.Get(); }
_ZNK6google8protobuf27FieldOptions_EditionDefault13GetCachedSizeEv:
 1835|     18|  int GetCachedSize() const { return _impl_._cached_size_.Get(); }
_ZN6google8protobuf10FeatureSetC2ERKS1_:
 1948|    605|  inline FeatureSet(const FeatureSet& from) : FeatureSet(nullptr, from) {}
_ZN6google8protobuf10FeatureSetC2EOS1_:
 1950|    230|      : FeatureSet(nullptr, std::move(from)) {}
_ZN6google8protobuf10FeatureSetaSEOS1_:
 1955|    230|  inline FeatureSet& operator=(FeatureSet&& from) noexcept {
 1956|    230|    if (this == &from) return *this;
  ------------------
  |  Branch (1956:9): [True: 0, False: 230]
  ------------------
 1957|    230|    if (::google::protobuf::internal::CanMoveWithInternalSwap(GetArena(), from.GetArena())) {
  ------------------
  |  Branch (1957:9): [True: 230, False: 0]
  ------------------
 1958|    230|      InternalSwap(&from);
 1959|    230|    } else {
 1960|      0|      CopyFrom(from);
 1961|      0|    }
 1962|    230|    return *this;
 1963|    230|  }
_ZN6google8protobuf10FeatureSet16default_instanceEv:
 1983|  1.88k|  static const FeatureSet& default_instance() {
 1984|  1.88k|    return *internal_default_instance();
 1985|  1.88k|  }
_ZN6google8protobuf10FeatureSet25internal_default_instanceEv:
 1986|  2.53k|  static inline const FeatureSet* internal_default_instance() {
 1987|  2.53k|    return reinterpret_cast<const FeatureSet*>(
 1988|  2.53k|        &_FeatureSet_default_instance_);
 1989|  2.53k|  }
_ZN6google8protobuf10FeatureSet9MergeFromERKS1_:
 2014|    440|  void MergeFrom(const FeatureSet& from) { FeatureSet::MergeImpl(*this, from); }
_ZNK6google8protobuf10FeatureSet13IsInitializedEv:
 2022|      8|  bool IsInitialized() const {
 2023|      8|    return IsInitializedImpl(*this);
 2024|      8|  }
_ZN6google8protobuf10FeatureSetC2EPNS0_5ArenaEOS1_:
 2067|    230|      : FeatureSet(arena) {
 2068|    230|    *this = ::std::move(from);
 2069|    230|  }
_ZN6google8protobuf10FeatureSet21FieldPresence_IsValidEi:
 2084|    226|  static inline bool FieldPresence_IsValid(int value) {
 2085|    226|    return FeatureSet_FieldPresence_IsValid(value);
 2086|    226|  }
_ZN6google8protobuf10FeatureSet16EnumType_IsValidEi:
 2104|    226|  static inline bool EnumType_IsValid(int value) {
 2105|    226|    return FeatureSet_EnumType_IsValid(value);
 2106|    226|  }
_ZN6google8protobuf10FeatureSet29RepeatedFieldEncoding_IsValidEi:
 2124|    226|  static inline bool RepeatedFieldEncoding_IsValid(int value) {
 2125|    226|    return FeatureSet_RepeatedFieldEncoding_IsValid(value);
 2126|    226|  }
_ZN6google8protobuf10FeatureSet22Utf8Validation_IsValidEi:
 2144|    226|  static inline bool Utf8Validation_IsValid(int value) {
 2145|    226|    return FeatureSet_Utf8Validation_IsValid(value);
 2146|    226|  }
_ZN6google8protobuf10FeatureSet23MessageEncoding_IsValidEi:
 2164|    226|  static inline bool MessageEncoding_IsValid(int value) {
 2165|    226|    return FeatureSet_MessageEncoding_IsValid(value);
 2166|    226|  }
_ZN6google8protobuf10FeatureSet18JsonFormat_IsValidEi:
 2184|    226|  static inline bool JsonFormat_IsValid(int value) {
 2185|    226|    return FeatureSet_JsonFormat_IsValid(value);
 2186|    226|  }
_ZN6google8protobuf14SourceCodeInfo16default_instanceEv:
 3512|      4|  static const SourceCodeInfo& default_instance() {
 3513|      4|    return *internal_default_instance();
 3514|      4|  }
_ZN6google8protobuf14SourceCodeInfo25internal_default_instanceEv:
 3515|      4|  static inline const SourceCodeInfo* internal_default_instance() {
 3516|      4|    return reinterpret_cast<const SourceCodeInfo*>(
 3517|      4|        &_SourceCodeInfo_default_instance_);
 3518|      4|  }
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefaultC2Ev:
 4044|      4|  inline FeatureSetDefaults_FeatureSetEditionDefault() : FeatureSetDefaults_FeatureSetEditionDefault(nullptr) {}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault13IsInitializedEv:
 4132|      4|  bool IsInitialized() const {
 4133|      4|    return IsInitializedImpl(*this);
 4134|      4|  }
_ZN6google8protobuf12OneofOptions16default_instanceEv:
 4737|      2|  static const OneofOptions& default_instance() {
 4738|      2|    return *internal_default_instance();
 4739|      2|  }
_ZN6google8protobuf12OneofOptions25internal_default_instanceEv:
 4740|      2|  static inline const OneofOptions* internal_default_instance() {
 4741|      2|    return reinterpret_cast<const OneofOptions*>(
 4742|      2|        &_OneofOptions_default_instance_);
 4743|      2|  }
_ZN6google8protobuf14MessageOptions16default_instanceEv:
 5583|     45|  static const MessageOptions& default_instance() {
 5584|     45|    return *internal_default_instance();
 5585|     45|  }
_ZN6google8protobuf14MessageOptions25internal_default_instanceEv:
 5586|     45|  static inline const MessageOptions* internal_default_instance() {
 5587|     45|    return reinterpret_cast<const MessageOptions*>(
 5588|     45|        &_MessageOptions_default_instance_);
 5589|     45|  }
_ZN6google8protobuf11FileOptionsC2Ev:
 5999|      2|  inline FileOptions() : FileOptions(nullptr) {}
_ZNK6google8protobuf11FileOptions14unknown_fieldsEv:
 6031|      2|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 6032|      2|    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
 6033|      2|  }
_ZN6google8protobuf11FileOptions16default_instanceEv:
 6048|      2|  static const FileOptions& default_instance() {
 6049|      2|    return *internal_default_instance();
 6050|      2|  }
_ZN6google8protobuf11FileOptions25internal_default_instanceEv:
 6051|     13|  static inline const FileOptions* internal_default_instance() {
 6052|     13|    return reinterpret_cast<const FileOptions*>(
 6053|     13|        &_FileOptions_default_instance_);
 6054|     13|  }
_ZNK6google8protobuf11FileOptions13IsInitializedEv:
 6087|      7|  bool IsInitialized() const {
 6088|      7|    return IsInitializedImpl(*this);
 6089|      7|  }
_ZN6google8protobuf12FieldOptionsC2Ev:
 6726|     17|  inline FieldOptions() : FieldOptions(nullptr) {}
_ZNK6google8protobuf12FieldOptions14unknown_fieldsEv:
 6758|     17|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 6759|     17|    return _internal_metadata_.unknown_fields<::google::protobuf::UnknownFieldSet>(::google::protobuf::UnknownFieldSet::default_instance);
 6760|     17|  }
_ZN6google8protobuf12FieldOptions16default_instanceEv:
 6775|    395|  static const FieldOptions& default_instance() {
 6776|    395|    return *internal_default_instance();
 6777|    395|  }
_ZN6google8protobuf12FieldOptions25internal_default_instanceEv:
 6778|    480|  static inline const FieldOptions* internal_default_instance() {
 6779|    480|    return reinterpret_cast<const FieldOptions*>(
 6780|    480|        &_FieldOptions_default_instance_);
 6781|    480|  }
_ZNK6google8protobuf12FieldOptions13IsInitializedEv:
 6814|     51|  bool IsInitialized() const {
 6815|     51|    return IsInitializedImpl(*this);
 6816|     51|  }
_ZN6google8protobuf18FeatureSetDefaultsC2Ev:
 7389|      1|  inline FeatureSetDefaults() : FeatureSetDefaults(nullptr) {}
_ZN6google8protobuf21ExtensionRangeOptions16default_instanceEv:
 7668|     14|  static const ExtensionRangeOptions& default_instance() {
 7669|     14|    return *internal_default_instance();
 7670|     14|  }
_ZN6google8protobuf21ExtensionRangeOptions25internal_default_instanceEv:
 7671|     14|  static inline const ExtensionRangeOptions* internal_default_instance() {
 7672|     14|    return reinterpret_cast<const ExtensionRangeOptions*>(
 7673|     14|        &_ExtensionRangeOptions_default_instance_);
 7674|     14|  }
_ZN6google8protobuf16EnumValueOptions16default_instanceEv:
 8120|     86|  static const EnumValueOptions& default_instance() {
 8121|     86|    return *internal_default_instance();
 8122|     86|  }
_ZN6google8protobuf16EnumValueOptions25internal_default_instanceEv:
 8123|     86|  static inline const EnumValueOptions* internal_default_instance() {
 8124|     86|    return reinterpret_cast<const EnumValueOptions*>(
 8125|     86|        &_EnumValueOptions_default_instance_);
 8126|     86|  }
_ZN6google8protobuf11EnumOptions16default_instanceEv:
 8563|     18|  static const EnumOptions& default_instance() {
 8564|     18|    return *internal_default_instance();
 8565|     18|  }
_ZN6google8protobuf11EnumOptions25internal_default_instanceEv:
 8566|     18|  static inline const EnumOptions* internal_default_instance() {
 8567|     18|    return reinterpret_cast<const EnumOptions*>(
 8568|     18|        &_EnumOptions_default_instance_);
 8569|     18|  }
_ZNK6google8protobuf20OneofDescriptorProto13IsInitializedEv:
 9041|      6|  bool IsInitialized() const {
 9042|      6|    return IsInitializedImpl(*this);
 9043|      6|  }
_ZNK6google8protobuf20FieldDescriptorProto13IsInitializedEv:
 9545|    444|  bool IsInitialized() const {
 9546|    444|    return IsInitializedImpl(*this);
 9547|    444|  }
_ZNK6google8protobuf24EnumValueDescriptorProto13IsInitializedEv:
 9961|    172|  bool IsInitialized() const {
 9962|    172|    return IsInitializedImpl(*this);
 9963|    172|  }
_ZNK6google8protobuf30DescriptorProto_ExtensionRange13IsInitializedEv:
10194|     28|  bool IsInitialized() const {
10195|     28|    return IsInitializedImpl(*this);
10196|     28|  }
_ZNK6google8protobuf19EnumDescriptorProto13IsInitializedEv:
10660|     36|  bool IsInitialized() const {
10661|     36|    return IsInitializedImpl(*this);
10662|     36|  }
_ZN6google8protobuf15DescriptorProto10descriptorEv:
10895|      3|  static const ::google::protobuf::Descriptor* descriptor() {
10896|      3|    return GetDescriptor();
10897|      3|  }
_ZN6google8protobuf15DescriptorProto13GetDescriptorEv:
10898|      3|  static const ::google::protobuf::Descriptor* GetDescriptor() {
10899|      3|    return default_instance().GetMetadata().descriptor;
10900|      3|  }
_ZN6google8protobuf15DescriptorProto16default_instanceEv:
10904|      3|  static const DescriptorProto& default_instance() {
10905|      3|    return *internal_default_instance();
10906|      3|  }
_ZN6google8protobuf15DescriptorProto25internal_default_instanceEv:
10907|      3|  static inline const DescriptorProto* internal_default_instance() {
10908|      3|    return reinterpret_cast<const DescriptorProto*>(
10909|      3|        &_DescriptorProto_default_instance_);
10910|      3|  }
_ZNK6google8protobuf15DescriptorProto13IsInitializedEv:
10943|    101|  bool IsInitialized() const {
10944|    101|    return IsInitializedImpl(*this);
10945|    101|  }
_ZN6google8protobuf19FileDescriptorProtoC2Ev:
11234|      6|  inline FileDescriptorProto() : FileDescriptorProto(nullptr) {}
_ZNK6google8protobuf19FileDescriptorProto8has_nameEv:
12110|      4|inline bool FileDescriptorProto::has_name() const {
12111|      4|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
12112|      4|  return value;
12113|      4|}
_ZNK6google8protobuf19FileDescriptorProto4nameEv:
12120|     71|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12121|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.name)
12122|     71|  return _internal_name();
12123|     71|}
_ZNK6google8protobuf19FileDescriptorProto14_internal_nameEv:
12137|     71|inline const std::string& FileDescriptorProto::_internal_name() const {
12138|     71|  ::google::protobuf::internal::TSanRead(&_impl_);
12139|     71|  return _impl_.name_.Get();
12140|     71|}
_ZNK6google8protobuf19FileDescriptorProto11has_packageEv:
12179|      4|inline bool FileDescriptorProto::has_package() const {
12180|      4|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
12181|      4|  return value;
12182|      4|}
_ZNK6google8protobuf19FileDescriptorProto7packageEv:
12189|     20|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12190|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.package)
12191|     20|  return _internal_package();
12192|     20|}
_ZNK6google8protobuf19FileDescriptorProto17_internal_packageEv:
12206|     20|inline const std::string& FileDescriptorProto::_internal_package() const {
12207|     20|  ::google::protobuf::internal::TSanRead(&_impl_);
12208|     20|  return _impl_.package_.Get();
12209|     20|}
_ZNK6google8protobuf19FileDescriptorProto25_internal_dependency_sizeEv:
12248|     17|inline int FileDescriptorProto::_internal_dependency_size() const {
12249|     17|  return _internal_dependency().size();
12250|     17|}
_ZNK6google8protobuf19FileDescriptorProto15dependency_sizeEv:
12251|     17|inline int FileDescriptorProto::dependency_size() const {
12252|     17|  return _internal_dependency_size();
12253|     17|}
_ZNK6google8protobuf19FileDescriptorProto10dependencyEi:
12265|      2|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12266|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.dependency)
12267|      2|  return _internal_dependency().Get(index);
12268|      2|}
_ZNK6google8protobuf19FileDescriptorProto20_internal_dependencyEv:
12301|     19|FileDescriptorProto::_internal_dependency() const {
12302|     19|  ::google::protobuf::internal::TSanRead(&_impl_);
12303|     19|  return _impl_.dependency_;
12304|     19|}
_ZNK6google8protobuf19FileDescriptorProto32_internal_public_dependency_sizeEv:
12312|     12|inline int FileDescriptorProto::_internal_public_dependency_size() const {
12313|     12|  return _internal_public_dependency().size();
12314|     12|}
_ZNK6google8protobuf19FileDescriptorProto22public_dependency_sizeEv:
12315|     12|inline int FileDescriptorProto::public_dependency_size() const {
12316|     12|  return _internal_public_dependency_size();
12317|     12|}
_ZNK6google8protobuf19FileDescriptorProto27_internal_public_dependencyEv:
12347|     12|FileDescriptorProto::_internal_public_dependency() const {
12348|     12|  ::google::protobuf::internal::TSanRead(&_impl_);
12349|     12|  return _impl_.public_dependency_;
12350|     12|}
_ZNK6google8protobuf19FileDescriptorProto30_internal_weak_dependency_sizeEv:
12357|     16|inline int FileDescriptorProto::_internal_weak_dependency_size() const {
12358|     16|  return _internal_weak_dependency().size();
12359|     16|}
_ZNK6google8protobuf19FileDescriptorProto20weak_dependency_sizeEv:
12360|     16|inline int FileDescriptorProto::weak_dependency_size() const {
12361|     16|  return _internal_weak_dependency_size();
12362|     16|}
_ZNK6google8protobuf19FileDescriptorProto25_internal_weak_dependencyEv:
12392|     16|FileDescriptorProto::_internal_weak_dependency() const {
12393|     16|  ::google::protobuf::internal::TSanRead(&_impl_);
12394|     16|  return _impl_.weak_dependency_;
12395|     16|}
_ZNK6google8protobuf19FileDescriptorProto27_internal_message_type_sizeEv:
12402|     47|inline int FileDescriptorProto::_internal_message_type_size() const {
12403|     47|  return _internal_message_type().size();
12404|     47|}
_ZNK6google8protobuf19FileDescriptorProto17message_type_sizeEv:
12405|     47|inline int FileDescriptorProto::message_type_size() const {
12406|     47|  return _internal_message_type_size();
12407|     47|}
_ZNK6google8protobuf19FileDescriptorProto12message_typeEi:
12424|    175|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12425|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.message_type)
12426|    175|  return _internal_message_type().Get(index);
12427|    175|}
_ZNK6google8protobuf19FileDescriptorProto12message_typeEv:
12435|     10|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12436|       |  // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.message_type)
12437|     10|  return _internal_message_type();
12438|     10|}
_ZNK6google8protobuf19FileDescriptorProto22_internal_message_typeEv:
12440|    242|FileDescriptorProto::_internal_message_type() const {
12441|    242|  ::google::protobuf::internal::TSanRead(&_impl_);
12442|    242|  return _impl_.message_type_;
12443|    242|}
_ZNK6google8protobuf19FileDescriptorProto24_internal_enum_type_sizeEv:
12451|     13|inline int FileDescriptorProto::_internal_enum_type_size() const {
12452|     13|  return _internal_enum_type().size();
12453|     13|}
_ZNK6google8protobuf19FileDescriptorProto14enum_type_sizeEv:
12454|     13|inline int FileDescriptorProto::enum_type_size() const {
12455|     13|  return _internal_enum_type_size();
12456|     13|}
_ZNK6google8protobuf19FileDescriptorProto9enum_typeEi:
12473|      4|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12474|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.enum_type)
12475|      4|  return _internal_enum_type().Get(index);
12476|      4|}
_ZNK6google8protobuf19FileDescriptorProto9enum_typeEv:
12484|     10|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12485|       |  // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.enum_type)
12486|     10|  return _internal_enum_type();
12487|     10|}
_ZNK6google8protobuf19FileDescriptorProto19_internal_enum_typeEv:
12489|     37|FileDescriptorProto::_internal_enum_type() const {
12490|     37|  ::google::protobuf::internal::TSanRead(&_impl_);
12491|     37|  return _impl_.enum_type_;
12492|     37|}
_ZNK6google8protobuf19FileDescriptorProto22_internal_service_sizeEv:
12500|     12|inline int FileDescriptorProto::_internal_service_size() const {
12501|     12|  return _internal_service().size();
12502|     12|}
_ZNK6google8protobuf19FileDescriptorProto12service_sizeEv:
12503|     12|inline int FileDescriptorProto::service_size() const {
12504|     12|  return _internal_service_size();
12505|     12|}
_ZNK6google8protobuf19FileDescriptorProto7serviceEv:
12533|     10|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12534|       |  // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.service)
12535|     10|  return _internal_service();
12536|     10|}
_ZNK6google8protobuf19FileDescriptorProto17_internal_serviceEv:
12538|     32|FileDescriptorProto::_internal_service() const {
12539|     32|  ::google::protobuf::internal::TSanRead(&_impl_);
12540|     32|  return _impl_.service_;
12541|     32|}
_ZNK6google8protobuf19FileDescriptorProto24_internal_extension_sizeEv:
12549|     13|inline int FileDescriptorProto::_internal_extension_size() const {
12550|     13|  return _internal_extension().size();
12551|     13|}
_ZNK6google8protobuf19FileDescriptorProto14extension_sizeEv:
12552|     13|inline int FileDescriptorProto::extension_size() const {
12553|     13|  return _internal_extension_size();
12554|     13|}
_ZNK6google8protobuf19FileDescriptorProto9extensionEi:
12571|      5|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12572|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.extension)
12573|      5|  return _internal_extension().Get(index);
12574|      5|}
_ZNK6google8protobuf19FileDescriptorProto9extensionEv:
12582|     10|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12583|       |  // @@protoc_insertion_point(field_list:google.protobuf.FileDescriptorProto.extension)
12584|     10|  return _internal_extension();
12585|     10|}
_ZNK6google8protobuf19FileDescriptorProto19_internal_extensionEv:
12587|     38|FileDescriptorProto::_internal_extension() const {
12588|     38|  ::google::protobuf::internal::TSanRead(&_impl_);
12589|     38|  return _impl_.extension_;
12590|     38|}
_ZNK6google8protobuf19FileDescriptorProto11has_optionsEv:
12598|      8|inline bool FileDescriptorProto::has_options() const {
12599|      8|  bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0;
12600|      8|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|     12|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 4, False: 4]
  |  |  |  Branch (941:48): [True: 4, False: 0]
  |  |  ------------------
  ------------------
12601|      8|  return value;
12602|      8|}
_ZNK6google8protobuf19FileDescriptorProto17_internal_optionsEv:
12608|      2|inline const ::google::protobuf::FileOptions& FileDescriptorProto::_internal_options() const {
12609|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
12610|      2|  const ::google::protobuf::FileOptions* p = _impl_.options_;
12611|      2|  return p != nullptr ? *p : reinterpret_cast<const ::google::protobuf::FileOptions&>(::google::protobuf::_FileOptions_default_instance_);
  ------------------
  |  Branch (12611:10): [True: 2, False: 0]
  ------------------
12612|      2|}
_ZNK6google8protobuf19FileDescriptorProto7optionsEv:
12613|      2|inline const ::google::protobuf::FileOptions& FileDescriptorProto::options() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
12614|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.options)
12615|      2|  return _internal_options();
12616|      2|}
_ZNK6google8protobuf19FileDescriptorProto20has_source_code_infoEv:
12694|      8|inline bool FileDescriptorProto::has_source_code_info() const {
12695|      8|  bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0;
12696|      8|  PROTOBUF_ASSUME(!value || _impl_.source_code_info_ != nullptr);
  ------------------
  |  |  941|      8|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 8, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
12697|      8|  return value;
12698|      8|}
_ZNK6google8protobuf19FileDescriptorProto6syntaxEv:
12800|      6|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
12801|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileDescriptorProto.syntax)
12802|      6|  return _internal_syntax();
12803|      6|}
_ZNK6google8protobuf19FileDescriptorProto16_internal_syntaxEv:
12817|      6|inline const std::string& FileDescriptorProto::_internal_syntax() const {
12818|      6|  ::google::protobuf::internal::TSanRead(&_impl_);
12819|      6|  return _impl_.syntax_.Get();
12820|      6|}
_ZNK6google8protobuf19FileDescriptorProto11has_editionEv:
12859|      4|inline bool FileDescriptorProto::has_edition() const {
12860|      4|  bool value = (_impl_._has_bits_[0] & 0x00000020u) != 0;
12861|      4|  return value;
12862|      4|}
_ZNK6google8protobuf30DescriptorProto_ExtensionRange5startEv:
12901|     14|inline ::int32_t DescriptorProto_ExtensionRange::start() const {
12902|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ExtensionRange.start)
12903|     14|  return _internal_start();
12904|     14|}
_ZNK6google8protobuf30DescriptorProto_ExtensionRange15_internal_startEv:
12910|     14|inline ::int32_t DescriptorProto_ExtensionRange::_internal_start() const {
12911|     14|  ::google::protobuf::internal::TSanRead(&_impl_);
12912|     14|  return _impl_.start_;
12913|     14|}
_ZNK6google8protobuf30DescriptorProto_ExtensionRange3endEv:
12929|     14|inline ::int32_t DescriptorProto_ExtensionRange::end() const {
12930|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ExtensionRange.end)
12931|     14|  return _internal_end();
12932|     14|}
_ZNK6google8protobuf30DescriptorProto_ExtensionRange13_internal_endEv:
12938|     14|inline ::int32_t DescriptorProto_ExtensionRange::_internal_end() const {
12939|     14|  ::google::protobuf::internal::TSanRead(&_impl_);
12940|     14|  return _impl_.end_;
12941|     14|}
_ZNK6google8protobuf30DescriptorProto_ExtensionRange11has_optionsEv:
12948|     28|inline bool DescriptorProto_ExtensionRange::has_options() const {
12949|     28|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
12950|     28|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|     28|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 28, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
12951|     28|  return value;
12952|     28|}
_ZNK6google8protobuf29DescriptorProto_ReservedRange5startEv:
13057|     28|inline ::int32_t DescriptorProto_ReservedRange::start() const {
13058|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ReservedRange.start)
13059|     28|  return _internal_start();
13060|     28|}
_ZNK6google8protobuf29DescriptorProto_ReservedRange15_internal_startEv:
13066|     28|inline ::int32_t DescriptorProto_ReservedRange::_internal_start() const {
13067|     28|  ::google::protobuf::internal::TSanRead(&_impl_);
13068|     28|  return _impl_.start_;
13069|     28|}
_ZNK6google8protobuf29DescriptorProto_ReservedRange3endEv:
13085|     28|inline ::int32_t DescriptorProto_ReservedRange::end() const {
13086|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.ReservedRange.end)
13087|     28|  return _internal_end();
13088|     28|}
_ZNK6google8protobuf29DescriptorProto_ReservedRange13_internal_endEv:
13094|     28|inline ::int32_t DescriptorProto_ReservedRange::_internal_end() const {
13095|     28|  ::google::protobuf::internal::TSanRead(&_impl_);
13096|     28|  return _impl_.end_;
13097|     28|}
_ZNK6google8protobuf15DescriptorProto4nameEv:
13118|    136|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13119|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.name)
13120|    136|  return _internal_name();
13121|    136|}
_ZNK6google8protobuf15DescriptorProto14_internal_nameEv:
13135|    136|inline const std::string& DescriptorProto::_internal_name() const {
13136|    136|  ::google::protobuf::internal::TSanRead(&_impl_);
13137|    136|  return _impl_.name_.Get();
13138|    136|}
_ZNK6google8protobuf15DescriptorProto20_internal_field_sizeEv:
13177|    491|inline int DescriptorProto::_internal_field_size() const {
13178|    491|  return _internal_field().size();
13179|    491|}
_ZNK6google8protobuf15DescriptorProto10field_sizeEv:
13180|    491|inline int DescriptorProto::field_size() const {
13181|    491|  return _internal_field_size();
13182|    491|}
_ZNK6google8protobuf15DescriptorProto5fieldEi:
13199|  1.14k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13200|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.field)
13201|  1.14k|  return _internal_field().Get(index);
13202|  1.14k|}
_ZNK6google8protobuf15DescriptorProto5fieldEv:
13210|     45|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13211|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.field)
13212|     45|  return _internal_field();
13213|     45|}
_ZNK6google8protobuf15DescriptorProto15_internal_fieldEv:
13215|  1.78k|DescriptorProto::_internal_field() const {
13216|  1.78k|  ::google::protobuf::internal::TSanRead(&_impl_);
13217|  1.78k|  return _impl_.field_;
13218|  1.78k|}
_ZNK6google8protobuf15DescriptorProto24_internal_extension_sizeEv:
13226|    135|inline int DescriptorProto::_internal_extension_size() const {
13227|    135|  return _internal_extension().size();
13228|    135|}
_ZNK6google8protobuf15DescriptorProto14extension_sizeEv:
13229|    135|inline int DescriptorProto::extension_size() const {
13230|    135|  return _internal_extension_size();
13231|    135|}
_ZNK6google8protobuf15DescriptorProto9extensionEv:
13259|    101|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13260|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.extension)
13261|    101|  return _internal_extension();
13262|    101|}
_ZNK6google8protobuf15DescriptorProto19_internal_extensionEv:
13264|    337|DescriptorProto::_internal_extension() const {
13265|    337|  ::google::protobuf::internal::TSanRead(&_impl_);
13266|    337|  return _impl_.extension_;
13267|    337|}
_ZNK6google8protobuf15DescriptorProto26_internal_nested_type_sizeEv:
13275|    145|inline int DescriptorProto::_internal_nested_type_size() const {
13276|    145|  return _internal_nested_type().size();
13277|    145|}
_ZNK6google8protobuf15DescriptorProto16nested_type_sizeEv:
13278|    145|inline int DescriptorProto::nested_type_size() const {
13279|    145|  return _internal_nested_type_size();
13280|    145|}
_ZNK6google8protobuf15DescriptorProto11nested_typeEi:
13297|     50|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13298|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.nested_type)
13299|     50|  return _internal_nested_type().Get(index);
13300|     50|}
_ZNK6google8protobuf15DescriptorProto11nested_typeEv:
13308|    101|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13309|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.nested_type)
13310|    101|  return _internal_nested_type();
13311|    101|}
_ZNK6google8protobuf15DescriptorProto21_internal_nested_typeEv:
13313|    397|DescriptorProto::_internal_nested_type() const {
13314|    397|  ::google::protobuf::internal::TSanRead(&_impl_);
13315|    397|  return _impl_.nested_type_;
13316|    397|}
_ZNK6google8protobuf15DescriptorProto24_internal_enum_type_sizeEv:
13324|    152|inline int DescriptorProto::_internal_enum_type_size() const {
13325|    152|  return _internal_enum_type().size();
13326|    152|}
_ZNK6google8protobuf15DescriptorProto14enum_type_sizeEv:
13327|    152|inline int DescriptorProto::enum_type_size() const {
13328|    152|  return _internal_enum_type_size();
13329|    152|}
_ZNK6google8protobuf15DescriptorProto9enum_typeEi:
13346|     68|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13347|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.enum_type)
13348|     68|  return _internal_enum_type().Get(index);
13349|     68|}
_ZNK6google8protobuf15DescriptorProto9enum_typeEv:
13357|     45|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13358|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.enum_type)
13359|     45|  return _internal_enum_type();
13360|     45|}
_ZNK6google8protobuf15DescriptorProto19_internal_enum_typeEv:
13362|    366|DescriptorProto::_internal_enum_type() const {
13363|    366|  ::google::protobuf::internal::TSanRead(&_impl_);
13364|    366|  return _impl_.enum_type_;
13365|    366|}
_ZNK6google8protobuf15DescriptorProto30_internal_extension_range_sizeEv:
13373|    149|inline int DescriptorProto::_internal_extension_range_size() const {
13374|    149|  return _internal_extension_range().size();
13375|    149|}
_ZNK6google8protobuf15DescriptorProto20extension_range_sizeEv:
13376|    149|inline int DescriptorProto::extension_range_size() const {
13377|    149|  return _internal_extension_range_size();
13378|    149|}
_ZNK6google8protobuf15DescriptorProto15extension_rangeEi:
13395|     56|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13396|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.extension_range)
13397|     56|  return _internal_extension_range().Get(index);
13398|     56|}
_ZNK6google8protobuf15DescriptorProto15extension_rangeEv:
13406|     45|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13407|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.extension_range)
13408|     45|  return _internal_extension_range();
13409|     45|}
_ZNK6google8protobuf15DescriptorProto25_internal_extension_rangeEv:
13411|    351|DescriptorProto::_internal_extension_range() const {
13412|    351|  ::google::protobuf::internal::TSanRead(&_impl_);
13413|    351|  return _impl_.extension_range_;
13414|    351|}
_ZNK6google8protobuf15DescriptorProto25_internal_oneof_decl_sizeEv:
13422|    137|inline int DescriptorProto::_internal_oneof_decl_size() const {
13423|    137|  return _internal_oneof_decl().size();
13424|    137|}
_ZNK6google8protobuf15DescriptorProto15oneof_decl_sizeEv:
13425|    137|inline int DescriptorProto::oneof_decl_size() const {
13426|    137|  return _internal_oneof_decl_size();
13427|    137|}
_ZNK6google8protobuf15DescriptorProto10oneof_declEi:
13444|      8|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13445|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.oneof_decl)
13446|      8|  return _internal_oneof_decl().Get(index);
13447|      8|}
_ZNK6google8protobuf15DescriptorProto10oneof_declEv:
13455|     45|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13456|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.oneof_decl)
13457|     45|  return _internal_oneof_decl();
13458|     45|}
_ZNK6google8protobuf15DescriptorProto20_internal_oneof_declEv:
13460|    291|DescriptorProto::_internal_oneof_decl() const {
13461|    291|  ::google::protobuf::internal::TSanRead(&_impl_);
13462|    291|  return _impl_.oneof_decl_;
13463|    291|}
_ZNK6google8protobuf15DescriptorProto11has_optionsEv:
13471|     90|inline bool DescriptorProto::has_options() const {
13472|     90|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
13473|     90|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|     90|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 90, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
13474|     90|  return value;
13475|     90|}
_ZNK6google8protobuf15DescriptorProto29_internal_reserved_range_sizeEv:
13567|    280|inline int DescriptorProto::_internal_reserved_range_size() const {
13568|    280|  return _internal_reserved_range().size();
13569|    280|}
_ZNK6google8protobuf15DescriptorProto19reserved_range_sizeEv:
13570|    280|inline int DescriptorProto::reserved_range_size() const {
13571|    280|  return _internal_reserved_range_size();
13572|    280|}
_ZNK6google8protobuf15DescriptorProto14reserved_rangeEi:
13589|     41|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13590|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.reserved_range)
13591|     41|  return _internal_reserved_range().Get(index);
13592|     41|}
_ZNK6google8protobuf15DescriptorProto24_internal_reserved_rangeEv:
13605|    321|DescriptorProto::_internal_reserved_range() const {
13606|    321|  ::google::protobuf::internal::TSanRead(&_impl_);
13607|    321|  return _impl_.reserved_range_;
13608|    321|}
_ZNK6google8protobuf15DescriptorProto28_internal_reserved_name_sizeEv:
13616|    135|inline int DescriptorProto::_internal_reserved_name_size() const {
13617|    135|  return _internal_reserved_name().size();
13618|    135|}
_ZNK6google8protobuf15DescriptorProto18reserved_name_sizeEv:
13619|    135|inline int DescriptorProto::reserved_name_size() const {
13620|    135|  return _internal_reserved_name_size();
13621|    135|}
_ZNK6google8protobuf15DescriptorProto13reserved_nameEi:
13633|      2|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
13634|       |  // @@protoc_insertion_point(field_get:google.protobuf.DescriptorProto.reserved_name)
13635|      2|  return _internal_reserved_name().Get(index);
13636|      2|}
_ZNK6google8protobuf15DescriptorProto13reserved_nameEv:
13658|     45|DescriptorProto::reserved_name() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
13659|       |  // @@protoc_insertion_point(field_list:google.protobuf.DescriptorProto.reserved_name)
13660|     45|  return _internal_reserved_name();
13661|     45|}
_ZNK6google8protobuf15DescriptorProto23_internal_reserved_nameEv:
13669|    182|DescriptorProto::_internal_reserved_name() const {
13670|    182|  ::google::protobuf::internal::TSanRead(&_impl_);
13671|    182|  return _impl_.reserved_name_;
13672|    182|}
_ZNK6google8protobuf21ExtensionRangeOptions12has_featuresEv:
14008|     14|inline bool ExtensionRangeOptions::has_features() const {
14009|     14|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
14010|     14|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|     14|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 14, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
14011|     14|  return value;
14012|     14|}
_ZNK6google8protobuf20FieldDescriptorProto4nameEv:
14147|    619|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
14148|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.name)
14149|    619|  return _internal_name();
14150|    619|}
_ZNK6google8protobuf20FieldDescriptorProto14_internal_nameEv:
14164|    619|inline const std::string& FieldDescriptorProto::_internal_name() const {
14165|    619|  ::google::protobuf::internal::TSanRead(&_impl_);
14166|    619|  return _impl_.name_.Get();
14167|    619|}
_ZNK6google8protobuf20FieldDescriptorProto6numberEv:
14215|    332|inline ::int32_t FieldDescriptorProto::number() const {
14216|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.number)
14217|    332|  return _internal_number();
14218|    332|}
_ZNK6google8protobuf20FieldDescriptorProto16_internal_numberEv:
14224|    332|inline ::int32_t FieldDescriptorProto::_internal_number() const {
14225|    332|  ::google::protobuf::internal::TSanRead(&_impl_);
14226|    332|  return _impl_.number_;
14227|    332|}
_ZNK6google8protobuf20FieldDescriptorProto5labelEv:
14243|    412|inline ::google::protobuf::FieldDescriptorProto_Label FieldDescriptorProto::label() const {
14244|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.label)
14245|    412|  return _internal_label();
14246|    412|}
_ZNK6google8protobuf20FieldDescriptorProto15_internal_labelEv:
14252|    412|inline ::google::protobuf::FieldDescriptorProto_Label FieldDescriptorProto::_internal_label() const {
14253|    412|  ::google::protobuf::internal::TSanRead(&_impl_);
14254|    412|  return static_cast<::google::protobuf::FieldDescriptorProto_Label>(_impl_.label_);
14255|    412|}
_ZNK6google8protobuf20FieldDescriptorProto8has_typeEv:
14263|    325|inline bool FieldDescriptorProto::has_type() const {
14264|    325|  bool value = (_impl_._has_bits_[0] & 0x00000400u) != 0;
14265|    325|  return value;
14266|    325|}
_ZNK6google8protobuf20FieldDescriptorProto4typeEv:
14272|    558|inline ::google::protobuf::FieldDescriptorProto_Type FieldDescriptorProto::type() const {
14273|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.type)
14274|    558|  return _internal_type();
14275|    558|}
_ZNK6google8protobuf20FieldDescriptorProto14_internal_typeEv:
14281|    558|inline ::google::protobuf::FieldDescriptorProto_Type FieldDescriptorProto::_internal_type() const {
14282|    558|  ::google::protobuf::internal::TSanRead(&_impl_);
14283|    558|  return static_cast<::google::protobuf::FieldDescriptorProto_Type>(_impl_.type_);
14284|    558|}
_ZNK6google8protobuf20FieldDescriptorProto13has_type_nameEv:
14292|    206|inline bool FieldDescriptorProto::has_type_name() const {
14293|    206|  bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0;
14294|    206|  return value;
14295|    206|}
_ZNK6google8protobuf20FieldDescriptorProto9type_nameEv:
14302|     92|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
14303|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.type_name)
14304|     92|  return _internal_type_name();
14305|     92|}
_ZNK6google8protobuf20FieldDescriptorProto19_internal_type_nameEv:
14319|     92|inline const std::string& FieldDescriptorProto::_internal_type_name() const {
14320|     92|  ::google::protobuf::internal::TSanRead(&_impl_);
14321|     92|  return _impl_.type_name_.Get();
14322|     92|}
_ZNK6google8protobuf20FieldDescriptorProto12has_extendeeEv:
14361|    412|inline bool FieldDescriptorProto::has_extendee() const {
14362|    412|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
14363|    412|  return value;
14364|    412|}
_ZNK6google8protobuf20FieldDescriptorProto8extendeeEv:
14371|      5|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
14372|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.extendee)
14373|      5|  return _internal_extendee();
14374|      5|}
_ZNK6google8protobuf20FieldDescriptorProto18_internal_extendeeEv:
14388|      5|inline const std::string& FieldDescriptorProto::_internal_extendee() const {
14389|      5|  ::google::protobuf::internal::TSanRead(&_impl_);
14390|      5|  return _impl_.extendee_.Get();
14391|      5|}
_ZNK6google8protobuf20FieldDescriptorProto17has_default_valueEv:
14430|    891|inline bool FieldDescriptorProto::has_default_value() const {
14431|    891|  bool value = (_impl_._has_bits_[0] & 0x00000008u) != 0;
14432|    891|  return value;
14433|    891|}
_ZNK6google8protobuf20FieldDescriptorProto13default_valueEv:
14440|     53|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
14441|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.default_value)
14442|     53|  return _internal_default_value();
14443|     53|}
_ZNK6google8protobuf20FieldDescriptorProto23_internal_default_valueEv:
14457|     53|inline const std::string& FieldDescriptorProto::_internal_default_value() const {
14458|     53|  ::google::protobuf::internal::TSanRead(&_impl_);
14459|     53|  return _impl_.default_value_.Get();
14460|     53|}
_ZNK6google8protobuf20FieldDescriptorProto15has_oneof_indexEv:
14499|    206|inline bool FieldDescriptorProto::has_oneof_index() const {
14500|    206|  bool value = (_impl_._has_bits_[0] & 0x00000080u) != 0;
14501|    206|  return value;
14502|    206|}
_ZNK6google8protobuf20FieldDescriptorProto11oneof_indexEv:
14508|     21|inline ::int32_t FieldDescriptorProto::oneof_index() const {
14509|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.oneof_index)
14510|     21|  return _internal_oneof_index();
14511|     21|}
_ZNK6google8protobuf20FieldDescriptorProto21_internal_oneof_indexEv:
14517|     21|inline ::int32_t FieldDescriptorProto::_internal_oneof_index() const {
14518|     21|  ::google::protobuf::internal::TSanRead(&_impl_);
14519|     21|  return _impl_.oneof_index_;
14520|     21|}
_ZNK6google8protobuf20FieldDescriptorProto13has_json_nameEv:
14527|    618|inline bool FieldDescriptorProto::has_json_name() const {
14528|    618|  bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0;
14529|    618|  return value;
14530|    618|}
_ZNK6google8protobuf20FieldDescriptorProto11has_optionsEv:
14596|    412|inline bool FieldDescriptorProto::has_options() const {
14597|    412|  bool value = (_impl_._has_bits_[0] & 0x00000020u) != 0;
14598|    412|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|    446|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 378, False: 34]
  |  |  |  Branch (941:48): [True: 34, False: 0]
  |  |  ------------------
  ------------------
14599|    412|  return value;
14600|    412|}
_ZNK6google8protobuf20FieldDescriptorProto17_internal_optionsEv:
14606|    109|inline const ::google::protobuf::FieldOptions& FieldDescriptorProto::_internal_options() const {
14607|    109|  ::google::protobuf::internal::TSanRead(&_impl_);
14608|    109|  const ::google::protobuf::FieldOptions* p = _impl_.options_;
14609|    109|  return p != nullptr ? *p : reinterpret_cast<const ::google::protobuf::FieldOptions&>(::google::protobuf::_FieldOptions_default_instance_);
  ------------------
  |  Branch (14609:10): [True: 26, False: 83]
  ------------------
14610|    109|}
_ZNK6google8protobuf20FieldDescriptorProto7optionsEv:
14611|    109|inline const ::google::protobuf::FieldOptions& FieldDescriptorProto::options() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
14612|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.options)
14613|    109|  return _internal_options();
14614|    109|}
_ZNK6google8protobuf20FieldDescriptorProto15proto3_optionalEv:
14701|    412|inline bool FieldDescriptorProto::proto3_optional() const {
14702|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldDescriptorProto.proto3_optional)
14703|    412|  return _internal_proto3_optional();
14704|    412|}
_ZNK6google8protobuf20FieldDescriptorProto25_internal_proto3_optionalEv:
14710|    412|inline bool FieldDescriptorProto::_internal_proto3_optional() const {
14711|    412|  ::google::protobuf::internal::TSanRead(&_impl_);
14712|    412|  return _impl_.proto3_optional_;
14713|    412|}
_ZNK6google8protobuf20OneofDescriptorProto4nameEv:
14734|      4|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
14735|       |  // @@protoc_insertion_point(field_get:google.protobuf.OneofDescriptorProto.name)
14736|      4|  return _internal_name();
14737|      4|}
_ZNK6google8protobuf20OneofDescriptorProto14_internal_nameEv:
14751|      4|inline const std::string& OneofDescriptorProto::_internal_name() const {
14752|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
14753|      4|  return _impl_.name_.Get();
14754|      4|}
_ZNK6google8protobuf20OneofDescriptorProto11has_optionsEv:
14793|      4|inline bool OneofDescriptorProto::has_options() const {
14794|      4|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
14795|      4|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|      4|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 4, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
14796|      4|  return value;
14797|      4|}
_ZNK6google8protobuf37EnumDescriptorProto_EnumReservedRange5startEv:
14902|      1|inline ::int32_t EnumDescriptorProto_EnumReservedRange::start() const {
14903|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.EnumReservedRange.start)
14904|      1|  return _internal_start();
14905|      1|}
_ZNK6google8protobuf37EnumDescriptorProto_EnumReservedRange15_internal_startEv:
14911|      1|inline ::int32_t EnumDescriptorProto_EnumReservedRange::_internal_start() const {
14912|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
14913|      1|  return _impl_.start_;
14914|      1|}
_ZNK6google8protobuf37EnumDescriptorProto_EnumReservedRange3endEv:
14930|      1|inline ::int32_t EnumDescriptorProto_EnumReservedRange::end() const {
14931|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.EnumReservedRange.end)
14932|      1|  return _internal_end();
14933|      1|}
_ZNK6google8protobuf37EnumDescriptorProto_EnumReservedRange13_internal_endEv:
14939|      1|inline ::int32_t EnumDescriptorProto_EnumReservedRange::_internal_end() const {
14940|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
14941|      1|  return _impl_.end_;
14942|      1|}
_ZNK6google8protobuf19EnumDescriptorProto4nameEv:
14963|     37|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
14964|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.name)
14965|     37|  return _internal_name();
14966|     37|}
_ZNK6google8protobuf19EnumDescriptorProto14_internal_nameEv:
14980|     37|inline const std::string& EnumDescriptorProto::_internal_name() const {
14981|     37|  ::google::protobuf::internal::TSanRead(&_impl_);
14982|     37|  return _impl_.name_.Get();
14983|     37|}
_ZNK6google8protobuf19EnumDescriptorProto20_internal_value_sizeEv:
15022|    247|inline int EnumDescriptorProto::_internal_value_size() const {
15023|    247|  return _internal_value().size();
15024|    247|}
_ZNK6google8protobuf19EnumDescriptorProto10value_sizeEv:
15025|    247|inline int EnumDescriptorProto::value_size() const {
15026|    247|  return _internal_value_size();
15027|    247|}
_ZNK6google8protobuf19EnumDescriptorProto5valueEi:
15044|    492|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
15045|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.value)
15046|    492|  return _internal_value().Get(index);
15047|    492|}
_ZNK6google8protobuf19EnumDescriptorProto5valueEv:
15055|     18|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
15056|       |  // @@protoc_insertion_point(field_list:google.protobuf.EnumDescriptorProto.value)
15057|     18|  return _internal_value();
15058|     18|}
_ZNK6google8protobuf19EnumDescriptorProto15_internal_valueEv:
15060|    793|EnumDescriptorProto::_internal_value() const {
15061|    793|  ::google::protobuf::internal::TSanRead(&_impl_);
15062|    793|  return _impl_.value_;
15063|    793|}
_ZNK6google8protobuf19EnumDescriptorProto11has_optionsEv:
15071|     36|inline bool EnumDescriptorProto::has_options() const {
15072|     36|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
15073|     36|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|     36|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 36, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
15074|     36|  return value;
15075|     36|}
_ZNK6google8protobuf19EnumDescriptorProto29_internal_reserved_range_sizeEv:
15167|     93|inline int EnumDescriptorProto::_internal_reserved_range_size() const {
15168|     93|  return _internal_reserved_range().size();
15169|     93|}
_ZNK6google8protobuf19EnumDescriptorProto19reserved_range_sizeEv:
15170|     93|inline int EnumDescriptorProto::reserved_range_size() const {
15171|     93|  return _internal_reserved_range_size();
15172|     93|}
_ZNK6google8protobuf19EnumDescriptorProto14reserved_rangeEi:
15189|      2|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
15190|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumDescriptorProto.reserved_range)
15191|      2|  return _internal_reserved_range().Get(index);
15192|      2|}
_ZNK6google8protobuf19EnumDescriptorProto24_internal_reserved_rangeEv:
15205|     95|EnumDescriptorProto::_internal_reserved_range() const {
15206|     95|  ::google::protobuf::internal::TSanRead(&_impl_);
15207|     95|  return _impl_.reserved_range_;
15208|     95|}
_ZNK6google8protobuf19EnumDescriptorProto28_internal_reserved_name_sizeEv:
15216|     54|inline int EnumDescriptorProto::_internal_reserved_name_size() const {
15217|     54|  return _internal_reserved_name().size();
15218|     54|}
_ZNK6google8protobuf19EnumDescriptorProto18reserved_name_sizeEv:
15219|     54|inline int EnumDescriptorProto::reserved_name_size() const {
15220|     54|  return _internal_reserved_name_size();
15221|     54|}
_ZNK6google8protobuf19EnumDescriptorProto13reserved_nameEv:
15258|     18|EnumDescriptorProto::reserved_name() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
15259|       |  // @@protoc_insertion_point(field_list:google.protobuf.EnumDescriptorProto.reserved_name)
15260|     18|  return _internal_reserved_name();
15261|     18|}
_ZNK6google8protobuf19EnumDescriptorProto23_internal_reserved_nameEv:
15269|     72|EnumDescriptorProto::_internal_reserved_name() const {
15270|     72|  ::google::protobuf::internal::TSanRead(&_impl_);
15271|     72|  return _impl_.reserved_name_;
15272|     72|}
_ZNK6google8protobuf24EnumValueDescriptorProto4nameEv:
15294|    344|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
15295|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumValueDescriptorProto.name)
15296|    344|  return _internal_name();
15297|    344|}
_ZNK6google8protobuf24EnumValueDescriptorProto14_internal_nameEv:
15311|    344|inline const std::string& EnumValueDescriptorProto::_internal_name() const {
15312|    344|  ::google::protobuf::internal::TSanRead(&_impl_);
15313|    344|  return _impl_.name_.Get();
15314|    344|}
_ZNK6google8protobuf24EnumValueDescriptorProto6numberEv:
15362|    234|inline ::int32_t EnumValueDescriptorProto::number() const {
15363|       |  // @@protoc_insertion_point(field_get:google.protobuf.EnumValueDescriptorProto.number)
15364|    234|  return _internal_number();
15365|    234|}
_ZNK6google8protobuf24EnumValueDescriptorProto16_internal_numberEv:
15371|    234|inline ::int32_t EnumValueDescriptorProto::_internal_number() const {
15372|    234|  ::google::protobuf::internal::TSanRead(&_impl_);
15373|    234|  return _impl_.number_;
15374|    234|}
_ZNK6google8protobuf24EnumValueDescriptorProto11has_optionsEv:
15381|    172|inline bool EnumValueDescriptorProto::has_options() const {
15382|    172|  bool value = (_impl_._has_bits_[0] & 0x00000002u) != 0;
15383|    172|  PROTOBUF_ASSUME(!value || _impl_.options_ != nullptr);
  ------------------
  |  |  941|    172|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 172, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
15384|    172|  return value;
15385|    172|}
_ZNK6google8protobuf11FileOptions22_internal_java_packageEv:
16089|      4|inline const std::string& FileOptions::_internal_java_package() const {
16090|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
16091|      4|  return _impl_.java_package_.Get();
16092|      4|}
_ZNK6google8protobuf11FileOptions30_internal_java_outer_classnameEv:
16158|      4|inline const std::string& FileOptions::_internal_java_outer_classname() const {
16159|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
16160|      4|  return _impl_.java_outer_classname_.Get();
16161|      4|}
_ZNK6google8protobuf11FileOptions29_internal_java_multiple_filesEv:
16218|      1|inline bool FileOptions::_internal_java_multiple_files() const {
16219|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
16220|      1|  return _impl_.java_multiple_files_;
16221|      1|}
_ZNK6google8protobuf11FileOptions22_internal_optimize_forEv:
16302|      2|inline ::google::protobuf::FileOptions_OptimizeMode FileOptions::_internal_optimize_for() const {
16303|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
16304|      2|  return static_cast<::google::protobuf::FileOptions_OptimizeMode>(_impl_.optimize_for_);
16305|      2|}
_ZNK6google8protobuf11FileOptions20_internal_go_packageEv:
16340|      4|inline const std::string& FileOptions::_internal_go_package() const {
16341|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
16342|      4|  return _impl_.go_package_.Get();
16343|      4|}
_ZNK6google8protobuf11FileOptions19cc_generic_servicesEv:
16391|      4|inline bool FileOptions::cc_generic_services() const {
16392|       |  // @@protoc_insertion_point(field_get:google.protobuf.FileOptions.cc_generic_services)
16393|      4|  return _internal_cc_generic_services();
16394|      4|}
_ZNK6google8protobuf11FileOptions29_internal_cc_generic_servicesEv:
16400|      4|inline bool FileOptions::_internal_cc_generic_services() const {
16401|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
16402|      4|  return _impl_.cc_generic_services_;
16403|      4|}
_ZNK6google8protobuf11FileOptions26_internal_cc_enable_arenasEv:
16512|      1|inline bool FileOptions::_internal_cc_enable_arenas() const {
16513|      1|  ::google::protobuf::internal::TSanRead(&_impl_);
16514|      1|  return _impl_.cc_enable_arenas_;
16515|      1|}
_ZNK6google8protobuf11FileOptions27_internal_objc_class_prefixEv:
16549|      4|inline const std::string& FileOptions::_internal_objc_class_prefix() const {
16550|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
16551|      4|  return _impl_.objc_class_prefix_.Get();
16552|      4|}
_ZNK6google8protobuf11FileOptions26_internal_csharp_namespaceEv:
16618|      4|inline const std::string& FileOptions::_internal_csharp_namespace() const {
16619|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
16620|      4|  return _impl_.csharp_namespace_.Get();
16621|      4|}
_ZNK6google8protobuf11FileOptions12has_featuresEv:
17005|      4|inline bool FileOptions::has_features() const {
17006|      4|  bool value = (_impl_._has_bits_[0] & 0x00000400u) != 0;
17007|      4|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|      4|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 4, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
17008|      4|  return value;
17009|      4|}
_ZNK6google8protobuf11FileOptions35_internal_uninterpreted_option_sizeEv:
17101|      6|inline int FileOptions::_internal_uninterpreted_option_size() const {
17102|      6|  return _internal_uninterpreted_option().size();
17103|      6|}
_ZNK6google8protobuf11FileOptions25uninterpreted_option_sizeEv:
17104|      2|inline int FileOptions::uninterpreted_option_size() const {
17105|      2|  return _internal_uninterpreted_option_size();
17106|      2|}
_ZNK6google8protobuf11FileOptions30_internal_uninterpreted_optionEv:
17139|     17|FileOptions::_internal_uninterpreted_option() const {
17140|     17|  ::google::protobuf::internal::TSanRead(&_impl_);
17141|     17|  return _impl_.uninterpreted_option_;
17142|     17|}
_ZNK6google8protobuf14MessageOptions12has_featuresEv:
17294|     45|inline bool MessageOptions::has_features() const {
17295|     45|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
17296|     45|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|     45|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 45, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
17297|     45|  return value;
17298|     45|}
_ZNK6google8protobuf27FieldOptions_EditionDefault17_internal_editionEv:
17461|     36|inline ::google::protobuf::Edition FieldOptions_EditionDefault::_internal_edition() const {
17462|     36|  ::google::protobuf::internal::TSanRead(&_impl_);
17463|     36|  return static_cast<::google::protobuf::Edition>(_impl_.edition_);
17464|     36|}
_ZNK6google8protobuf27FieldOptions_EditionDefault15_internal_valueEv:
17499|     36|inline const std::string& FieldOptions_EditionDefault::_internal_value() const {
17500|     36|  ::google::protobuf::internal::TSanRead(&_impl_);
17501|     36|  return _impl_.value_.Get();
17502|     36|}
_ZNK6google8protobuf27FieldOptions_FeatureSupport28_internal_edition_introducedEv:
17563|     18|inline ::google::protobuf::Edition FieldOptions_FeatureSupport::_internal_edition_introduced() const {
17564|     18|  ::google::protobuf::internal::TSanRead(&_impl_);
17565|     18|  return static_cast<::google::protobuf::Edition>(_impl_.edition_introduced_);
17566|     18|}
_ZNK6google8protobuf27FieldOptions_FeatureSupport28_internal_edition_deprecatedEv:
17592|      2|inline ::google::protobuf::Edition FieldOptions_FeatureSupport::_internal_edition_deprecated() const {
17593|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
17594|      2|  return static_cast<::google::protobuf::Edition>(_impl_.edition_deprecated_);
17595|      2|}
_ZNK6google8protobuf27FieldOptions_FeatureSupport29_internal_deprecation_warningEv:
17630|      2|inline const std::string& FieldOptions_FeatureSupport::_internal_deprecation_warning() const {
17631|      2|  ::google::protobuf::internal::TSanRead(&_impl_);
17632|      2|  return _impl_.deprecation_warning_.Get();
17633|      2|}
_ZNK6google8protobuf12FieldOptions9has_ctypeEv:
17705|    206|inline bool FieldOptions::has_ctype() const {
17706|    206|  bool value = (_impl_._has_bits_[0] & 0x00000004u) != 0;
17707|    206|  return value;
17708|    206|}
_ZNK6google8protobuf12FieldOptions5ctypeEv:
17714|    206|inline ::google::protobuf::FieldOptions_CType FieldOptions::ctype() const {
17715|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.ctype)
17716|    206|  return _internal_ctype();
17717|    206|}
_ZNK6google8protobuf12FieldOptions15_internal_ctypeEv:
17723|    206|inline ::google::protobuf::FieldOptions_CType FieldOptions::_internal_ctype() const {
17724|    206|  ::google::protobuf::internal::TSanRead(&_impl_);
17725|    206|  return static_cast<::google::protobuf::FieldOptions_CType>(_impl_.ctype_);
17726|    206|}
_ZNK6google8protobuf12FieldOptions10has_packedEv:
17734|      2|inline bool FieldOptions::has_packed() const {
17735|      2|  bool value = (_impl_._has_bits_[0] & 0x00000010u) != 0;
17736|      2|  return value;
17737|      2|}
_ZNK6google8protobuf12FieldOptions6packedEv:
17743|    206|inline bool FieldOptions::packed() const {
17744|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.packed)
17745|    206|  return _internal_packed();
17746|    206|}
_ZNK6google8protobuf12FieldOptions16_internal_packedEv:
17752|    209|inline bool FieldOptions::_internal_packed() const {
17753|    209|  ::google::protobuf::internal::TSanRead(&_impl_);
17754|    209|  return _impl_.packed_;
17755|    209|}
_ZNK6google8protobuf12FieldOptions10deprecatedEv:
17856|  63.4k|inline bool FieldOptions::deprecated() const {
17857|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.deprecated)
17858|  63.4k|  return _internal_deprecated();
17859|  63.4k|}
_ZNK6google8protobuf12FieldOptions20_internal_deprecatedEv:
17865|  63.4k|inline bool FieldOptions::_internal_deprecated() const {
17866|  63.4k|  ::google::protobuf::internal::TSanRead(&_impl_);
17867|  63.4k|  return _impl_.deprecated_;
17868|  63.4k|}
_ZNK6google8protobuf12FieldOptions4weakEv:
17884|     98|inline bool FieldOptions::weak() const {
17885|       |  // @@protoc_insertion_point(field_get:google.protobuf.FieldOptions.weak)
17886|     98|  return _internal_weak();
17887|     98|}
_ZNK6google8protobuf12FieldOptions14_internal_weakEv:
17893|     98|inline bool FieldOptions::_internal_weak() const {
17894|     98|  ::google::protobuf::internal::TSanRead(&_impl_);
17895|     98|  return _impl_.weak_;
17896|     98|}
_ZNK6google8protobuf12FieldOptions19_internal_retentionEv:
17949|     22|inline ::google::protobuf::FieldOptions_OptionRetention FieldOptions::_internal_retention() const {
17950|     22|  ::google::protobuf::internal::TSanRead(&_impl_);
17951|     22|  return static_cast<::google::protobuf::FieldOptions_OptionRetention>(_impl_.retention_);
17952|     22|}
_ZNK6google8protobuf12FieldOptions22_internal_targets_sizeEv:
17960|     34|inline int FieldOptions::_internal_targets_size() const {
17961|     34|  return _internal_targets().size();
17962|     34|}
_ZNK6google8protobuf12FieldOptions17_internal_targetsEv:
17997|     70|    const {
17998|     70|  ::google::protobuf::internal::TSanRead(&_impl_);
17999|     70|  return _impl_.targets_;
18000|     70|}
_ZNK6google8protobuf12FieldOptions31_internal_edition_defaults_sizeEv:
18007|     34|inline int FieldOptions::_internal_edition_defaults_size() const {
18008|     34|  return _internal_edition_defaults().size();
18009|     34|}
_ZNK6google8protobuf12FieldOptions26_internal_edition_defaultsEv:
18045|     69|FieldOptions::_internal_edition_defaults() const {
18046|     69|  ::google::protobuf::internal::TSanRead(&_impl_);
18047|     69|  return _impl_.edition_defaults_;
18048|     69|}
_ZNK6google8protobuf12FieldOptions12has_featuresEv:
18056|    206|inline bool FieldOptions::has_features() const {
18057|    206|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
18058|    206|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|    206|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 206, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
18059|    206|  return value;
18060|    206|}
_ZNK6google8protobuf12FieldOptions35_internal_uninterpreted_option_sizeEv:
18248|     51|inline int FieldOptions::_internal_uninterpreted_option_size() const {
18249|     51|  return _internal_uninterpreted_option().size();
18250|     51|}
_ZNK6google8protobuf12FieldOptions25uninterpreted_option_sizeEv:
18251|     17|inline int FieldOptions::uninterpreted_option_size() const {
18252|     17|  return _internal_uninterpreted_option_size();
18253|     17|}
_ZNK6google8protobuf12FieldOptions30_internal_uninterpreted_optionEv:
18286|    136|FieldOptions::_internal_uninterpreted_option() const {
18287|    136|  ::google::protobuf::internal::TSanRead(&_impl_);
18288|    136|  return _impl_.uninterpreted_option_;
18289|    136|}
_ZNK6google8protobuf12OneofOptions12has_featuresEv:
18301|      2|inline bool OneofOptions::has_features() const {
18302|      2|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
18303|      2|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|      2|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 2, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
18304|      2|  return value;
18305|      2|}
_ZNK6google8protobuf11EnumOptions12has_featuresEv:
18534|     18|inline bool EnumOptions::has_features() const {
18535|     18|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
18536|     18|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|     18|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 18, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
18537|     18|  return value;
18538|     18|}
_ZNK6google8protobuf16EnumValueOptions12has_featuresEv:
18711|     86|inline bool EnumValueOptions::has_features() const {
18712|     86|  bool value = (_impl_._has_bits_[0] & 0x00000001u) != 0;
18713|     86|  PROTOBUF_ASSUME(!value || _impl_.features_ != nullptr);
  ------------------
  |  |  941|     86|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  |  |  ------------------
  |  |  |  Branch (941:48): [True: 86, False: 0]
  |  |  |  Branch (941:48): [True: 0, False: 0]
  |  |  ------------------
  ------------------
18714|     86|  return value;
18715|     86|}
_ZNK6google8protobuf10FeatureSet14field_presenceEv:
19821|   183k|inline ::google::protobuf::FeatureSet_FieldPresence FeatureSet::field_presence() const {
19822|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSet.field_presence)
19823|   183k|  return _internal_field_presence();
19824|   183k|}
_ZN6google8protobuf10FeatureSet18set_field_presenceENS0_24FeatureSet_FieldPresenceE:
19825|      2|inline void FeatureSet::set_field_presence(::google::protobuf::FeatureSet_FieldPresence value) {
19826|      2|  _internal_set_field_presence(value);
19827|      2|  _impl_._has_bits_[0] |= 0x00000001u;
19828|       |  // @@protoc_insertion_point(field_set:google.protobuf.FeatureSet.field_presence)
19829|      2|}
_ZNK6google8protobuf10FeatureSet24_internal_field_presenceEv:
19830|   183k|inline ::google::protobuf::FeatureSet_FieldPresence FeatureSet::_internal_field_presence() const {
19831|   183k|  ::google::protobuf::internal::TSanRead(&_impl_);
19832|   183k|  return static_cast<::google::protobuf::FeatureSet_FieldPresence>(_impl_.field_presence_);
19833|   183k|}
_ZN6google8protobuf10FeatureSet28_internal_set_field_presenceENS0_24FeatureSet_FieldPresenceE:
19834|      2|inline void FeatureSet::_internal_set_field_presence(::google::protobuf::FeatureSet_FieldPresence value) {
19835|      2|  ::google::protobuf::internal::TSanWrite(&_impl_);
19836|       |  assert(::google::protobuf::FeatureSet_FieldPresence_IsValid(value));
19837|      2|  _impl_.field_presence_ = value;
19838|      2|}
_ZNK6google8protobuf10FeatureSet9enum_typeEv:
19850|    452|inline ::google::protobuf::FeatureSet_EnumType FeatureSet::enum_type() const {
19851|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSet.enum_type)
19852|    452|  return _internal_enum_type();
19853|    452|}
_ZNK6google8protobuf10FeatureSet19_internal_enum_typeEv:
19859|    872|inline ::google::protobuf::FeatureSet_EnumType FeatureSet::_internal_enum_type() const {
19860|    872|  ::google::protobuf::internal::TSanRead(&_impl_);
19861|    872|  return static_cast<::google::protobuf::FeatureSet_EnumType>(_impl_.enum_type_);
19862|    872|}
_ZNK6google8protobuf10FeatureSet23repeated_field_encodingEv:
19879|    452|inline ::google::protobuf::FeatureSet_RepeatedFieldEncoding FeatureSet::repeated_field_encoding() const {
19880|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSet.repeated_field_encoding)
19881|    452|  return _internal_repeated_field_encoding();
19882|    452|}
_ZN6google8protobuf10FeatureSet27set_repeated_field_encodingENS0_32FeatureSet_RepeatedFieldEncodingE:
19883|      3|inline void FeatureSet::set_repeated_field_encoding(::google::protobuf::FeatureSet_RepeatedFieldEncoding value) {
19884|      3|  _internal_set_repeated_field_encoding(value);
19885|      3|  _impl_._has_bits_[0] |= 0x00000004u;
19886|       |  // @@protoc_insertion_point(field_set:google.protobuf.FeatureSet.repeated_field_encoding)
19887|      3|}
_ZNK6google8protobuf10FeatureSet33_internal_repeated_field_encodingEv:
19888|    875|inline ::google::protobuf::FeatureSet_RepeatedFieldEncoding FeatureSet::_internal_repeated_field_encoding() const {
19889|    875|  ::google::protobuf::internal::TSanRead(&_impl_);
19890|    875|  return static_cast<::google::protobuf::FeatureSet_RepeatedFieldEncoding>(_impl_.repeated_field_encoding_);
19891|    875|}
_ZN6google8protobuf10FeatureSet37_internal_set_repeated_field_encodingENS0_32FeatureSet_RepeatedFieldEncodingE:
19892|      3|inline void FeatureSet::_internal_set_repeated_field_encoding(::google::protobuf::FeatureSet_RepeatedFieldEncoding value) {
19893|      3|  ::google::protobuf::internal::TSanWrite(&_impl_);
19894|       |  assert(::google::protobuf::FeatureSet_RepeatedFieldEncoding_IsValid(value));
19895|      3|  _impl_.repeated_field_encoding_ = value;
19896|      3|}
_ZNK6google8protobuf10FeatureSet15utf8_validationEv:
19908|    452|inline ::google::protobuf::FeatureSet_Utf8Validation FeatureSet::utf8_validation() const {
19909|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSet.utf8_validation)
19910|    452|  return _internal_utf8_validation();
19911|    452|}
_ZNK6google8protobuf10FeatureSet25_internal_utf8_validationEv:
19917|    872|inline ::google::protobuf::FeatureSet_Utf8Validation FeatureSet::_internal_utf8_validation() const {
19918|    872|  ::google::protobuf::internal::TSanRead(&_impl_);
19919|    872|  return static_cast<::google::protobuf::FeatureSet_Utf8Validation>(_impl_.utf8_validation_);
19920|    872|}
_ZNK6google8protobuf10FeatureSet16message_encodingEv:
19937|    519|inline ::google::protobuf::FeatureSet_MessageEncoding FeatureSet::message_encoding() const {
19938|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSet.message_encoding)
19939|    519|  return _internal_message_encoding();
19940|    519|}
_ZNK6google8protobuf10FeatureSet26_internal_message_encodingEv:
19946|    939|inline ::google::protobuf::FeatureSet_MessageEncoding FeatureSet::_internal_message_encoding() const {
19947|    939|  ::google::protobuf::internal::TSanRead(&_impl_);
19948|    939|  return static_cast<::google::protobuf::FeatureSet_MessageEncoding>(_impl_.message_encoding_);
19949|    939|}
_ZNK6google8protobuf10FeatureSet11json_formatEv:
19966|    452|inline ::google::protobuf::FeatureSet_JsonFormat FeatureSet::json_format() const {
19967|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSet.json_format)
19968|    452|  return _internal_json_format();
19969|    452|}
_ZNK6google8protobuf10FeatureSet21_internal_json_formatEv:
19975|    872|inline ::google::protobuf::FeatureSet_JsonFormat FeatureSet::_internal_json_format() const {
19976|    872|  ::google::protobuf::internal::TSanRead(&_impl_);
19977|    872|  return static_cast<::google::protobuf::FeatureSet_JsonFormat>(_impl_.json_format_);
19978|    872|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault7editionEv:
19999|     66|inline ::google::protobuf::Edition FeatureSetDefaults_FeatureSetEditionDefault::edition() const {
20000|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.edition)
20001|     66|  return _internal_edition();
20002|     66|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault11set_editionENS0_7EditionE:
20003|      4|inline void FeatureSetDefaults_FeatureSetEditionDefault::set_edition(::google::protobuf::Edition value) {
20004|      4|  _internal_set_edition(value);
20005|      4|  _impl_._has_bits_[0] |= 0x00000004u;
20006|       |  // @@protoc_insertion_point(field_set:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.edition)
20007|      4|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault17_internal_editionEv:
20008|     66|inline ::google::protobuf::Edition FeatureSetDefaults_FeatureSetEditionDefault::_internal_edition() const {
20009|     66|  ::google::protobuf::internal::TSanRead(&_impl_);
20010|     66|  return static_cast<::google::protobuf::Edition>(_impl_.edition_);
20011|     66|}
_ZN6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault21_internal_set_editionENS0_7EditionE:
20012|      4|inline void FeatureSetDefaults_FeatureSetEditionDefault::_internal_set_edition(::google::protobuf::Edition value) {
20013|      4|  ::google::protobuf::internal::TSanWrite(&_impl_);
20014|       |  assert(::google::protobuf::Edition_IsValid(value));
20015|      4|  _impl_.edition_ = value;
20016|      4|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault30_internal_overridable_featuresEv:
20029|     20|inline const ::google::protobuf::FeatureSet& FeatureSetDefaults_FeatureSetEditionDefault::_internal_overridable_features() const {
20030|     20|  ::google::protobuf::internal::TSanRead(&_impl_);
20031|     20|  const ::google::protobuf::FeatureSet* p = _impl_.overridable_features_;
20032|     20|  return p != nullptr ? *p : reinterpret_cast<const ::google::protobuf::FeatureSet&>(::google::protobuf::_FeatureSet_default_instance_);
  ------------------
  |  Branch (20032:10): [True: 20, False: 0]
  ------------------
20033|     20|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault20overridable_featuresEv:
20034|     20|inline const ::google::protobuf::FeatureSet& FeatureSetDefaults_FeatureSetEditionDefault::overridable_features() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
20035|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridable_features)
20036|     20|  return _internal_overridable_features();
20037|     20|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault24_internal_fixed_featuresEv:
20125|     20|inline const ::google::protobuf::FeatureSet& FeatureSetDefaults_FeatureSetEditionDefault::_internal_fixed_features() const {
20126|     20|  ::google::protobuf::internal::TSanRead(&_impl_);
20127|     20|  const ::google::protobuf::FeatureSet* p = _impl_.fixed_features_;
20128|     20|  return p != nullptr ? *p : reinterpret_cast<const ::google::protobuf::FeatureSet&>(::google::protobuf::_FeatureSet_default_instance_);
  ------------------
  |  Branch (20128:10): [True: 20, False: 0]
  ------------------
20129|     20|}
_ZNK6google8protobuf43FeatureSetDefaults_FeatureSetEditionDefault14fixed_featuresEv:
20130|     20|inline const ::google::protobuf::FeatureSet& FeatureSetDefaults_FeatureSetEditionDefault::fixed_features() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
20131|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixed_features)
20132|     20|  return _internal_fixed_features();
20133|     20|}
_ZNK6google8protobuf18FeatureSetDefaults8defaultsEv:
20248|     12|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
20249|       |  // @@protoc_insertion_point(field_list:google.protobuf.FeatureSetDefaults.defaults)
20250|     12|  return _internal_defaults();
20251|     12|}
_ZNK6google8protobuf18FeatureSetDefaults18_internal_defaultsEv:
20253|     13|FeatureSetDefaults::_internal_defaults() const {
20254|     13|  ::google::protobuf::internal::TSanRead(&_impl_);
20255|     13|  return _impl_.defaults_;
20256|     13|}
_ZNK6google8protobuf18FeatureSetDefaults15minimum_editionEv:
20273|      4|inline ::google::protobuf::Edition FeatureSetDefaults::minimum_edition() const {
20274|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSetDefaults.minimum_edition)
20275|      4|  return _internal_minimum_edition();
20276|      4|}
_ZNK6google8protobuf18FeatureSetDefaults25_internal_minimum_editionEv:
20282|      4|inline ::google::protobuf::Edition FeatureSetDefaults::_internal_minimum_edition() const {
20283|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
20284|      4|  return static_cast<::google::protobuf::Edition>(_impl_.minimum_edition_);
20285|      4|}
_ZNK6google8protobuf18FeatureSetDefaults15maximum_editionEv:
20302|      4|inline ::google::protobuf::Edition FeatureSetDefaults::maximum_edition() const {
20303|       |  // @@protoc_insertion_point(field_get:google.protobuf.FeatureSetDefaults.maximum_edition)
20304|      4|  return _internal_maximum_edition();
20305|      4|}
_ZNK6google8protobuf18FeatureSetDefaults25_internal_maximum_editionEv:
20311|      4|inline ::google::protobuf::Edition FeatureSetDefaults::_internal_maximum_edition() const {
20312|      4|  ::google::protobuf::internal::TSanRead(&_impl_);
20313|      4|  return static_cast<::google::protobuf::Edition>(_impl_.maximum_edition_);
20314|      4|}
_ZNK6google8protobuf10FeatureSet12GetExtensionINS0_8internal17MessageTypeTraitsIN2pb11CppFeaturesEEELh11ELb0ETnNSt3__19enable_ifIXsrT_14kLifetimeBoundEiE4typeELi0EEENSA_8Singular9ConstTypeERKNS3_19ExtensionIdentifierIS1_SA_XT0_EXT1_EEE:
 2317|  18.1k|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2318|  18.1k|    return _proto_TypeTraits::Get(id.number(), _impl_._extensions_, id.default_value());
 2319|  18.1k|  }
_ZN6google8protobuf10FeatureSet16MutableExtensionINS0_8internal17MessageTypeTraitsIN2pb11CppFeaturesEEELh11ELb0EEENT_8Singular11MutableTypeERKNS3_19ExtensionIdentifierIS1_S8_XT0_EXT1_EEE:
 2326|    206|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2327|    206|    return _proto_TypeTraits::Mutable(id.number(), _field_type, &_impl_._extensions_);
 2328|    206|  }

_ZN6google8protobuf25EncodedDescriptorDatabase3AddEPKvi:
  545|      6|                                    int size) {
  546|      6|  FileDescriptorProto file;
  547|      6|  if (file.ParseFromArray(encoded_file_descriptor, size)) {
  ------------------
  |  Branch (547:7): [True: 6, False: 0]
  ------------------
  548|      6|    return index_->AddFile(file, std::make_pair(encoded_file_descriptor, size));
  549|      6|  } else {
  550|      0|    ABSL_LOG(ERROR) << "Invalid file descriptor data passed to "
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  551|      0|                       "EncodedDescriptorDatabase::Add().";
  552|      0|    return false;
  553|      0|  }
  554|      6|}
_ZN6google8protobuf25EncodedDescriptorDatabase14FindFileByNameERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS0_19FileDescriptorProtoE:
  565|      4|                                               FileDescriptorProto* output) {
  566|      4|  return MaybeParse(index_->FindFile(filename), output);
  567|      4|}
_ZN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9AddSymbolENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
  684|     48|    absl::string_view symbol) {
  685|     48|  SymbolEntry entry = {static_cast<int>(all_values_.size() - 1),
  686|     48|                       EncodeString(symbol)};
  687|     48|  std::string entry_as_string = entry.AsString(*this);
  688|       |
  689|       |  // We need to make sure not to violate our map invariant.
  690|       |
  691|       |  // If the symbol name is invalid it could break our lookup algorithm (which
  692|       |  // relies on the fact that '.' sorts before all other characters that are
  693|       |  // valid in symbol names).
  694|     48|  if (!ValidateSymbolName(symbol)) {
  ------------------
  |  Branch (694:7): [True: 0, False: 48]
  ------------------
  695|      0|    ABSL_LOG(ERROR) << "Invalid symbol name: " << entry_as_string;
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  696|      0|    return false;
  697|      0|  }
  698|       |
  699|     48|  auto iter = FindLastLessOrEqual(&by_symbol_, entry);
  700|     48|  if (!CheckForMutualSubsymbols(entry_as_string, &iter, by_symbol_.end(),
  ------------------
  |  Branch (700:7): [True: 0, False: 48]
  ------------------
  701|     48|                                *this)) {
  702|      0|    return false;
  703|      0|  }
  704|       |
  705|       |  // Same, but on by_symbol_flat_
  706|     48|  auto flat_iter =
  707|     48|      FindLastLessOrEqual(&by_symbol_flat_, entry, by_symbol_.key_comp());
  708|     48|  if (!CheckForMutualSubsymbols(entry_as_string, &flat_iter,
  ------------------
  |  Branch (708:7): [True: 0, False: 48]
  ------------------
  709|     48|                                by_symbol_flat_.end(), *this)) {
  710|      0|    return false;
  711|      0|  }
  712|       |
  713|       |  // OK, no conflicts.
  714|       |
  715|       |  // Insert the new symbol using the iterator as a hint, the new entry will
  716|       |  // appear immediately before the one the iterator is pointing at.
  717|     48|  by_symbol_.insert(iter, entry);
  718|       |
  719|     48|  return true;
  720|     48|}
_ZN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex10EnsureFlatEv:
  806|      4|void EncodedDescriptorDatabase::DescriptorIndex::EnsureFlat() {
  807|      4|  all_values_.shrink_to_fit();
  808|       |  // Merge each of the sets into their flat counterpart.
  809|      4|  MergeIntoFlat(&by_name_, &by_name_flat_);
  810|      4|  MergeIntoFlat(&by_symbol_, &by_symbol_flat_);
  811|      4|  MergeIntoFlat(&by_extension_, &by_extension_flat_);
  812|      4|}
_ZN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex8FindFileENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
  848|      4|    absl::string_view filename) {
  849|      4|  EnsureFlat();
  850|       |
  851|      4|  auto it = std::lower_bound(by_name_flat_.begin(), by_name_flat_.end(),
  852|      4|                             filename, by_name_.key_comp());
  853|      4|  return it == by_name_flat_.end() || it->name(*this) != filename
  ------------------
  |  Branch (853:10): [True: 0, False: 4]
  |  Branch (853:39): [True: 0, False: 4]
  ------------------
  854|      4|             ? std::make_pair(nullptr, 0)
  855|      4|             : all_values_[it->data_offset].value();
  856|      4|}
_ZN6google8protobuf25EncodedDescriptorDatabase10MaybeParseENSt3__14pairIPKviEEPNS0_19FileDescriptorProtoE:
  866|      4|    std::pair<const void*, int> encoded_file, FileDescriptorProto* output) {
  867|      4|  if (encoded_file.first == nullptr) return false;
  ------------------
  |  Branch (867:7): [True: 0, False: 4]
  ------------------
  868|      4|  absl::string_view source(static_cast<const char*>(encoded_file.first),
  869|      4|                           encoded_file.second);
  870|      4|  return internal::ParseNoReflection(source, *output);
  871|      4|}
_ZN6google8protobuf25EncodedDescriptorDatabaseC2Ev:
  874|      2|    : index_(new DescriptorIndex()) {}
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex12EncodeStringENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
  420|     61|  String EncodeString(absl::string_view str) const { return String(str); }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntry8AsStringERKS2_:
  470|    135|    std::string AsString(const DescriptorIndex& index) const {
  471|    135|      auto p = package(index);
  472|    135|      return absl::StrCat(p, p.empty() ? "" : ".", symbol(index));
  ------------------
  |  Branch (472:30): [True: 0, False: 135]
  ------------------
  473|    135|    }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntry7packageERKS2_:
  462|    751|    absl::string_view package(const DescriptorIndex& index) const {
  463|    751|      return index.DecodeString(index.all_values_[data_offset].encoded_package,
  464|    751|                                data_offset);
  465|    751|    }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex12DecodeStringERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEi:
  421|  1.53k|  absl::string_view DecodeString(const String& str, int) const { return str; }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntry6symbolERKS2_:
  466|    751|    absl::string_view symbol(const DescriptorIndex& index) const {
  467|    751|      return index.DecodeString(encoded_symbol, data_offset);
  468|    751|    }
descriptor_database.cc:_ZN6google8protobuf12_GLOBAL__N_118ValidateSymbolNameENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  138|     54|bool ValidateSymbolName(absl::string_view name) {
  139|    623|  for (char c : name) {
  ------------------
  |  Branch (139:15): [True: 623, False: 54]
  ------------------
  140|       |    // I don't trust ctype.h due to locales.  :(
  141|    623|    if (c != '.' && c != '_' && (c < '0' || c > '9') && (c < 'A' || c > 'Z') &&
  ------------------
  |  Branch (141:9): [True: 618, False: 5]
  |  Branch (141:21): [True: 616, False: 2]
  |  Branch (141:34): [True: 0, False: 616]
  |  Branch (141:45): [True: 616, False: 0]
  |  Branch (141:58): [True: 0, False: 616]
  |  Branch (141:69): [True: 529, False: 87]
  ------------------
  142|    529|        (c < 'a' || c > 'z')) {
  ------------------
  |  Branch (142:10): [True: 0, False: 529]
  |  Branch (142:21): [True: 0, False: 529]
  ------------------
  143|      0|      return false;
  144|      0|    }
  145|    623|  }
  146|     54|  return true;
  147|     54|}
descriptor_database.cc:_ZN6google8protobuf12_GLOBAL__N_111IsSubSymbolENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEES6_:
  172|     87|bool IsSubSymbol(absl::string_view sub_symbol, absl::string_view super_symbol) {
  173|     87|  return sub_symbol == super_symbol ||
  ------------------
  |  Branch (173:10): [True: 0, False: 87]
  ------------------
  174|     87|         (absl::StartsWith(super_symbol, sub_symbol) &&
  ------------------
  |  Branch (174:11): [True: 1, False: 86]
  ------------------
  175|      1|          super_symbol[sub_symbol.size()] == '.');
  ------------------
  |  Branch (175:11): [True: 0, False: 1]
  ------------------
  176|     87|}
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex12EncodedEntry5valueEv:
  430|      4|    Value value() const { return {data, size}; }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntry4nameERKS2_:
  438|     35|    absl::string_view name(const DescriptorIndex& index) const {
  439|     35|      return index.DecodeString(encoded_name, data_offset);
  440|     35|    }
_ZN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex7AddFileINS0_19FileDescriptorProtoEEEbRKT_NSt3__14pairIPKviEE:
  616|      6|                                                         Value value) {
  617|       |  // We push `value` into the array first. This is important because the AddXXX
  618|       |  // functions below will expect it to be there.
  619|      6|  all_values_.push_back({value.first, value.second, {}});
  620|       |
  621|      6|  if (!ValidateSymbolName(file.package())) {
  ------------------
  |  Branch (621:7): [True: 0, False: 6]
  ------------------
  622|      0|    ABSL_LOG(ERROR) << "Invalid package name: " << file.package();
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  623|      0|    return false;
  624|      0|  }
  625|      6|  all_values_.back().encoded_package = EncodeString(file.package());
  626|       |
  627|      6|  if (!by_name_
  ------------------
  |  Branch (627:7): [True: 0, False: 6]
  |  Branch (627:7): [True: 0, False: 6]
  ------------------
  628|      6|           .insert({static_cast<int>(all_values_.size() - 1),
  629|      6|                    EncodeString(file.name())})
  630|      6|           .second ||
  631|      6|      std::binary_search(by_name_flat_.begin(), by_name_flat_.end(),
  ------------------
  |  Branch (631:7): [True: 0, False: 6]
  ------------------
  632|      6|                         file.name(), by_name_.key_comp())) {
  633|      0|    ABSL_LOG(ERROR) << "File already exists in database: " << file.name();
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  634|      0|    return false;
  635|      0|  }
  636|       |
  637|     46|  for (const auto& message_type : file.message_type()) {
  ------------------
  |  Branch (637:33): [True: 46, False: 6]
  ------------------
  638|     46|    if (!AddSymbol(message_type.name())) return false;
  ------------------
  |  Branch (638:9): [True: 0, False: 46]
  ------------------
  639|     46|    if (!AddNestedExtensions(file.name(), message_type)) return false;
  ------------------
  |  Branch (639:9): [True: 0, False: 46]
  ------------------
  640|     46|  }
  641|      6|  for (const auto& enum_type : file.enum_type()) {
  ------------------
  |  Branch (641:30): [True: 1, False: 6]
  ------------------
  642|      1|    if (!AddSymbol(enum_type.name())) return false;
  ------------------
  |  Branch (642:9): [True: 0, False: 1]
  ------------------
  643|      1|  }
  644|      6|  for (const auto& extension : file.extension()) {
  ------------------
  |  Branch (644:30): [True: 1, False: 6]
  ------------------
  645|      1|    if (!AddSymbol(extension.name())) return false;
  ------------------
  |  Branch (645:9): [True: 0, False: 1]
  ------------------
  646|      1|    if (!AddExtension(file.name(), extension)) return false;
  ------------------
  |  Branch (646:9): [True: 0, False: 1]
  ------------------
  647|      1|  }
  648|      6|  for (const auto& service : file.service()) {
  ------------------
  |  Branch (648:28): [True: 0, False: 6]
  ------------------
  649|      0|    if (!AddSymbol(service.name())) return false;
  ------------------
  |  Branch (649:9): [True: 0, False: 0]
  ------------------
  650|      0|  }
  651|       |
  652|      6|  return true;
  653|      6|}
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareclERKNS2_9FileEntryES6_:
  445|      9|    bool operator()(const FileEntry& a, const FileEntry& b) const {
  446|      9|      return a.name(index) < b.name(index);
  447|      9|    }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareclERKNS2_9FileEntryENSt3__117basic_string_viewIcNS7_11char_traitsIcEEEE:
  448|     12|    bool operator()(const FileEntry& a, absl::string_view b) const {
  449|     12|      return a.name(index) < b;
  450|     12|    }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareclENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEERKNS2_9FileEntryE:
  451|      1|    bool operator()(absl::string_view a, const FileEntry& b) const {
  452|      1|      return a < b.name(index);
  453|      1|    }
_ZN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex19AddNestedExtensionsINS0_15DescriptorProtoEEEbNSt3__117basic_string_viewIcNS5_11char_traitsIcEEEERKT_:
  724|     56|    absl::string_view filename, const DescProto& message_type) {
  725|     56|  for (const auto& nested_type : message_type.nested_type()) {
  ------------------
  |  Branch (725:32): [True: 10, False: 56]
  ------------------
  726|     10|    if (!AddNestedExtensions(filename, nested_type)) return false;
  ------------------
  |  Branch (726:9): [True: 0, False: 10]
  ------------------
  727|     10|  }
  728|     56|  for (const auto& extension : message_type.extension()) {
  ------------------
  |  Branch (728:30): [True: 0, False: 56]
  ------------------
  729|      0|    if (!AddExtension(filename, extension)) return false;
  ------------------
  |  Branch (729:9): [True: 0, False: 0]
  ------------------
  730|      0|  }
  731|     56|  return true;
  732|     56|}
_ZN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex12AddExtensionINS0_20FieldDescriptorProtoEEEbNSt3__117basic_string_viewIcNS5_11char_traitsIcEEEERKT_:
  736|      1|    absl::string_view filename, const FieldProto& field) {
  737|      1|  if (!field.extendee().empty() && field.extendee()[0] == '.') {
  ------------------
  |  Branch (737:7): [True: 1, False: 0]
  |  Branch (737:36): [True: 1, False: 0]
  ------------------
  738|       |    // The extension is fully-qualified.  We can use it as a lookup key in
  739|       |    // the by_symbol_ table.
  740|      1|    if (!by_extension_
  ------------------
  |  Branch (740:9): [True: 0, False: 1]
  |  Branch (740:9): [True: 0, False: 1]
  ------------------
  741|      1|             .insert({static_cast<int>(all_values_.size() - 1),
  742|      1|                      EncodeString(field.extendee()), field.number()})
  743|      1|             .second ||
  744|      1|        std::binary_search(
  ------------------
  |  Branch (744:9): [True: 0, False: 1]
  ------------------
  745|      1|            by_extension_flat_.begin(), by_extension_flat_.end(),
  746|      1|            std::make_pair(field.extendee().substr(1), field.number()),
  747|      1|            by_extension_.key_comp())) {
  748|      0|      ABSL_LOG(ERROR)
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  749|      0|          << "Extension conflicts with extension already in database: "
  750|      0|             "extend "
  751|      0|          << field.extendee() << " { " << field.name() << " = "
  752|      0|          << field.number() << " } from:" << filename;
  753|      0|      return false;
  754|      0|    }
  755|      1|  } else {
  756|       |    // Not fully-qualified.  We can't really do anything here, unfortunately.
  757|       |    // We don't consider this an error, though, because the descriptor is
  758|       |    // valid.
  759|      0|  }
  760|      1|  return true;
  761|      1|}
descriptor_database.cc:_ZN6google8protobuf12_GLOBAL__N_119FindLastLessOrEqualIN4absl12lts_202401169btree_setINS0_25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EEEES8_EENT_14const_iteratorEPKSE_RKT0_:
  154|     48|    const Container* container, const Key& key) {
  155|     48|  auto iter = container->upper_bound(key);
  156|     48|  if (iter != container->begin()) --iter;
  ------------------
  |  Branch (156:7): [True: 37, False: 11]
  ------------------
  157|     48|  return iter;
  158|     48|}
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareclINS2_11SymbolEntryES5_EEbRKT_RKT0_:
  496|    308|    bool operator()(const T& lhs, const U& rhs) const {
  497|    308|      auto lhs_parts = GetParts(lhs);
  498|    308|      auto rhs_parts = GetParts(rhs);
  499|       |
  500|       |      // Fast path to avoid making the whole string for common cases.
  501|    308|      if (int res =
  ------------------
  |  Branch (501:15): [True: 86, False: 222]
  ------------------
  502|    308|              lhs_parts.first.substr(0, rhs_parts.first.size())
  503|    308|                  .compare(rhs_parts.first.substr(0, lhs_parts.first.size()))) {
  504|       |        // If the packages already differ, exit early.
  505|     86|        return res < 0;
  506|    222|      } else if (lhs_parts.first.size() == rhs_parts.first.size()) {
  ------------------
  |  Branch (506:18): [True: 222, False: 0]
  ------------------
  507|    222|        return lhs_parts.second < rhs_parts.second;
  508|    222|      }
  509|      0|      return AsString(lhs) < AsString(rhs);
  510|    308|    }
_ZNK6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompare8GetPartsERKNS2_11SymbolEntryE:
  485|    616|        const SymbolEntry& entry) const {
  486|    616|      auto package = entry.package(index);
  487|    616|      if (package.empty()) return {entry.symbol(index), absl::string_view{}};
  ------------------
  |  Branch (487:11): [True: 0, False: 616]
  ------------------
  488|    616|      return {package, entry.symbol(index)};
  489|    616|    }
descriptor_database.cc:_ZN6google8protobufL24CheckForMutualSubsymbolsIN4absl12lts_2024011618container_internal14btree_iteratorIKNS4_10btree_nodeINS4_10set_paramsINS0_25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS9_13SymbolCompareENSt3__19allocatorISA_EELi256ELb0EEEEERKSA_PSI_EENS5_ISG_SJ_SK_EES9_EEbNSC_17basic_string_viewIcNSC_11char_traitsIcEEEEPT_T0_RKT1_:
  657|     48|                                     Iter2 end, const Index& index) {
  658|     48|  if (*iter != end) {
  ------------------
  |  Branch (658:7): [True: 45, False: 3]
  ------------------
  659|     45|    if (IsSubSymbol((*iter)->AsString(index), symbol_name)) {
  ------------------
  |  Branch (659:9): [True: 0, False: 45]
  ------------------
  660|      0|      ABSL_LOG(ERROR) << "Symbol name \"" << symbol_name
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  661|      0|                      << "\" conflicts with the existing symbol \""
  662|      0|                      << (*iter)->AsString(index) << "\".";
  663|      0|      return false;
  664|      0|    }
  665|       |
  666|       |    // OK, that worked.  Now we have to make sure that no symbol in the map is
  667|       |    // a sub-symbol of the one we are inserting.  The only symbol which could
  668|       |    // be so is the first symbol that is greater than the new symbol.  Since
  669|       |    // |iter| points at the last symbol that is less than or equal, we just have
  670|       |    // to increment it.
  671|     45|    ++*iter;
  672|       |
  673|     45|    if (*iter != end && IsSubSymbol(symbol_name, (*iter)->AsString(index))) {
  ------------------
  |  Branch (673:9): [True: 38, False: 7]
  |  Branch (673:9): [True: 0, False: 45]
  |  Branch (673:25): [True: 0, False: 38]
  ------------------
  674|      0|      ABSL_LOG(ERROR) << "Symbol name \"" << symbol_name
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  675|      0|                      << "\" conflicts with the existing symbol \""
  676|      0|                      << (*iter)->AsString(index) << "\".";
  677|      0|      return false;
  678|      0|    }
  679|     45|  }
  680|     48|  return true;
  681|     48|}
descriptor_database.cc:_ZN6google8protobuf12_GLOBAL__N_119FindLastLessOrEqualINSt3__16vectorINS0_25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS3_9allocatorIS7_EEEES7_NS6_13SymbolCompareEEENT_14const_iteratorEPKSC_RKT0_RKT1_:
  163|     48|    const Container* container, const Key& key, const Cmp& cmp) {
  164|     48|  auto iter = std::upper_bound(container->begin(), container->end(), key, cmp);
  165|     48|  if (iter != container->begin()) --iter;
  ------------------
  |  Branch (165:7): [True: 2, False: 46]
  ------------------
  166|     48|  return iter;
  167|     48|}
descriptor_database.cc:_ZN6google8protobufL24CheckForMutualSubsymbolsINSt3__111__wrap_iterIPKNS0_25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEENS3_IPS6_EES5_EEbNS2_17basic_string_viewIcNS2_11char_traitsIcEEEEPT_T0_RKT1_:
  657|     48|                                     Iter2 end, const Index& index) {
  658|     48|  if (*iter != end) {
  ------------------
  |  Branch (658:7): [True: 2, False: 46]
  ------------------
  659|      2|    if (IsSubSymbol((*iter)->AsString(index), symbol_name)) {
  ------------------
  |  Branch (659:9): [True: 0, False: 2]
  ------------------
  660|      0|      ABSL_LOG(ERROR) << "Symbol name \"" << symbol_name
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  661|      0|                      << "\" conflicts with the existing symbol \""
  662|      0|                      << (*iter)->AsString(index) << "\".";
  663|      0|      return false;
  664|      0|    }
  665|       |
  666|       |    // OK, that worked.  Now we have to make sure that no symbol in the map is
  667|       |    // a sub-symbol of the one we are inserting.  The only symbol which could
  668|       |    // be so is the first symbol that is greater than the new symbol.  Since
  669|       |    // |iter| points at the last symbol that is less than or equal, we just have
  670|       |    // to increment it.
  671|      2|    ++*iter;
  672|       |
  673|      2|    if (*iter != end && IsSubSymbol(symbol_name, (*iter)->AsString(index))) {
  ------------------
  |  Branch (673:9): [True: 2, False: 0]
  |  Branch (673:9): [True: 0, False: 2]
  |  Branch (673:25): [True: 0, False: 2]
  ------------------
  674|      0|      ABSL_LOG(ERROR) << "Symbol name \"" << symbol_name
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  675|      0|                      << "\" conflicts with the existing symbol \""
  676|      0|                      << (*iter)->AsString(index) << "\".";
  677|      0|      return false;
  678|      0|    }
  679|      2|  }
  680|     48|  return true;
  681|     48|}
descriptor_database.cc:_ZN6google8protobufL13MergeIntoFlatINS0_25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS3_11FileCompareEEEvPN4absl12lts_202401169btree_setIT_T0_NSt3__19allocatorIS9_EEEEPNSB_6vectorIS9_SD_EE:
  797|      4|static void MergeIntoFlat(absl::btree_set<T, Less>* s, std::vector<T>* flat) {
  798|      4|  if (s->empty()) return;
  ------------------
  |  Branch (798:7): [True: 2, False: 2]
  ------------------
  799|      2|  std::vector<T> new_flat(s->size() + flat->size());
  800|      2|  std::merge(s->begin(), s->end(), flat->begin(), flat->end(), &new_flat[0],
  801|      2|             s->key_comp());
  802|      2|  *flat = std::move(new_flat);
  803|      2|  s->clear();
  804|      2|}
descriptor_database.cc:_ZN6google8protobufL13MergeIntoFlatINS0_25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS3_13SymbolCompareEEEvPN4absl12lts_202401169btree_setIT_T0_NSt3__19allocatorIS9_EEEEPNSB_6vectorIS9_SD_EE:
  797|      4|static void MergeIntoFlat(absl::btree_set<T, Less>* s, std::vector<T>* flat) {
  798|      4|  if (s->empty()) return;
  ------------------
  |  Branch (798:7): [True: 2, False: 2]
  ------------------
  799|      2|  std::vector<T> new_flat(s->size() + flat->size());
  800|      2|  std::merge(s->begin(), s->end(), flat->begin(), flat->end(), &new_flat[0],
  801|      2|             s->key_comp());
  802|      2|  *flat = std::move(new_flat);
  803|      2|  s->clear();
  804|      2|}
descriptor_database.cc:_ZN6google8protobufL13MergeIntoFlatINS0_25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS3_16ExtensionCompareEEEvPN4absl12lts_202401169btree_setIT_T0_NSt3__19allocatorIS9_EEEEPNSB_6vectorIS9_SD_EE:
  797|      4|static void MergeIntoFlat(absl::btree_set<T, Less>* s, std::vector<T>* flat) {
  798|      4|  if (s->empty()) return;
  ------------------
  |  Branch (798:7): [True: 3, False: 1]
  ------------------
  799|      1|  std::vector<T> new_flat(s->size() + flat->size());
  800|      1|  std::merge(s->begin(), s->end(), flat->begin(), flat->end(), &new_flat[0],
  801|      1|             s->key_comp());
  802|      1|  *flat = std::move(new_flat);
  803|      1|  s->clear();
  804|      1|}

_ZN6google8protobuf18DescriptorDatabaseC2Ev:
   52|      2|  inline DescriptorDatabase() {}

descriptor.cc:_ZN6google8protobuf8internal16VisitDescriptorsIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEvRKNS0_14FileDescriptorES6_T_:
  165|      4|                      const FileDescriptorProto& proto, Visitor visitor) {
  166|      4|  using VisitorImpl = internal::VisitorImpl<Visitor>;
  167|      4|  internal::VisitImpl<VisitorImpl>{VisitorImpl(visitor)}.Visit(file, proto);
  168|      4|}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EC2ES9_:
  149|      4|  explicit VisitorImpl(Visitor visitor) : Visitor(visitor) {}
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJS6_EEEvRKNS0_14FileDescriptorEDpRT_:
  108|      4|  void Visit(const FileDescriptor& descriptor, Proto&... proto) {
  109|      4|    visitor(descriptor, proto...);
  110|     39|    for (int i = 0; i < descriptor.message_type_count(); i++) {
  ------------------
  |  Branch (110:21): [True: 35, False: 4]
  ------------------
  111|     35|      Visit(*descriptor.message_type(i), message_type(proto, i)...);
  112|     35|    }
  113|      5|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (113:21): [True: 1, False: 4]
  ------------------
  114|      1|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
  115|      1|    }
  116|      5|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (116:21): [True: 1, False: 4]
  ------------------
  117|      1|      Visit(*descriptor.extension(i), extension(proto, i)...);
  118|      1|    }
  119|      4|    for (int i = 0; i < descriptor.service_count(); i++) {
  ------------------
  |  Branch (119:21): [True: 0, False: 4]
  ------------------
  120|      0|      Visit(*descriptor.service(i), service(proto, i)...);
  121|      0|    }
  122|      4|  }
descriptor.cc:_ZNK6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EclENSA_15DescriptorEaterESB_:
  159|    169|  void operator()(DescriptorEater, DescriptorEater) const {}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_14FileDescriptorEEEOT_:
  157|      4|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IS6_EEOT_:
  157|      4|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJKNS0_15DescriptorProtoEEEEvRKNS0_10DescriptorEDpRT_:
   66|     45|  void Visit(const Descriptor& descriptor, Proto&... proto) {
   67|     45|    visitor(descriptor, proto...);
   68|       |
   69|     62|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (69:21): [True: 17, False: 45]
  ------------------
   70|     17|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
   71|     17|    }
   72|       |
   73|     47|    for (int i = 0; i < descriptor.oneof_decl_count(); i++) {
  ------------------
  |  Branch (73:21): [True: 2, False: 45]
  ------------------
   74|      2|      Visit(*descriptor.oneof_decl(i), oneof_decl(proto, i)...);
   75|      2|    }
   76|       |
   77|    250|    for (int i = 0; i < descriptor.field_count(); i++) {
  ------------------
  |  Branch (77:21): [True: 205, False: 45]
  ------------------
   78|    205|      Visit(*descriptor.field(i), field(proto, i)...);
   79|    205|    }
   80|       |
   81|     55|    for (int i = 0; i < descriptor.nested_type_count(); i++) {
  ------------------
  |  Branch (81:21): [True: 10, False: 45]
  ------------------
   82|     10|      Visit(*descriptor.nested_type(i), nested_type(proto, i)...);
   83|     10|    }
   84|       |
   85|     45|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (85:21): [True: 0, False: 45]
  ------------------
   86|      0|      Visit(*descriptor.extension(i), extension(proto, i)...);
   87|      0|    }
   88|       |
   89|     59|    for (int i = 0; i < descriptor.extension_range_count(); i++) {
  ------------------
  |  Branch (89:21): [True: 14, False: 45]
  ------------------
   90|     14|      Visit(*descriptor.extension_range(i), extension_range(proto, i)...);
   91|     14|    }
   92|     45|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_10DescriptorEEEOT_:
  157|     45|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_15DescriptorProtoEEEOT_:
  157|     45|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE9enum_typeERKNS0_15DescriptorProtoEi:
  127|     17|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJKNS0_20OneofDescriptorProtoEEEEvRKNS0_15OneofDescriptorEDpRT_:
   61|      2|  void Visit(const OneofDescriptor& descriptor, Proto&... proto) {
   62|      2|    visitor(descriptor, proto...);
   63|      2|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_15OneofDescriptorEEEOT_:
  157|      2|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_20OneofDescriptorProtoEEEOT_:
  157|      2|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE10oneof_declERKNS0_15DescriptorProtoEi:
  127|      2|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5fieldERKNS0_15DescriptorProtoEi:
  127|    205|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE11nested_typeERKNS0_15DescriptorProtoEi:
  127|     10|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJKNS0_30DescriptorProto_ExtensionRangeEEEEvRKNS0_10Descriptor14ExtensionRangeEDpRT_:
   56|     14|  void Visit(const Descriptor::ExtensionRange& descriptor, Proto&... proto) {
   57|     14|    visitor(descriptor, proto...);
   58|     14|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_10Descriptor14ExtensionRangeEEEOT_:
  157|     14|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_30DescriptorProto_ExtensionRangeEEEOT_:
  157|     14|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE15extension_rangeERKNS0_15DescriptorProtoEi:
  127|     14|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE12message_typeES7_i:
  127|     35|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJKNS0_19EnumDescriptorProtoEEEEvRKNS0_14EnumDescriptorEDpRT_:
   48|     18|  void Visit(const EnumDescriptor& descriptor, Proto&... proto) {
   49|     18|    visitor(descriptor, proto...);
   50|    104|    for (int i = 0; i < descriptor.value_count(); i++) {
  ------------------
  |  Branch (50:21): [True: 86, False: 18]
  ------------------
   51|     86|      Visit(*descriptor.value(i), value(proto, i)...);
   52|     86|    }
   53|     18|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_14EnumDescriptorEEEOT_:
  157|     18|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_19EnumDescriptorProtoEEEOT_:
  157|     18|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJKNS0_24EnumValueDescriptorProtoEEEEvRKNS0_19EnumValueDescriptorEDpRT_:
   43|     86|  void Visit(const EnumValueDescriptor& descriptor, Proto&... proto) {
   44|     86|    visitor(descriptor, proto...);
   45|     86|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_19EnumValueDescriptorEEEOT_:
  157|     86|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3E15DescriptorEaterC2IRKNS0_24EnumValueDescriptorProtoEEEOT_:
  157|     86|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5valueERKNS0_19EnumDescriptorProtoEi:
  127|     86|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE9enum_typeES7_i:
  127|      1|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE5VisitIJKNS0_20FieldDescriptorProtoEEEEvRKNS0_15FieldDescriptorEDpRT_:
   38|    206|  void Visit(const FieldDescriptor& descriptor, Proto&... proto) {
   39|    206|    visitor(descriptor, proto...);
   40|    206|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_3EEE9extensionES7_i:
  127|      1|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal16VisitDescriptorsIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEvRKNS0_14FileDescriptorES6_T_:
  165|      4|                      const FileDescriptorProto& proto, Visitor visitor) {
  166|      4|  using VisitorImpl = internal::VisitorImpl<Visitor>;
  167|      4|  internal::VisitImpl<VisitorImpl>{VisitorImpl(visitor)}.Visit(file, proto);
  168|      4|}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EC2ES9_:
  149|      4|  explicit VisitorImpl(Visitor visitor) : Visitor(visitor) {}
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJS6_EEEvRKNS0_14FileDescriptorEDpRT_:
  108|      4|  void Visit(const FileDescriptor& descriptor, Proto&... proto) {
  109|      4|    visitor(descriptor, proto...);
  110|     39|    for (int i = 0; i < descriptor.message_type_count(); i++) {
  ------------------
  |  Branch (110:21): [True: 35, False: 4]
  ------------------
  111|     35|      Visit(*descriptor.message_type(i), message_type(proto, i)...);
  112|     35|    }
  113|      5|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (113:21): [True: 1, False: 4]
  ------------------
  114|      1|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
  115|      1|    }
  116|      5|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (116:21): [True: 1, False: 4]
  ------------------
  117|      1|      Visit(*descriptor.extension(i), extension(proto, i)...);
  118|      1|    }
  119|      4|    for (int i = 0; i < descriptor.service_count(); i++) {
  ------------------
  |  Branch (119:21): [True: 0, False: 4]
  ------------------
  120|      0|      Visit(*descriptor.service(i), service(proto, i)...);
  121|      0|    }
  122|      4|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJKNS0_15DescriptorProtoEEEEvRKNS0_10DescriptorEDpRT_:
   66|     45|  void Visit(const Descriptor& descriptor, Proto&... proto) {
   67|     45|    visitor(descriptor, proto...);
   68|       |
   69|     62|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (69:21): [True: 17, False: 45]
  ------------------
   70|     17|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
   71|     17|    }
   72|       |
   73|     47|    for (int i = 0; i < descriptor.oneof_decl_count(); i++) {
  ------------------
  |  Branch (73:21): [True: 2, False: 45]
  ------------------
   74|      2|      Visit(*descriptor.oneof_decl(i), oneof_decl(proto, i)...);
   75|      2|    }
   76|       |
   77|    250|    for (int i = 0; i < descriptor.field_count(); i++) {
  ------------------
  |  Branch (77:21): [True: 205, False: 45]
  ------------------
   78|    205|      Visit(*descriptor.field(i), field(proto, i)...);
   79|    205|    }
   80|       |
   81|     55|    for (int i = 0; i < descriptor.nested_type_count(); i++) {
  ------------------
  |  Branch (81:21): [True: 10, False: 45]
  ------------------
   82|     10|      Visit(*descriptor.nested_type(i), nested_type(proto, i)...);
   83|     10|    }
   84|       |
   85|     45|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (85:21): [True: 0, False: 45]
  ------------------
   86|      0|      Visit(*descriptor.extension(i), extension(proto, i)...);
   87|      0|    }
   88|       |
   89|     59|    for (int i = 0; i < descriptor.extension_range_count(); i++) {
  ------------------
  |  Branch (89:21): [True: 14, False: 45]
  ------------------
   90|     14|      Visit(*descriptor.extension_range(i), extension_range(proto, i)...);
   91|     14|    }
   92|     45|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE9enum_typeERKNS0_15DescriptorProtoEi:
  127|     17|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJKNS0_20OneofDescriptorProtoEEEEvRKNS0_15OneofDescriptorEDpRT_:
   61|      2|  void Visit(const OneofDescriptor& descriptor, Proto&... proto) {
   62|      2|    visitor(descriptor, proto...);
   63|      2|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE10oneof_declERKNS0_15DescriptorProtoEi:
  127|      2|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5fieldERKNS0_15DescriptorProtoEi:
  127|    205|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE11nested_typeERKNS0_15DescriptorProtoEi:
  127|     10|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJKNS0_30DescriptorProto_ExtensionRangeEEEEvRKNS0_10Descriptor14ExtensionRangeEDpRT_:
   56|     14|  void Visit(const Descriptor::ExtensionRange& descriptor, Proto&... proto) {
   57|     14|    visitor(descriptor, proto...);
   58|     14|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE15extension_rangeERKNS0_15DescriptorProtoEi:
  127|     14|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE12message_typeES7_i:
  127|     35|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJKNS0_19EnumDescriptorProtoEEEEvRKNS0_14EnumDescriptorEDpRT_:
   48|     18|  void Visit(const EnumDescriptor& descriptor, Proto&... proto) {
   49|     18|    visitor(descriptor, proto...);
   50|    104|    for (int i = 0; i < descriptor.value_count(); i++) {
  ------------------
  |  Branch (50:21): [True: 86, False: 18]
  ------------------
   51|     86|      Visit(*descriptor.value(i), value(proto, i)...);
   52|     86|    }
   53|     18|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJKNS0_24EnumValueDescriptorProtoEEEEvRKNS0_19EnumValueDescriptorEDpRT_:
   43|     86|  void Visit(const EnumValueDescriptor& descriptor, Proto&... proto) {
   44|     86|    visitor(descriptor, proto...);
   45|     86|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5valueERKNS0_19EnumDescriptorProtoEi:
  127|     86|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE9enum_typeES7_i:
  127|      1|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE5VisitIJKNS0_20FieldDescriptorProtoEEEEvRKNS0_15FieldDescriptorEDpRT_:
   38|    206|  void Visit(const FieldDescriptor& descriptor, Proto&... proto) {
   39|    206|    visitor(descriptor, proto...);
   40|    206|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_4EEE9extensionES7_i:
  127|      1|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal16VisitDescriptorsIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEvRKNS0_14FileDescriptorET_:
  178|      4|void VisitDescriptors(const FileDescriptor& file, Visitor visitor) {
  179|      4|  using VisitorImpl = internal::VisitorImpl<Visitor>;
  180|      4|  internal::VisitImpl<VisitorImpl>{VisitorImpl(visitor)}.Visit(file);
  181|      4|}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EC2ES9_:
  149|      4|  explicit VisitorImpl(Visitor visitor) : Visitor(visitor) {}
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_14FileDescriptorEDpRT_:
  108|      4|  void Visit(const FileDescriptor& descriptor, Proto&... proto) {
  109|      4|    visitor(descriptor, proto...);
  110|     39|    for (int i = 0; i < descriptor.message_type_count(); i++) {
  ------------------
  |  Branch (110:21): [True: 35, False: 4]
  ------------------
  111|     35|      Visit(*descriptor.message_type(i), message_type(proto, i)...);
  112|     35|    }
  113|      5|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (113:21): [True: 1, False: 4]
  ------------------
  114|      1|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
  115|      1|    }
  116|      5|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (116:21): [True: 1, False: 4]
  ------------------
  117|      1|      Visit(*descriptor.extension(i), extension(proto, i)...);
  118|      1|    }
  119|      4|    for (int i = 0; i < descriptor.service_count(); i++) {
  ------------------
  |  Branch (119:21): [True: 0, False: 4]
  ------------------
  120|      0|      Visit(*descriptor.service(i), service(proto, i)...);
  121|      0|    }
  122|      4|  }
descriptor.cc:_ZNK6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EclENSA_15DescriptorEaterE:
  160|    169|  void operator()(DescriptorEater) const {}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5E15DescriptorEaterC2IRKNS0_14FileDescriptorEEEOT_:
  157|      4|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_10DescriptorEDpRT_:
   66|     45|  void Visit(const Descriptor& descriptor, Proto&... proto) {
   67|     45|    visitor(descriptor, proto...);
   68|       |
   69|     62|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (69:21): [True: 17, False: 45]
  ------------------
   70|     17|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
   71|     17|    }
   72|       |
   73|     47|    for (int i = 0; i < descriptor.oneof_decl_count(); i++) {
  ------------------
  |  Branch (73:21): [True: 2, False: 45]
  ------------------
   74|      2|      Visit(*descriptor.oneof_decl(i), oneof_decl(proto, i)...);
   75|      2|    }
   76|       |
   77|    250|    for (int i = 0; i < descriptor.field_count(); i++) {
  ------------------
  |  Branch (77:21): [True: 205, False: 45]
  ------------------
   78|    205|      Visit(*descriptor.field(i), field(proto, i)...);
   79|    205|    }
   80|       |
   81|     55|    for (int i = 0; i < descriptor.nested_type_count(); i++) {
  ------------------
  |  Branch (81:21): [True: 10, False: 45]
  ------------------
   82|     10|      Visit(*descriptor.nested_type(i), nested_type(proto, i)...);
   83|     10|    }
   84|       |
   85|     45|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (85:21): [True: 0, False: 45]
  ------------------
   86|      0|      Visit(*descriptor.extension(i), extension(proto, i)...);
   87|      0|    }
   88|       |
   89|     59|    for (int i = 0; i < descriptor.extension_range_count(); i++) {
  ------------------
  |  Branch (89:21): [True: 14, False: 45]
  ------------------
   90|     14|      Visit(*descriptor.extension_range(i), extension_range(proto, i)...);
   91|     14|    }
   92|     45|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5E15DescriptorEaterC2IRKNS0_10DescriptorEEEOT_:
  157|     45|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_15OneofDescriptorEDpRT_:
   61|      2|  void Visit(const OneofDescriptor& descriptor, Proto&... proto) {
   62|      2|    visitor(descriptor, proto...);
   63|      2|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5E15DescriptorEaterC2IRKNS0_15OneofDescriptorEEEOT_:
  157|      2|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_10Descriptor14ExtensionRangeEDpRT_:
   56|     14|  void Visit(const Descriptor::ExtensionRange& descriptor, Proto&... proto) {
   57|     14|    visitor(descriptor, proto...);
   58|     14|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5E15DescriptorEaterC2IRKNS0_10Descriptor14ExtensionRangeEEEOT_:
  157|     14|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_14EnumDescriptorEDpRT_:
   48|     18|  void Visit(const EnumDescriptor& descriptor, Proto&... proto) {
   49|     18|    visitor(descriptor, proto...);
   50|    104|    for (int i = 0; i < descriptor.value_count(); i++) {
  ------------------
  |  Branch (50:21): [True: 86, False: 18]
  ------------------
   51|     86|      Visit(*descriptor.value(i), value(proto, i)...);
   52|     86|    }
   53|     18|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5E15DescriptorEaterC2IRKNS0_14EnumDescriptorEEEOT_:
  157|     18|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_19EnumValueDescriptorEDpRT_:
   43|     86|  void Visit(const EnumValueDescriptor& descriptor, Proto&... proto) {
   44|     86|    visitor(descriptor, proto...);
   45|     86|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5E15DescriptorEaterC2IRKNS0_19EnumValueDescriptorEEEOT_:
  157|     86|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_5EEE5VisitIJEEEvRKNS0_15FieldDescriptorEDpRT_:
   38|    206|  void Visit(const FieldDescriptor& descriptor, Proto&... proto) {
   39|    206|    visitor(descriptor, proto...);
   40|    206|  }
descriptor.cc:_ZN6google8protobuf8internal16VisitDescriptorsIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEvRKNS0_14FileDescriptorES6_T_:
  165|      4|                      const FileDescriptorProto& proto, Visitor visitor) {
  166|      4|  using VisitorImpl = internal::VisitorImpl<Visitor>;
  167|      4|  internal::VisitImpl<VisitorImpl>{VisitorImpl(visitor)}.Visit(file, proto);
  168|      4|}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EC2ES9_:
  149|      4|  explicit VisitorImpl(Visitor visitor) : Visitor(visitor) {}
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJS6_EEEvRKNS0_14FileDescriptorEDpRT_:
  108|      4|  void Visit(const FileDescriptor& descriptor, Proto&... proto) {
  109|      4|    visitor(descriptor, proto...);
  110|     39|    for (int i = 0; i < descriptor.message_type_count(); i++) {
  ------------------
  |  Branch (110:21): [True: 35, False: 4]
  ------------------
  111|     35|      Visit(*descriptor.message_type(i), message_type(proto, i)...);
  112|     35|    }
  113|      5|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (113:21): [True: 1, False: 4]
  ------------------
  114|      1|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
  115|      1|    }
  116|      5|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (116:21): [True: 1, False: 4]
  ------------------
  117|      1|      Visit(*descriptor.extension(i), extension(proto, i)...);
  118|      1|    }
  119|      4|    for (int i = 0; i < descriptor.service_count(); i++) {
  ------------------
  |  Branch (119:21): [True: 0, False: 4]
  ------------------
  120|      0|      Visit(*descriptor.service(i), service(proto, i)...);
  121|      0|    }
  122|      4|  }
descriptor.cc:_ZNK6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EclENSA_15DescriptorEaterESB_:
  159|    169|  void operator()(DescriptorEater, DescriptorEater) const {}
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_14FileDescriptorEEEOT_:
  157|      4|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IS6_EEOT_:
  157|      4|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJKNS0_15DescriptorProtoEEEEvRKNS0_10DescriptorEDpRT_:
   66|     45|  void Visit(const Descriptor& descriptor, Proto&... proto) {
   67|     45|    visitor(descriptor, proto...);
   68|       |
   69|     62|    for (int i = 0; i < descriptor.enum_type_count(); i++) {
  ------------------
  |  Branch (69:21): [True: 17, False: 45]
  ------------------
   70|     17|      Visit(*descriptor.enum_type(i), enum_type(proto, i)...);
   71|     17|    }
   72|       |
   73|     47|    for (int i = 0; i < descriptor.oneof_decl_count(); i++) {
  ------------------
  |  Branch (73:21): [True: 2, False: 45]
  ------------------
   74|      2|      Visit(*descriptor.oneof_decl(i), oneof_decl(proto, i)...);
   75|      2|    }
   76|       |
   77|    250|    for (int i = 0; i < descriptor.field_count(); i++) {
  ------------------
  |  Branch (77:21): [True: 205, False: 45]
  ------------------
   78|    205|      Visit(*descriptor.field(i), field(proto, i)...);
   79|    205|    }
   80|       |
   81|     55|    for (int i = 0; i < descriptor.nested_type_count(); i++) {
  ------------------
  |  Branch (81:21): [True: 10, False: 45]
  ------------------
   82|     10|      Visit(*descriptor.nested_type(i), nested_type(proto, i)...);
   83|     10|    }
   84|       |
   85|     45|    for (int i = 0; i < descriptor.extension_count(); i++) {
  ------------------
  |  Branch (85:21): [True: 0, False: 45]
  ------------------
   86|      0|      Visit(*descriptor.extension(i), extension(proto, i)...);
   87|      0|    }
   88|       |
   89|     59|    for (int i = 0; i < descriptor.extension_range_count(); i++) {
  ------------------
  |  Branch (89:21): [True: 14, False: 45]
  ------------------
   90|     14|      Visit(*descriptor.extension_range(i), extension_range(proto, i)...);
   91|     14|    }
   92|     45|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_10DescriptorEEEOT_:
  157|     45|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_15DescriptorProtoEEEOT_:
  157|     45|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE9enum_typeERKNS0_15DescriptorProtoEi:
  127|     17|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJKNS0_20OneofDescriptorProtoEEEEvRKNS0_15OneofDescriptorEDpRT_:
   61|      2|  void Visit(const OneofDescriptor& descriptor, Proto&... proto) {
   62|      2|    visitor(descriptor, proto...);
   63|      2|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_15OneofDescriptorEEEOT_:
  157|      2|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_20OneofDescriptorProtoEEEOT_:
  157|      2|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE10oneof_declERKNS0_15DescriptorProtoEi:
  127|      2|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5fieldERKNS0_15DescriptorProtoEi:
  127|    205|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE11nested_typeERKNS0_15DescriptorProtoEi:
  127|     10|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJKNS0_30DescriptorProto_ExtensionRangeEEEEvRKNS0_10Descriptor14ExtensionRangeEDpRT_:
   56|     14|  void Visit(const Descriptor::ExtensionRange& descriptor, Proto&... proto) {
   57|     14|    visitor(descriptor, proto...);
   58|     14|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_10Descriptor14ExtensionRangeEEEOT_:
  157|     14|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_30DescriptorProto_ExtensionRangeEEEOT_:
  157|     14|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE15extension_rangeERKNS0_15DescriptorProtoEi:
  127|     14|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE12message_typeES7_i:
  127|     35|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJKNS0_19EnumDescriptorProtoEEEEvRKNS0_14EnumDescriptorEDpRT_:
   48|     18|  void Visit(const EnumDescriptor& descriptor, Proto&... proto) {
   49|     18|    visitor(descriptor, proto...);
   50|    104|    for (int i = 0; i < descriptor.value_count(); i++) {
  ------------------
  |  Branch (50:21): [True: 86, False: 18]
  ------------------
   51|     86|      Visit(*descriptor.value(i), value(proto, i)...);
   52|     86|    }
   53|     18|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_14EnumDescriptorEEEOT_:
  157|     18|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_19EnumDescriptorProtoEEEOT_:
  157|     18|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJKNS0_24EnumValueDescriptorProtoEEEEvRKNS0_19EnumValueDescriptorEDpRT_:
   43|     86|  void Visit(const EnumValueDescriptor& descriptor, Proto&... proto) {
   44|     86|    visitor(descriptor, proto...);
   45|     86|  }
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_19EnumValueDescriptorEEEOT_:
  157|     86|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6E15DescriptorEaterC2IRKNS0_24EnumValueDescriptorProtoEEEOT_:
  157|     86|    DescriptorEater(T&&) {}  // NOLINT
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5valueERKNS0_19EnumDescriptorProtoEi:
  127|     86|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE9enum_typeES7_i:
  127|      1|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE5VisitIJKNS0_20FieldDescriptorProtoEEEEvRKNS0_15FieldDescriptorEDpRT_:
   38|    206|  void Visit(const FieldDescriptor& descriptor, Proto&... proto) {
   39|    206|    visitor(descriptor, proto...);
   40|    206|  }
descriptor.cc:_ZN6google8protobuf8internal9VisitImplINS1_11VisitorImplIZNS0_17DescriptorBuilder13BuildFileImplERKNS0_19FileDescriptorProtoERNS1_13FlatAllocatorEE3$_6EEE9extensionES7_i:
  127|      1|  inline auto& NESTED(const TYPE& desc, int i) { return desc.NESTED(i); }

_ZN6google8protobuf21DynamicMessageFactoryC2Ev:
  644|      6|    : pool_(nullptr), delegate_to_generated_factory_(false) {}
_ZN6google8protobuf21DynamicMessageFactoryD2Ev:
  649|      4|DynamicMessageFactory::~DynamicMessageFactory() {
  650|      4|  for (auto iter = prototypes_.begin(); iter != prototypes_.end(); ++iter) {
  ------------------
  |  Branch (650:41): [True: 0, False: 4]
  ------------------
  651|      0|    delete iter->second;
  652|      0|  }
  653|      4|}

_ZN6google8protobuf21DynamicMessageFactory29SetDelegateToGeneratedFactoryEb:
   94|      2|  void SetDelegateToGeneratedFactory(bool enable) {
   95|      2|    delegate_to_generated_factory_ = enable;
   96|      2|  }

_ZN6google8protobuf8internal13little_endian6ToHostEt:
   93|  3.41k|inline uint16_t ToHost(uint16_t value) {
   94|       |#if defined(ABSL_IS_BIG_ENDIAN)
   95|       |  return BSwap16(value);
   96|       |#else
   97|  3.41k|  return value;
   98|  3.41k|#endif
   99|  3.41k|}

_ZN6google8protobuf8internal21ExplicitlyConstructedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEELm8EE16DefaultConstructEv:
   40|      2|  void DefaultConstruct() { new (&union_) T(); }
_ZN6google8protobuf8internal21ExplicitlyConstructedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEELm8EE11get_mutableEv:
   50|      2|  T* get_mutable() { return reinterpret_cast<T*>(&union_); }

_ZN6google8protobuf8internal24GeneratedExtensionFinder4FindEiPNS1_13ExtensionInfoE:
  118|      8|bool GeneratedExtensionFinder::Find(int number, ExtensionInfo* output) {
  119|      8|  const ExtensionInfo* extension = FindRegisteredExtension(extendee_, number);
  120|      8|  if (extension == nullptr) {
  ------------------
  |  Branch (120:7): [True: 0, False: 8]
  ------------------
  121|      0|    return false;
  122|      8|  } else {
  123|      8|    *output = *extension;
  124|      8|    return true;
  125|      8|  }
  126|      8|}
_ZN6google8protobuf8internal12ExtensionSet24RegisterMessageExtensionEPKNS0_11MessageLiteEihbbS5_PFPKcS7_PNS1_12ParseContextEENS1_14LazyAnnotationE:
  168|      1|                                            LazyAnnotation is_lazy) {
  169|      1|  ABSL_CHECK(type == WireFormatLite::TYPE_MESSAGE ||
  ------------------
  |  |   41|      1|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      2|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      1|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      2|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      2|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      1|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      3|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 1]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      2|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      2|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  170|      1|             type == WireFormatLite::TYPE_GROUP);
  171|      1|  ExtensionInfo info(extendee, number, type, is_repeated, is_packed,
  172|      1|                     verify_func, is_lazy);
  173|      1|  info.message_info = {prototype,
  174|      1|#if defined(PROTOBUF_CONSTINIT_DEFAULT_INSTANCES)
  175|      1|                       prototype->GetTcParseTable()
  176|       |#else
  177|       |                       nullptr
  178|       |#endif
  179|      1|  };
  180|      1|  Register(info);
  181|      1|}
_ZN6google8protobuf8internal12ExtensionSetD2Ev:
  186|    851|ExtensionSet::~ExtensionSet() {
  187|       |  // Deletes all allocated extensions.
  188|    851|  if (arena_ == nullptr) {
  ------------------
  |  Branch (188:7): [True: 851, False: 0]
  ------------------
  189|    851|    ForEach([](int /* number */, Extension& ext) { ext.Free(); },
  190|    851|            PrefetchNta{});
  191|    851|    if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|    851|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 851]
  |  |  |  Branch (365:54): [Folded, False: 851]
  |  |  |  Branch (365:63): [True: 0, False: 851]
  |  |  ------------------
  ------------------
  192|      0|      delete map_.large;
  193|    851|    } else {
  194|    851|      DeleteFlatMap(map_.flat, flat_capacity_);
  195|    851|    }
  196|    851|  }
  197|    851|}
_ZN6google8protobuf8internal12ExtensionSet13DeleteFlatMapEPKNS2_8KeyValueEt:
  200|    851|                                 uint16_t flat_capacity) {
  201|       |  // Arena::CreateArray already requires a trivially destructible type, but
  202|       |  // ensure this constraint is not violated in the future.
  203|    851|  static_assert(std::is_trivially_destructible<KeyValue>::value,
  204|    851|                "CreateArray requires a trivially destructible type");
  205|       |  // A const-cast is needed, but this is safe as we are about to deallocate the
  206|       |  // array.
  207|    851|  internal::SizedArrayDelete(const_cast<KeyValue*>(flat),
  208|    851|                             sizeof(*flat) * flat_capacity);
  209|    851|}
_ZNK6google8protobuf8internal12ExtensionSet10GetMessageEiRKNS0_11MessageLiteE:
  633|  18.1k|    int number, const MessageLite& default_value) const {
  634|  18.1k|  const Extension* extension = FindOrNull(number);
  635|  18.1k|  if (extension == nullptr) {
  ------------------
  |  Branch (635:7): [True: 0, False: 18.1k]
  ------------------
  636|       |    // Not present.  Return the default value.
  637|      0|    return default_value;
  638|  18.1k|  } else {
  639|  18.1k|    ABSL_DCHECK_TYPE(*extension, OPTIONAL_FIELD, MESSAGE);
  ------------------
  |  |  272|  18.1k|  ABSL_DCHECK_EQ((EXTENSION).is_repeated ? REPEATED_FIELD : OPTIONAL_FIELD, \
  |  |  ------------------
  |  |  |  |   74|  18.1k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|  18.1k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  18.1k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 18.1k]
  |  |  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (56:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|  18.1k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  273|  18.1k|                 LABEL);                                                    \
  |  |  274|  18.1k|  ABSL_DCHECK_EQ(cpp_type((EXTENSION).type), WireFormatLite::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  |  |  |  |   74|  18.1k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|  18.1k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|  18.1k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 18.1k]
  |  |  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|  18.1k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  640|  18.1k|    if (extension->is_lazy) {
  ------------------
  |  Branch (640:9): [True: 0, False: 18.1k]
  ------------------
  641|      0|      return extension->ptr.lazymessage_value->GetMessage(default_value,
  642|      0|                                                          arena_);
  643|  18.1k|    } else {
  644|  18.1k|      return *extension->ptr.message_value;
  645|  18.1k|    }
  646|  18.1k|  }
  647|  18.1k|}
_ZN6google8protobuf8internal12ExtensionSet14MutableMessageEihRKNS0_11MessageLiteEPKNS0_15FieldDescriptorE:
  656|    214|                                          const FieldDescriptor* descriptor) {
  657|    214|  Extension* extension;
  658|    214|  if (MaybeNewExtension(number, descriptor, &extension)) {
  ------------------
  |  Branch (658:7): [True: 214, False: 0]
  ------------------
  659|    214|    extension->type = type;
  660|    214|    ABSL_DCHECK_EQ(cpp_type(extension->type), WireFormatLite::CPPTYPE_MESSAGE);
  ------------------
  |  |   74|    214|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    214|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    214|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 214]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    214|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  661|    214|    extension->is_repeated = false;
  662|    214|    extension->is_pointer = true;
  663|    214|    extension->is_lazy = false;
  664|    214|    extension->ptr.message_value = prototype.New(arena_);
  665|    214|    extension->is_cleared = false;
  666|    214|    return extension->ptr.message_value;
  667|    214|  } else {
  668|      0|    ABSL_DCHECK_TYPE(*extension, OPTIONAL_FIELD, MESSAGE);
  ------------------
  |  |  272|      0|  ABSL_DCHECK_EQ((EXTENSION).is_repeated ? REPEATED_FIELD : OPTIONAL_FIELD, \
  |  |  ------------------
  |  |  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (56:27): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  273|      0|                 LABEL);                                                    \
  |  |  274|      0|  ABSL_DCHECK_EQ(cpp_type((EXTENSION).type), WireFormatLite::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  |  |  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   86|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  669|      0|    extension->is_cleared = false;
  670|      0|    if (extension->is_lazy) {
  ------------------
  |  Branch (670:9): [True: 0, False: 0]
  ------------------
  671|      0|      return extension->ptr.lazymessage_value->MutableMessage(prototype,
  672|      0|                                                              arena_);
  673|      0|    } else {
  674|      0|      return extension->ptr.message_value;
  675|      0|    }
  676|      0|  }
  677|    214|}
_ZN6google8protobuf8internal12ExtensionSet5ClearEv:
  959|     19|void ExtensionSet::Clear() {
  960|     19|  ForEach([](int /* number */, Extension& ext) { ext.Clear(); }, Prefetch{});
  961|     19|}
_ZN6google8protobuf8internal12ExtensionSet9MergeFromEPKNS0_11MessageLiteERKS2_:
  998|  1.04k|                             const ExtensionSet& other) {
  999|  1.04k|  Prefetch5LinesFrom1Line(&other);
 1000|  1.04k|  if (PROTOBUF_PREDICT_TRUE(!is_large())) {
  ------------------
  |  |  364|  1.04k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 1.04k, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 1.04k]
  |  |  |  Branch (364:62): [True: 1.04k, False: 0]
  |  |  ------------------
  ------------------
 1001|  1.04k|    if (PROTOBUF_PREDICT_TRUE(!other.is_large())) {
  ------------------
  |  |  364|  1.04k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 1.04k, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 1.04k]
  |  |  |  Branch (364:62): [True: 1.04k, False: 0]
  |  |  ------------------
  ------------------
 1002|  1.04k|      GrowCapacity(SizeOfUnion(flat_begin(), flat_end(), other.flat_begin(),
 1003|  1.04k|                               other.flat_end()));
 1004|  1.04k|    } else {
 1005|      0|      GrowCapacity(SizeOfUnion(flat_begin(), flat_end(),
 1006|      0|                               other.map_.large->begin(),
 1007|      0|                               other.map_.large->end()));
 1008|      0|    }
 1009|  1.04k|  }
 1010|  1.04k|  other.ForEach(
 1011|  1.04k|      [extendee, this, &other](int number, const Extension& ext) {
 1012|  1.04k|        this->InternalExtensionMergeFrom(extendee, number, ext, other.arena_);
 1013|  1.04k|      },
 1014|  1.04k|      Prefetch{});
 1015|  1.04k|}
_ZN6google8protobuf8internal12ExtensionSet26InternalExtensionMergeFromEPKNS0_11MessageLiteEiRKNS2_9ExtensionEPNS0_5ArenaE:
 1020|    662|                                              Arena* other_arena) {
 1021|    662|  if (other_extension.is_repeated) {
  ------------------
  |  Branch (1021:7): [True: 0, False: 662]
  ------------------
 1022|      0|    Extension* extension;
 1023|      0|    bool is_new =
 1024|      0|        MaybeNewExtension(number, other_extension.descriptor, &extension);
 1025|      0|    if (is_new) {
  ------------------
  |  Branch (1025:9): [True: 0, False: 0]
  ------------------
 1026|       |      // Extension did not already exist in set.
 1027|      0|      extension->type = other_extension.type;
 1028|      0|      extension->is_packed = other_extension.is_packed;
 1029|      0|      extension->is_repeated = true;
 1030|      0|      extension->is_pointer = true;
 1031|      0|    } else {
 1032|      0|      ABSL_DCHECK_EQ(extension->type, other_extension.type);
  ------------------
  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1033|      0|      ABSL_DCHECK_EQ(extension->is_packed, other_extension.is_packed);
  ------------------
  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1034|      0|      ABSL_DCHECK(extension->is_repeated);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1035|      0|    }
 1036|       |
 1037|      0|    switch (cpp_type(other_extension.type)) {
  ------------------
  |  Branch (1037:13): [True: 0, False: 0]
  ------------------
 1038|      0|#define HANDLE_TYPE(UPPERCASE, LOWERCASE, REPEATED_TYPE)    \
 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
 1040|      0|    if (is_new) {                                           \
 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
 1043|      0|    }                                                       \
 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
 1046|      0|    break;
 1047|       |
 1048|      0|      HANDLE_TYPE(INT32, int32_t, RepeatedField<int32_t>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1049|      0|      HANDLE_TYPE(INT64, int64_t, RepeatedField<int64_t>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1050|      0|      HANDLE_TYPE(UINT32, uint32_t, RepeatedField<uint32_t>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1051|      0|      HANDLE_TYPE(UINT64, uint64_t, RepeatedField<uint64_t>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1052|      0|      HANDLE_TYPE(FLOAT, float, RepeatedField<float>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1053|      0|      HANDLE_TYPE(DOUBLE, double, RepeatedField<double>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1054|      0|      HANDLE_TYPE(BOOL, bool, RepeatedField<bool>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1055|      0|      HANDLE_TYPE(ENUM, enum, RepeatedField<int>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1056|      0|      HANDLE_TYPE(STRING, string, RepeatedPtrField<std::string>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1057|      0|      HANDLE_TYPE(MESSAGE, message, RepeatedPtrField<MessageLite>);
  ------------------
  |  | 1039|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1039:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1040|      0|    if (is_new) {                                           \
  |  |  ------------------
  |  |  |  Branch (1040:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 1041|      0|      extension->ptr.repeated_##LOWERCASE##_value =         \
  |  | 1042|      0|          Arena::Create<REPEATED_TYPE>(arena_);             \
  |  | 1043|      0|    }                                                       \
  |  | 1044|      0|    extension->ptr.repeated_##LOWERCASE##_value->MergeFrom( \
  |  | 1045|      0|        *other_extension.ptr.repeated_##LOWERCASE##_value); \
  |  | 1046|      0|    break;
  ------------------
 1058|      0|#undef HANDLE_TYPE
 1059|      0|    }
 1060|    662|  } else {
 1061|    662|    if (!other_extension.is_cleared) {
  ------------------
  |  Branch (1061:9): [True: 662, False: 0]
  ------------------
 1062|    662|      switch (cpp_type(other_extension.type)) {
  ------------------
  |  Branch (1062:15): [True: 662, False: 0]
  ------------------
 1063|      0|#define HANDLE_TYPE(UPPERCASE, LOWERCASE, CAMELCASE)  \
 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
 1066|      0|                   other_extension.LOWERCASE##_value, \
 1067|      0|                   other_extension.descriptor);       \
 1068|      0|    break;
 1069|       |
 1070|      0|        HANDLE_TYPE(INT32, int32_t, Int32);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 662]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1071|      0|        HANDLE_TYPE(INT64, int64_t, Int64);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 662]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1072|      0|        HANDLE_TYPE(UINT32, uint32_t, UInt32);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 662]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1073|      0|        HANDLE_TYPE(UINT64, uint64_t, UInt64);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 662]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1074|      0|        HANDLE_TYPE(FLOAT, float, Float);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 662]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1075|      0|        HANDLE_TYPE(DOUBLE, double, Double);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 662]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1076|      0|        HANDLE_TYPE(BOOL, bool, Bool);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 662]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1077|      0|        HANDLE_TYPE(ENUM, enum, Enum);
  ------------------
  |  | 1064|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:           \
  |  |  ------------------
  |  |  |  Branch (1064:3): [True: 0, False: 662]
  |  |  ------------------
  |  | 1065|      0|    Set##CAMELCASE(number, other_extension.type,      \
  |  | 1066|      0|                   other_extension.LOWERCASE##_value, \
  |  | 1067|      0|                   other_extension.descriptor);       \
  |  | 1068|      0|    break;
  ------------------
 1078|      0|#undef HANDLE_TYPE
 1079|      0|        case WireFormatLite::CPPTYPE_STRING:
  ------------------
  |  Branch (1079:9): [True: 0, False: 662]
  ------------------
 1080|      0|          SetString(number, other_extension.type,
 1081|      0|                    *other_extension.ptr.string_value,
 1082|      0|                    other_extension.descriptor);
 1083|      0|          break;
 1084|    662|        case WireFormatLite::CPPTYPE_MESSAGE: {
  ------------------
  |  Branch (1084:9): [True: 662, False: 0]
  ------------------
 1085|    662|          Arena* const arena = arena_;
 1086|    662|          Extension* extension;
 1087|    662|          bool is_new =
 1088|    662|              MaybeNewExtension(number, other_extension.descriptor, &extension);
 1089|    662|          if (is_new) {
  ------------------
  |  Branch (1089:15): [True: 230, False: 432]
  ------------------
 1090|    230|            extension->type = other_extension.type;
 1091|    230|            extension->is_packed = other_extension.is_packed;
 1092|    230|            extension->is_repeated = false;
 1093|    230|            extension->is_pointer = true;
 1094|    230|            if (other_extension.is_lazy) {
  ------------------
  |  Branch (1094:17): [True: 0, False: 230]
  ------------------
 1095|      0|              extension->is_lazy = true;
 1096|      0|              extension->ptr.lazymessage_value =
 1097|      0|                  other_extension.ptr.lazymessage_value->New(arena);
 1098|      0|              extension->ptr.lazymessage_value->MergeFrom(
 1099|      0|                  GetPrototypeForLazyMessage(extendee, number),
 1100|      0|                  *other_extension.ptr.lazymessage_value, arena, other_arena);
 1101|    230|            } else {
 1102|    230|              extension->is_lazy = false;
 1103|    230|              extension->ptr.message_value =
 1104|    230|                  other_extension.ptr.message_value->New(arena);
 1105|    230|              extension->ptr.message_value->CheckTypeAndMergeFrom(
 1106|    230|                  *other_extension.ptr.message_value);
 1107|    230|            }
 1108|    432|          } else {
 1109|    432|            ABSL_DCHECK_EQ(extension->type, other_extension.type);
  ------------------
  |  |   74|    432|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    432|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    432|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 432]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    432|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1110|    432|            ABSL_DCHECK_EQ(extension->is_packed, other_extension.is_packed);
  ------------------
  |  |   74|    432|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    432|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    432|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 432]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    432|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1111|    432|            ABSL_DCHECK(!extension->is_repeated);
  ------------------
  |  |   47|    432|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    432|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    864|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    432|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    864|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    864|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 432, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    432|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 432]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    432|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 432, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    864|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    864|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1112|    432|            if (other_extension.is_lazy) {
  ------------------
  |  Branch (1112:17): [True: 0, False: 432]
  ------------------
 1113|      0|              if (extension->is_lazy) {
  ------------------
  |  Branch (1113:19): [True: 0, False: 0]
  ------------------
 1114|      0|                extension->ptr.lazymessage_value->MergeFrom(
 1115|      0|                    GetPrototypeForLazyMessage(extendee, number),
 1116|      0|                    *other_extension.ptr.lazymessage_value, arena, other_arena);
 1117|      0|              } else {
 1118|      0|                extension->ptr.message_value->CheckTypeAndMergeFrom(
 1119|      0|                    other_extension.ptr.lazymessage_value->GetMessage(
 1120|      0|                        *extension->ptr.message_value, other_arena));
 1121|      0|              }
 1122|    432|            } else {
 1123|    432|              if (extension->is_lazy) {
  ------------------
  |  Branch (1123:19): [True: 0, False: 432]
  ------------------
 1124|      0|                extension->ptr.lazymessage_value
 1125|      0|                    ->MutableMessage(*other_extension.ptr.message_value, arena)
 1126|      0|                    ->CheckTypeAndMergeFrom(*other_extension.ptr.message_value);
 1127|    432|              } else {
 1128|    432|                extension->ptr.message_value->CheckTypeAndMergeFrom(
 1129|    432|                    *other_extension.ptr.message_value);
 1130|    432|              }
 1131|    432|            }
 1132|    432|          }
 1133|    662|          extension->is_cleared = false;
 1134|    662|          break;
 1135|    662|        }
 1136|    662|      }
 1137|    662|    }
 1138|    662|  }
 1139|    662|}
_ZN6google8protobuf8internal12ExtensionSet12InternalSwapEPS2_:
 1157|    230|void ExtensionSet::InternalSwap(ExtensionSet* other) {
 1158|    230|  using std::swap;
 1159|    230|  swap(arena_, other->arena_);
 1160|    230|  swap(flat_capacity_, other->flat_capacity_);
 1161|    230|  swap(flat_size_, other->flat_size_);
 1162|    230|  swap(map_, other->map_);
 1163|    230|}
_ZNK6google8protobuf8internal12ExtensionSet13IsInitializedEPKNS0_11MessageLiteE:
 1227|     85|bool ExtensionSet::IsInitialized(const MessageLite* extendee) const {
 1228|       |  // Extensions are never required.  However, we need to check that all
 1229|       |  // embedded messages are initialized.
 1230|     85|  Arena* const arena = arena_;
 1231|     85|  if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|     85|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 85]
  |  |  |  Branch (365:54): [Folded, False: 85]
  |  |  |  Branch (365:63): [True: 0, False: 85]
  |  |  ------------------
  ------------------
 1232|      0|    for (const auto& kv : *map_.large) {
  ------------------
  |  Branch (1232:25): [True: 0, False: 0]
  ------------------
 1233|      0|      if (!kv.second.IsInitialized(this, extendee, kv.first, arena)) {
  ------------------
  |  Branch (1233:11): [True: 0, False: 0]
  ------------------
 1234|      0|        return false;
 1235|      0|      }
 1236|      0|    }
 1237|      0|    return true;
 1238|      0|  }
 1239|     93|  for (const KeyValue* it = flat_begin(); it != flat_end(); ++it) {
  ------------------
  |  Branch (1239:43): [True: 8, False: 85]
  ------------------
 1240|      8|    if (!it->second.IsInitialized(this, extendee, it->first, arena)) {
  ------------------
  |  Branch (1240:9): [True: 0, False: 8]
  ------------------
 1241|      0|      return false;
 1242|      0|    }
 1243|      8|  }
 1244|     85|  return true;
 1245|     85|}
_ZNK6google8protobuf8internal12ExtensionSet22_InternalSerializeImplEPKNS0_11MessageLiteEiiPhPNS0_2io19EpsCopyOutputStreamE:
 1280|    210|    uint8_t* target, io::EpsCopyOutputStream* stream) const {
 1281|    210|  if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|    210|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 210]
  |  |  |  Branch (365:54): [Folded, False: 210]
  |  |  |  Branch (365:63): [True: 0, False: 210]
  |  |  ------------------
  ------------------
 1282|      0|    const auto& end = map_.large->end();
 1283|      0|    for (auto it = map_.large->lower_bound(start_field_number);
 1284|      0|         it != end && it->first < end_field_number; ++it) {
  ------------------
  |  Branch (1284:10): [True: 0, False: 0]
  |  Branch (1284:23): [True: 0, False: 0]
  ------------------
 1285|      0|      target = it->second.InternalSerializeFieldWithCachedSizesToArray(
 1286|      0|          extendee, this, it->first, target, stream);
 1287|      0|    }
 1288|      0|    return target;
 1289|      0|  }
 1290|    210|  const KeyValue* end = flat_end();
 1291|    210|  const KeyValue* it = flat_begin();
 1292|    210|  while (it != end && it->first < start_field_number) ++it;
  ------------------
  |  Branch (1292:10): [True: 210, False: 0]
  |  Branch (1292:23): [True: 0, False: 210]
  ------------------
 1293|    420|  for (; it != end && it->first < end_field_number; ++it) {
  ------------------
  |  Branch (1293:10): [True: 210, False: 210]
  |  Branch (1293:23): [True: 210, False: 0]
  ------------------
 1294|    210|    target = it->second.InternalSerializeFieldWithCachedSizesToArray(
 1295|    210|        extendee, this, it->first, target, stream);
 1296|    210|  }
 1297|    210|  return target;
 1298|    210|}
_ZNK6google8protobuf8internal12ExtensionSet8ByteSizeEv:
 1314|    604|size_t ExtensionSet::ByteSize() const {
 1315|    604|  size_t total_size = 0;
 1316|    604|  ForEach(
 1317|    604|      [&total_size](int number, const Extension& ext) {
 1318|    604|        total_size += ext.ByteSize(number);
 1319|    604|      },
 1320|    604|      Prefetch{});
 1321|    604|  return total_size;
 1322|    604|}
_ZN6google8protobuf8internal12ExtensionSet17MaybeNewExtensionEiPKNS0_15FieldDescriptorEPPNS2_9ExtensionE:
 1329|    876|                                     Extension** result) {
 1330|    876|  bool extension_is_new = false;
 1331|    876|  std::tie(*result, extension_is_new) = Insert(number);
 1332|    876|  (*result)->descriptor = descriptor;
 1333|    876|  return extension_is_new;
 1334|    876|}
_ZNK6google8protobuf8internal12ExtensionSet9Extension8ByteSizeEi:
 1384|    416|size_t ExtensionSet::Extension::ByteSize(int number) const {
 1385|    416|  size_t result = 0;
 1386|       |
 1387|    416|  if (is_repeated) {
  ------------------
  |  Branch (1387:7): [True: 0, False: 416]
  ------------------
 1388|      0|    if (is_packed) {
  ------------------
  |  Branch (1388:9): [True: 0, False: 0]
  ------------------
 1389|      0|      switch (real_type(type)) {
  ------------------
  |  Branch (1389:15): [True: 0, False: 0]
  ------------------
 1390|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                     \
 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
 1395|      0|    }                                                                    \
 1396|      0|    break
 1397|       |
 1398|      0|        HANDLE_TYPE(INT32, Int32, int32_t);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1399|      0|        HANDLE_TYPE(INT64, Int64, int64_t);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1400|      0|        HANDLE_TYPE(UINT32, UInt32, uint32_t);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1401|      0|        HANDLE_TYPE(UINT64, UInt64, uint64_t);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1402|      0|        HANDLE_TYPE(SINT32, SInt32, int32_t);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1403|      0|        HANDLE_TYPE(SINT64, SInt64, int64_t);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1404|      0|        HANDLE_TYPE(ENUM, Enum, enum);
  ------------------
  |  | 1391|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1391:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1392|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1392:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1393|      0|      result += WireFormatLite::CAMELCASE##Size(                         \
  |  | 1394|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                     \
  |  | 1395|      0|    }                                                                    \
  |  | 1396|      0|    break
  ------------------
 1405|      0|#undef HANDLE_TYPE
 1406|       |
 1407|       |        // Stuff with fixed size.
 1408|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                 \
 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
 1412|      0|    break
 1413|      0|        HANDLE_TYPE(FIXED32, Fixed32, uint32_t);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1414|      0|        HANDLE_TYPE(FIXED64, Fixed64, uint64_t);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1415|      0|        HANDLE_TYPE(SFIXED32, SFixed32, int32_t);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1416|      0|        HANDLE_TYPE(SFIXED64, SFixed64, int64_t);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1417|      0|        HANDLE_TYPE(FLOAT, Float, float);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1418|      0|        HANDLE_TYPE(DOUBLE, Double, double);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1419|      0|        HANDLE_TYPE(BOOL, Bool, bool);
  ------------------
  |  | 1409|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1409:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1410|      0|    result += WireFormatLite::k##CAMELCASE##Size *                   \
  |  | 1411|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1412|      0|    break
  ------------------
 1420|      0|#undef HANDLE_TYPE
 1421|       |
 1422|      0|        case WireFormatLite::TYPE_STRING:
  ------------------
  |  Branch (1422:9): [True: 0, False: 0]
  ------------------
 1423|      0|        case WireFormatLite::TYPE_BYTES:
  ------------------
  |  Branch (1423:9): [True: 0, False: 0]
  ------------------
 1424|      0|        case WireFormatLite::TYPE_GROUP:
  ------------------
  |  Branch (1424:9): [True: 0, False: 0]
  ------------------
 1425|      0|        case WireFormatLite::TYPE_MESSAGE:
  ------------------
  |  Branch (1425:9): [True: 0, False: 0]
  ------------------
 1426|      0|          ABSL_LOG(FATAL) << "Non-primitive types can't be packed.";
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1427|      0|          break;
 1428|      0|      }
 1429|       |
 1430|      0|      cached_size.set(ToCachedSize(result));
 1431|      0|      if (result > 0) {
  ------------------
  |  Branch (1431:11): [True: 0, False: 0]
  ------------------
 1432|      0|        result += io::CodedOutputStream::VarintSize32(result);
 1433|      0|        result += io::CodedOutputStream::VarintSize32(WireFormatLite::MakeTag(
 1434|      0|            number, WireFormatLite::WIRETYPE_LENGTH_DELIMITED));
 1435|      0|      }
 1436|      0|    } else {
 1437|      0|      size_t tag_size = WireFormatLite::TagSize(number, real_type(type));
 1438|       |
 1439|      0|      switch (real_type(type)) {
  ------------------
  |  Branch (1439:15): [True: 0, False: 0]
  ------------------
 1440|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                      \
 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
 1442|      0|    result +=                                                             \
 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
 1447|      0|    }                                                                     \
 1448|      0|    break
 1449|       |
 1450|      0|        HANDLE_TYPE(INT32, Int32, int32_t);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1451|      0|        HANDLE_TYPE(INT64, Int64, int64_t);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1452|      0|        HANDLE_TYPE(UINT32, UInt32, uint32_t);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1453|      0|        HANDLE_TYPE(UINT64, UInt64, uint64_t);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1454|      0|        HANDLE_TYPE(SINT32, SInt32, int32_t);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1455|      0|        HANDLE_TYPE(SINT64, SInt64, int64_t);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1456|      0|        HANDLE_TYPE(STRING, String, string);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1457|      0|        HANDLE_TYPE(BYTES, Bytes, string);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1458|      0|        HANDLE_TYPE(ENUM, Enum, enum);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1459|      0|        HANDLE_TYPE(GROUP, Group, message);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1460|      0|        HANDLE_TYPE(MESSAGE, Message, message);
  ------------------
  |  | 1441|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                  \
  |  |  ------------------
  |  |  |  Branch (1441:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1442|      0|    result +=                                                             \
  |  | 1443|      0|        tag_size * FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1444|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) {  \
  |  |  ------------------
  |  |  |  Branch (1444:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1445|      0|      result += WireFormatLite::CAMELCASE##Size(                          \
  |  | 1446|      0|          ptr.repeated_##LOWERCASE##_value->Get(i));                      \
  |  | 1447|      0|    }                                                                     \
  |  | 1448|      0|    break
  ------------------
 1461|      0|#undef HANDLE_TYPE
 1462|       |
 1463|       |        // Stuff with fixed size.
 1464|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                 \
 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
 1468|      0|    break
 1469|      0|        HANDLE_TYPE(FIXED32, Fixed32, uint32_t);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1470|      0|        HANDLE_TYPE(FIXED64, Fixed64, uint64_t);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1471|      0|        HANDLE_TYPE(SFIXED32, SFixed32, int32_t);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1472|      0|        HANDLE_TYPE(SFIXED64, SFixed64, int64_t);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1473|      0|        HANDLE_TYPE(FLOAT, Float, float);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1474|      0|        HANDLE_TYPE(DOUBLE, Double, double);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1475|      0|        HANDLE_TYPE(BOOL, Bool, bool);
  ------------------
  |  | 1465|      0|  case WireFormatLite::TYPE_##UPPERCASE:                             \
  |  |  ------------------
  |  |  |  Branch (1465:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1466|      0|    result += (tag_size + WireFormatLite::k##CAMELCASE##Size) *      \
  |  | 1467|      0|              FromIntSize(ptr.repeated_##LOWERCASE##_value->size()); \
  |  | 1468|      0|    break
  ------------------
 1476|      0|#undef HANDLE_TYPE
 1477|      0|      }
 1478|      0|    }
 1479|    416|  } else if (!is_cleared) {
  ------------------
  |  Branch (1479:14): [True: 416, False: 0]
  ------------------
 1480|    416|    result += WireFormatLite::TagSize(number, real_type(type));
 1481|    416|    switch (real_type(type)) {
  ------------------
  |  Branch (1481:13): [True: 416, False: 0]
  ------------------
 1482|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)      \
 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
 1485|      0|    break
 1486|       |
 1487|      0|      HANDLE_TYPE(INT32, Int32, int32_t_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1488|      0|      HANDLE_TYPE(INT64, Int64, int64_t_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1489|      0|      HANDLE_TYPE(UINT32, UInt32, uint32_t_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1490|      0|      HANDLE_TYPE(UINT64, UInt64, uint64_t_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1491|      0|      HANDLE_TYPE(SINT32, SInt32, int32_t_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1492|      0|      HANDLE_TYPE(SINT64, SInt64, int64_t_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1493|      0|      HANDLE_TYPE(STRING, String, *ptr.string_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1494|      0|      HANDLE_TYPE(BYTES, Bytes, *ptr.string_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1495|      0|      HANDLE_TYPE(ENUM, Enum, enum_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1496|      0|      HANDLE_TYPE(GROUP, Group, *ptr.message_value);
  ------------------
  |  | 1483|      0|  case WireFormatLite::TYPE_##UPPERCASE:                  \
  |  |  ------------------
  |  |  |  Branch (1483:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1484|      0|    result += WireFormatLite::CAMELCASE##Size(LOWERCASE); \
  |  | 1485|      0|    break
  ------------------
 1497|      0|#undef HANDLE_TYPE
 1498|    416|      case WireFormatLite::TYPE_MESSAGE: {
  ------------------
  |  Branch (1498:7): [True: 416, False: 0]
  ------------------
 1499|    416|        result += WireFormatLite::LengthDelimitedSize(
 1500|    416|            is_lazy ? ptr.lazymessage_value->ByteSizeLong()
  ------------------
  |  Branch (1500:13): [True: 0, False: 416]
  ------------------
 1501|    416|                    : ptr.message_value->ByteSizeLong());
 1502|    416|        break;
 1503|      0|      }
 1504|       |
 1505|       |      // Stuff with fixed size.
 1506|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE)         \
 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
 1509|      0|    break
 1510|      0|        HANDLE_TYPE(FIXED32, Fixed32);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1511|      0|        HANDLE_TYPE(FIXED64, Fixed64);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1512|      0|        HANDLE_TYPE(SFIXED32, SFixed32);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1513|      0|        HANDLE_TYPE(SFIXED64, SFixed64);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1514|      0|        HANDLE_TYPE(FLOAT, Float);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1515|      0|        HANDLE_TYPE(DOUBLE, Double);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1516|    416|        HANDLE_TYPE(BOOL, Bool);
  ------------------
  |  | 1507|      0|  case WireFormatLite::TYPE_##UPPERCASE:          \
  |  |  ------------------
  |  |  |  Branch (1507:3): [True: 0, False: 416]
  |  |  ------------------
  |  | 1508|      0|    result += WireFormatLite::k##CAMELCASE##Size; \
  |  | 1509|      0|    break
  ------------------
 1517|    416|#undef HANDLE_TYPE
 1518|    416|    }
 1519|    416|  }
 1520|       |
 1521|    416|  return result;
 1522|    416|}
_ZN6google8protobuf8internal12ExtensionSet9Extension4FreeEv:
 1550|    432|void ExtensionSet::Extension::Free() {
 1551|    432|  if (is_repeated) {
  ------------------
  |  Branch (1551:7): [True: 0, False: 432]
  ------------------
 1552|      0|    switch (cpp_type(type)) {
  ------------------
  |  Branch (1552:13): [True: 0, False: 0]
  ------------------
 1553|      0|#define HANDLE_TYPE(UPPERCASE, LOWERCASE)    \
 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
 1556|      0|    break
 1557|       |
 1558|      0|      HANDLE_TYPE(INT32, int32_t);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1559|      0|      HANDLE_TYPE(INT64, int64_t);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1560|      0|      HANDLE_TYPE(UINT32, uint32_t);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1561|      0|      HANDLE_TYPE(UINT64, uint64_t);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1562|      0|      HANDLE_TYPE(FLOAT, float);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1563|      0|      HANDLE_TYPE(DOUBLE, double);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1564|      0|      HANDLE_TYPE(BOOL, bool);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1565|      0|      HANDLE_TYPE(ENUM, enum);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1566|      0|      HANDLE_TYPE(STRING, string);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1567|      0|      HANDLE_TYPE(MESSAGE, message);
  ------------------
  |  | 1554|      0|  case WireFormatLite::CPPTYPE_##UPPERCASE:  \
  |  |  ------------------
  |  |  |  Branch (1554:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1555|      0|    delete ptr.repeated_##LOWERCASE##_value; \
  |  | 1556|      0|    break
  ------------------
 1568|      0|#undef HANDLE_TYPE
 1569|      0|    }
 1570|    432|  } else {
 1571|    432|    switch (cpp_type(type)) {
 1572|      0|      case WireFormatLite::CPPTYPE_STRING:
  ------------------
  |  Branch (1572:7): [True: 0, False: 432]
  ------------------
 1573|      0|        delete ptr.string_value;
 1574|      0|        break;
 1575|    432|      case WireFormatLite::CPPTYPE_MESSAGE:
  ------------------
  |  Branch (1575:7): [True: 432, False: 0]
  ------------------
 1576|    432|        if (is_lazy) {
  ------------------
  |  Branch (1576:13): [True: 0, False: 432]
  ------------------
 1577|      0|          delete ptr.lazymessage_value;
 1578|    432|        } else {
 1579|    432|          delete ptr.message_value;
 1580|    432|        }
 1581|    432|        break;
 1582|      0|      default:
  ------------------
  |  Branch (1582:7): [True: 0, False: 432]
  ------------------
 1583|      0|        break;
 1584|    432|    }
 1585|    432|  }
 1586|    432|}
_ZNK6google8protobuf8internal12ExtensionSet9Extension13IsInitializedEPKS2_PKNS0_11MessageLiteEiPNS0_5ArenaE:
 1593|      8|                                            int number, Arena* arena) const {
 1594|      8|  if (cpp_type(type) != WireFormatLite::CPPTYPE_MESSAGE) return true;
  ------------------
  |  Branch (1594:7): [True: 0, False: 8]
  ------------------
 1595|       |
 1596|      8|  if (is_repeated) {
  ------------------
  |  Branch (1596:7): [True: 0, False: 8]
  ------------------
 1597|      0|    for (int i = 0; i < ptr.repeated_message_value->size(); i++) {
  ------------------
  |  Branch (1597:21): [True: 0, False: 0]
  ------------------
 1598|      0|      if (!ptr.repeated_message_value->Get(i).IsInitialized()) {
  ------------------
  |  Branch (1598:11): [True: 0, False: 0]
  ------------------
 1599|      0|        return false;
 1600|      0|      }
 1601|      0|    }
 1602|      0|    return true;
 1603|      0|  }
 1604|       |
 1605|      8|  if (is_cleared) return true;
  ------------------
  |  Branch (1605:7): [True: 0, False: 8]
  ------------------
 1606|       |
 1607|      8|  if (!is_lazy) return ptr.message_value->IsInitialized();
  ------------------
  |  Branch (1607:7): [True: 8, False: 0]
  ------------------
 1608|       |
 1609|      0|  const MessageLite* prototype =
 1610|      0|      ext_set->GetPrototypeForLazyMessage(extendee, number);
 1611|      0|  ABSL_DCHECK_NE(prototype, nullptr)
  ------------------
  |  |   76|      0|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1612|      0|      << "extendee: " << extendee->GetTypeName() << "; number: " << number;
 1613|      0|  return ptr.lazymessage_value->IsInitialized(prototype, arena);
 1614|      8|}
_ZNK6google8protobuf8internal12ExtensionSet10FindOrNullEi:
 1619|  18.1k|const ExtensionSet::Extension* ExtensionSet::FindOrNull(int key) const {
 1620|  18.1k|  if (flat_size_ == 0) {
  ------------------
  |  Branch (1620:7): [True: 0, False: 18.1k]
  ------------------
 1621|      0|    return nullptr;
 1622|  18.1k|  } else if (PROTOBUF_PREDICT_TRUE(!is_large())) {
  ------------------
  |  |  364|  18.1k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 18.1k, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 18.1k]
  |  |  |  Branch (364:62): [True: 18.1k, False: 0]
  |  |  ------------------
  ------------------
 1623|  18.1k|    for (auto it = flat_begin(), end = flat_end();
 1624|  18.1k|         it != end && it->first <= key; ++it) {
  ------------------
  |  Branch (1624:10): [True: 18.1k, False: 0]
  |  Branch (1624:23): [True: 18.1k, False: 0]
  ------------------
 1625|  18.1k|      if (it->first == key) return &it->second;
  ------------------
  |  Branch (1625:11): [True: 18.1k, False: 0]
  ------------------
 1626|  18.1k|    }
 1627|      0|    return nullptr;
 1628|  18.1k|  } else {
 1629|      0|    return FindOrNullInLargeMap(key);
 1630|      0|  }
 1631|  18.1k|}
_ZN6google8protobuf8internal12ExtensionSet6InsertEi:
 1654|  1.09k|std::pair<ExtensionSet::Extension*, bool> ExtensionSet::Insert(int key) {
 1655|  1.09k|  if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|  1.09k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.09k]
  |  |  |  Branch (365:54): [Folded, False: 1.09k]
  |  |  |  Branch (365:63): [True: 0, False: 1.09k]
  |  |  ------------------
  ------------------
 1656|      0|    auto maybe = map_.large->insert({key, Extension()});
 1657|      0|    return {&maybe.first->second, maybe.second};
 1658|      0|  }
 1659|  1.09k|  KeyValue* end = flat_end();
 1660|  1.09k|  KeyValue* it = flat_begin();
 1661|  1.09k|  for (; it != end && it->first <= key; ++it) {
  ------------------
  |  Branch (1661:10): [True: 432, False: 658]
  |  Branch (1661:23): [True: 432, False: 0]
  ------------------
 1662|    432|    if (it->first == key) return {&it->second, false};
  ------------------
  |  Branch (1662:9): [True: 432, False: 0]
  ------------------
 1663|    432|  }
 1664|    658|  if (flat_size_ < flat_capacity_) {
  ------------------
  |  Branch (1664:7): [True: 444, False: 214]
  ------------------
 1665|    444|    std::copy_backward(it, end, end + 1);
 1666|    444|    ++flat_size_;
 1667|    444|    it->first = key;
 1668|    444|    it->second = Extension();
 1669|    444|    return {&it->second, true};
 1670|    444|  }
 1671|    214|  GrowCapacity(flat_size_ + 1);
 1672|    214|  return Insert(key);
 1673|    658|}
_ZN6google8protobuf8internal12ExtensionSet12GrowCapacityEm:
 1679|  1.25k|void ExtensionSet::GrowCapacity(size_t minimum_new_capacity) {
 1680|  1.25k|  if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|  1.25k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.25k]
  |  |  |  Branch (365:54): [Folded, False: 1.25k]
  |  |  |  Branch (365:63): [True: 0, False: 1.25k]
  |  |  ------------------
  ------------------
 1681|      0|    return;  // LargeMap does not have a "reserve" method.
 1682|      0|  }
 1683|  1.25k|  if (flat_capacity_ >= minimum_new_capacity) {
  ------------------
  |  Branch (1683:7): [True: 815, False: 444]
  ------------------
 1684|    815|    return;
 1685|    815|  }
 1686|       |
 1687|    444|  auto new_flat_capacity = flat_capacity_;
 1688|    444|  do {
 1689|    444|    new_flat_capacity = new_flat_capacity == 0 ? 1 : new_flat_capacity * 4;
  ------------------
  |  Branch (1689:25): [True: 444, False: 0]
  ------------------
 1690|    444|  } while (new_flat_capacity < minimum_new_capacity);
  ------------------
  |  Branch (1690:12): [True: 0, False: 444]
  ------------------
 1691|       |
 1692|    444|  KeyValue* begin = flat_begin();
 1693|    444|  KeyValue* end = flat_end();
 1694|    444|  AllocatedData new_map;
 1695|    444|  Arena* const arena = arena_;
 1696|    444|  if (new_flat_capacity > kMaximumFlatCapacity) {
  ------------------
  |  Branch (1696:7): [True: 0, False: 444]
  ------------------
 1697|      0|    new_map.large = Arena::Create<LargeMap>(arena);
 1698|      0|    LargeMap::iterator hint = new_map.large->begin();
 1699|      0|    for (const KeyValue* it = begin; it != end; ++it) {
  ------------------
  |  Branch (1699:38): [True: 0, False: 0]
  ------------------
 1700|      0|      hint = new_map.large->insert(hint, {it->first, it->second});
 1701|      0|    }
 1702|      0|    flat_size_ = static_cast<uint16_t>(-1);
 1703|      0|    ABSL_DCHECK(is_large());
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1704|    444|  } else {
 1705|    444|    new_map.flat = Arena::CreateArray<KeyValue>(arena, new_flat_capacity);
 1706|    444|    std::copy(begin, end, new_map.flat);
 1707|    444|  }
 1708|       |
 1709|       |  // ReturnArrayMemory is more efficient with power-of-2 bytes, and
 1710|       |  // sizeof(KeyValue) is a power-of-2 on 64-bit platforms. flat_capacity_ is
 1711|       |  // always a power-of-2.
 1712|    888|  ABSL_DCHECK(IsPowerOfTwo(sizeof(KeyValue)) || sizeof(void*) != 8)
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    444|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    444|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    888|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    888|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 444, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    444|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 444]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    444|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 444, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    444|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|    444|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1713|    888|      << sizeof(KeyValue) << " " << sizeof(void*);
 1714|    444|  ABSL_DCHECK(IsPowerOfTwo(flat_capacity_));
  ------------------
  |  |   47|    444|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    444|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.33k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    444|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    888|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    888|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 444, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    444|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 444]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    444|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 444, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.33k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.33k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1715|    444|  if (flat_capacity_ > 0) {
  ------------------
  |  Branch (1715:7): [True: 0, False: 444]
  ------------------
 1716|      0|    if (arena == nullptr) {
  ------------------
  |  Branch (1716:9): [True: 0, False: 0]
  ------------------
 1717|      0|      DeleteFlatMap(begin, flat_capacity_);
 1718|      0|    } else {
 1719|      0|      arena->ReturnArrayMemory(begin, sizeof(KeyValue) * flat_capacity_);
 1720|      0|    }
 1721|      0|  }
 1722|    444|  flat_capacity_ = new_flat_capacity;
 1723|    444|  map_ = new_map;
 1724|    444|}
_ZNK6google8protobuf8internal12ExtensionSet9Extension44InternalSerializeFieldWithCachedSizesToArrayEPKNS0_11MessageLiteEPKS2_iPhPNS0_2io19EpsCopyOutputStreamE:
 1764|    210|    uint8_t* target, io::EpsCopyOutputStream* stream) const {
 1765|    210|  if (is_repeated) {
  ------------------
  |  Branch (1765:7): [True: 0, False: 210]
  ------------------
 1766|      0|    if (is_packed) {
  ------------------
  |  Branch (1766:9): [True: 0, False: 0]
  ------------------
 1767|      0|      if (cached_size() == 0) return target;
  ------------------
  |  Branch (1767:11): [True: 0, False: 0]
  ------------------
 1768|       |
 1769|      0|      target = stream->EnsureSpace(target);
 1770|      0|      target = WireFormatLite::WriteTagToArray(
 1771|      0|          number, WireFormatLite::WIRETYPE_LENGTH_DELIMITED, target);
 1772|      0|      target = WireFormatLite::WriteInt32NoTagToArray(cached_size(), target);
 1773|       |
 1774|      0|      switch (real_type(type)) {
  ------------------
  |  Branch (1774:15): [True: 0, False: 0]
  ------------------
 1775|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                     \
 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
 1778|      0|      target = stream->EnsureSpace(target);                              \
 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
 1781|      0|    }                                                                    \
 1782|      0|    break
 1783|       |
 1784|      0|        HANDLE_TYPE(INT32, Int32, int32_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1785|      0|        HANDLE_TYPE(INT64, Int64, int64_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1786|      0|        HANDLE_TYPE(UINT32, UInt32, uint32_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1787|      0|        HANDLE_TYPE(UINT64, UInt64, uint64_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1788|      0|        HANDLE_TYPE(SINT32, SInt32, int32_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1789|      0|        HANDLE_TYPE(SINT64, SInt64, int64_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1790|      0|        HANDLE_TYPE(FIXED32, Fixed32, uint32_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1791|      0|        HANDLE_TYPE(FIXED64, Fixed64, uint64_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1792|      0|        HANDLE_TYPE(SFIXED32, SFixed32, int32_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1793|      0|        HANDLE_TYPE(SFIXED64, SFixed64, int64_t);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1794|      0|        HANDLE_TYPE(FLOAT, Float, float);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1795|      0|        HANDLE_TYPE(DOUBLE, Double, double);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1796|      0|        HANDLE_TYPE(BOOL, Bool, bool);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1797|      0|        HANDLE_TYPE(ENUM, Enum, enum);
  ------------------
  |  | 1776|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1776:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1777|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1777:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1778|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1779|      0|      target = WireFormatLite::Write##CAMELCASE##NoTagToArray(           \
  |  | 1780|      0|          ptr.repeated_##LOWERCASE##_value->Get(i), target);             \
  |  | 1781|      0|    }                                                                    \
  |  | 1782|      0|    break
  ------------------
 1798|      0|#undef HANDLE_TYPE
 1799|       |
 1800|      0|        case WireFormatLite::TYPE_STRING:
  ------------------
  |  Branch (1800:9): [True: 0, False: 0]
  ------------------
 1801|      0|        case WireFormatLite::TYPE_BYTES:
  ------------------
  |  Branch (1801:9): [True: 0, False: 0]
  ------------------
 1802|      0|        case WireFormatLite::TYPE_GROUP:
  ------------------
  |  Branch (1802:9): [True: 0, False: 0]
  ------------------
 1803|      0|        case WireFormatLite::TYPE_MESSAGE:
  ------------------
  |  Branch (1803:9): [True: 0, False: 0]
  ------------------
 1804|      0|          ABSL_LOG(FATAL) << "Non-primitive types can't be packed.";
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1805|      0|          break;
 1806|      0|      }
 1807|      0|    } else {
 1808|      0|      switch (real_type(type)) {
  ------------------
  |  Branch (1808:15): [True: 0, False: 0]
  ------------------
 1809|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                     \
 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
 1812|      0|      target = stream->EnsureSpace(target);                              \
 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
 1815|      0|    }                                                                    \
 1816|      0|    break
 1817|       |
 1818|      0|        HANDLE_TYPE(INT32, Int32, int32_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1819|      0|        HANDLE_TYPE(INT64, Int64, int64_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1820|      0|        HANDLE_TYPE(UINT32, UInt32, uint32_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1821|      0|        HANDLE_TYPE(UINT64, UInt64, uint64_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1822|      0|        HANDLE_TYPE(SINT32, SInt32, int32_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1823|      0|        HANDLE_TYPE(SINT64, SInt64, int64_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1824|      0|        HANDLE_TYPE(FIXED32, Fixed32, uint32_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1825|      0|        HANDLE_TYPE(FIXED64, Fixed64, uint64_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1826|      0|        HANDLE_TYPE(SFIXED32, SFixed32, int32_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1827|      0|        HANDLE_TYPE(SFIXED64, SFixed64, int64_t);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1828|      0|        HANDLE_TYPE(FLOAT, Float, float);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1829|      0|        HANDLE_TYPE(DOUBLE, Double, double);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1830|      0|        HANDLE_TYPE(BOOL, Bool, bool);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1831|      0|        HANDLE_TYPE(ENUM, Enum, enum);
  ------------------
  |  | 1810|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1810:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1811|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1811:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1812|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1813|      0|      target = WireFormatLite::Write##CAMELCASE##ToArray(                \
  |  | 1814|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1815|      0|    }                                                                    \
  |  | 1816|      0|    break
  ------------------
 1832|      0|#undef HANDLE_TYPE
 1833|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, LOWERCASE)                     \
 1834|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
 1835|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
 1836|      0|      target = stream->EnsureSpace(target);                              \
 1837|      0|      target = stream->WriteString(                                      \
 1838|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
 1839|      0|    }                                                                    \
 1840|      0|    break
 1841|      0|        HANDLE_TYPE(STRING, String, string);
  ------------------
  |  | 1834|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1834:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1835|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1835:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1836|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1837|      0|      target = stream->WriteString(                                      \
  |  | 1838|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1839|      0|    }                                                                    \
  |  | 1840|      0|    break
  ------------------
 1842|      0|        HANDLE_TYPE(BYTES, Bytes, string);
  ------------------
  |  | 1834|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                 \
  |  |  ------------------
  |  |  |  Branch (1834:3): [True: 0, False: 0]
  |  |  ------------------
  |  | 1835|      0|    for (int i = 0; i < ptr.repeated_##LOWERCASE##_value->size(); i++) { \
  |  |  ------------------
  |  |  |  Branch (1835:21): [True: 0, False: 0]
  |  |  ------------------
  |  | 1836|      0|      target = stream->EnsureSpace(target);                              \
  |  | 1837|      0|      target = stream->WriteString(                                      \
  |  | 1838|      0|          number, ptr.repeated_##LOWERCASE##_value->Get(i), target);     \
  |  | 1839|      0|    }                                                                    \
  |  | 1840|      0|    break
  ------------------
 1843|      0|#undef HANDLE_TYPE
 1844|      0|        case WireFormatLite::TYPE_GROUP:
  ------------------
  |  Branch (1844:9): [True: 0, False: 0]
  ------------------
 1845|      0|          for (int i = 0; i < ptr.repeated_message_value->size(); i++) {
  ------------------
  |  Branch (1845:27): [True: 0, False: 0]
  ------------------
 1846|      0|            target = stream->EnsureSpace(target);
 1847|      0|            target = WireFormatLite::InternalWriteGroup(
 1848|      0|                number, ptr.repeated_message_value->Get(i), target, stream);
 1849|      0|          }
 1850|      0|          break;
 1851|      0|        case WireFormatLite::TYPE_MESSAGE:
  ------------------
  |  Branch (1851:9): [True: 0, False: 0]
  ------------------
 1852|      0|          for (int i = 0; i < ptr.repeated_message_value->size(); i++) {
  ------------------
  |  Branch (1852:27): [True: 0, False: 0]
  ------------------
 1853|      0|            auto& msg = ptr.repeated_message_value->Get(i);
 1854|      0|            target = WireFormatLite::InternalWriteMessage(
 1855|      0|                number, msg, msg.GetCachedSize(), target, stream);
 1856|      0|          }
 1857|      0|          break;
 1858|      0|      }
 1859|      0|    }
 1860|    210|  } else if (!is_cleared) {
  ------------------
  |  Branch (1860:14): [True: 210, False: 0]
  ------------------
 1861|    210|    switch (real_type(type)) {
  ------------------
  |  Branch (1861:13): [True: 210, False: 0]
  ------------------
 1862|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, VALUE)                               \
 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
 1864|      0|    target = stream->EnsureSpace(target);                                      \
 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
 1866|      0|    break
 1867|       |
 1868|      0|      HANDLE_TYPE(INT32, Int32, int32_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1869|      0|      HANDLE_TYPE(INT64, Int64, int64_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1870|      0|      HANDLE_TYPE(UINT32, UInt32, uint32_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1871|      0|      HANDLE_TYPE(UINT64, UInt64, uint64_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1872|      0|      HANDLE_TYPE(SINT32, SInt32, int32_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1873|      0|      HANDLE_TYPE(SINT64, SInt64, int64_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1874|      0|      HANDLE_TYPE(FIXED32, Fixed32, uint32_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1875|      0|      HANDLE_TYPE(FIXED64, Fixed64, uint64_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1876|      0|      HANDLE_TYPE(SFIXED32, SFixed32, int32_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1877|      0|      HANDLE_TYPE(SFIXED64, SFixed64, int64_t_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1878|      0|      HANDLE_TYPE(FLOAT, Float, float_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1879|      0|      HANDLE_TYPE(DOUBLE, Double, double_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1880|      0|      HANDLE_TYPE(BOOL, Bool, bool_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1881|      0|      HANDLE_TYPE(ENUM, Enum, enum_value);
  ------------------
  |  | 1863|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                       \
  |  |  ------------------
  |  |  |  Branch (1863:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1864|      0|    target = stream->EnsureSpace(target);                                      \
  |  | 1865|      0|    target = WireFormatLite::Write##CAMELCASE##ToArray(number, VALUE, target); \
  |  | 1866|      0|    break
  ------------------
 1882|      0|#undef HANDLE_TYPE
 1883|      0|#define HANDLE_TYPE(UPPERCASE, CAMELCASE, VALUE)         \
 1884|      0|  case WireFormatLite::TYPE_##UPPERCASE:                 \
 1885|      0|    target = stream->EnsureSpace(target);                \
 1886|      0|    target = stream->WriteString(number, VALUE, target); \
 1887|      0|    break
 1888|      0|      HANDLE_TYPE(STRING, String, *ptr.string_value);
  ------------------
  |  | 1884|      0|  case WireFormatLite::TYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1884:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1885|      0|    target = stream->EnsureSpace(target);                \
  |  | 1886|      0|    target = stream->WriteString(number, VALUE, target); \
  |  | 1887|      0|    break
  ------------------
 1889|      0|      HANDLE_TYPE(BYTES, Bytes, *ptr.string_value);
  ------------------
  |  | 1884|      0|  case WireFormatLite::TYPE_##UPPERCASE:                 \
  |  |  ------------------
  |  |  |  Branch (1884:3): [True: 0, False: 210]
  |  |  ------------------
  |  | 1885|      0|    target = stream->EnsureSpace(target);                \
  |  | 1886|      0|    target = stream->WriteString(number, VALUE, target); \
  |  | 1887|      0|    break
  ------------------
 1890|      0|#undef HANDLE_TYPE
 1891|      0|      case WireFormatLite::TYPE_GROUP:
  ------------------
  |  Branch (1891:7): [True: 0, False: 210]
  ------------------
 1892|      0|        target = stream->EnsureSpace(target);
 1893|      0|        target = WireFormatLite::InternalWriteGroup(number, *ptr.message_value,
 1894|      0|                                                    target, stream);
 1895|      0|        break;
 1896|    210|      case WireFormatLite::TYPE_MESSAGE:
  ------------------
  |  Branch (1896:7): [True: 210, False: 0]
  ------------------
 1897|    210|        if (is_lazy) {
  ------------------
  |  Branch (1897:13): [True: 0, False: 210]
  ------------------
 1898|      0|          const auto* prototype =
 1899|      0|              extension_set->GetPrototypeForLazyMessage(extendee, number);
 1900|      0|          target = ptr.lazymessage_value->WriteMessageToArray(prototype, number,
 1901|      0|                                                              target, stream);
 1902|    210|        } else {
 1903|    210|          target = WireFormatLite::InternalWriteMessage(
 1904|    210|              number, *ptr.message_value, ptr.message_value->GetCachedSize(),
 1905|    210|              target, stream);
 1906|    210|        }
 1907|    210|        break;
 1908|    210|    }
 1909|    210|  }
 1910|    210|  return target;
 1911|    210|}
extension_set.cc:_ZN6google8protobuf8internal12_GLOBAL__N_123FindRegisteredExtensionEPKNS0_11MessageLiteEi:
  101|      8|                                             int number) {
  102|      8|  if (!global_registry) return nullptr;
  ------------------
  |  Branch (102:7): [True: 0, False: 8]
  ------------------
  103|       |
  104|      8|  ExtensionInfoKey info;
  105|      8|  info.message = extendee;
  106|      8|  info.number = number;
  107|       |
  108|      8|  auto it = global_registry->find(info);
  109|      8|  if (it == global_registry->end()) {
  ------------------
  |  Branch (109:7): [True: 0, False: 8]
  ------------------
  110|      0|    return nullptr;
  111|      8|  } else {
  112|      8|    return &*it;
  113|      8|  }
  114|      8|}
extension_set.cc:_ZNK6google8protobuf8internal12_GLOBAL__N_111ExtensionEqclERKNS1_13ExtensionInfoERKNS2_16ExtensionInfoKeyE:
   65|      8|  bool operator()(const ExtensionInfo& lhs, const ExtensionInfoKey& rhs) const {
   66|      8|    return lhs.message == rhs.message && lhs.number == rhs.number;
  ------------------
  |  Branch (66:12): [True: 8, False: 0]
  |  Branch (66:42): [True: 8, False: 0]
  ------------------
   67|      8|  }
extension_set.cc:_ZNK6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherclERKNS2_16ExtensionInfoKeyE:
   78|      8|  std::size_t operator()(const ExtensionInfoKey& info) const {
   79|      8|    return absl::HashOf(info.message, info.number);
   80|      8|  }
extension_set.cc:_ZN6google8protobuf8internal12_GLOBAL__N_18RegisterERKNS1_13ExtensionInfoE:
   90|      1|void Register(const ExtensionInfo& info) {
   91|      1|  static auto local_static_registry = OnShutdownDelete(new ExtensionRegistry);
   92|      1|  global_registry = local_static_registry;
   93|      1|  if (!local_static_registry->insert(info).second) {
  ------------------
  |  Branch (93:7): [True: 0, False: 1]
  ------------------
   94|      0|    ABSL_LOG(FATAL) << "Multiple extension registrations for type \""
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|      0|                    << info.message->GetTypeName() << "\", field number "
   96|      0|                    << info.number << ".";
   97|      0|  }
   98|      1|}
extension_set.cc:_ZNK6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherclERKNS1_13ExtensionInfoE:
   75|      1|  std::size_t operator()(const ExtensionInfo& info) const {
   76|      1|    return absl::HashOf(info.message, info.number);
   77|      1|  }
extension_set.cc:_ZN6google8protobuf8internal12_GLOBAL__N_18cpp_typeEh:
   49|  1.10k|inline WireFormatLite::CppType cpp_type(FieldType type) {
   50|  1.10k|  return WireFormatLite::FieldTypeToCppType(real_type(type));
   51|  1.10k|}
extension_set.cc:_ZN6google8protobuf8internal12_GLOBAL__N_19real_typeEh:
   44|  2.14k|inline WireFormatLite::FieldType real_type(FieldType type) {
   45|  2.14k|  ABSL_DCHECK(type > 0 && type <= WireFormatLite::MAX_FIELD_TYPE);
  ------------------
  |  |   47|  2.14k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  2.14k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  4.28k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  2.14k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  4.28k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  4.28k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.14k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.14k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.14k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  2.14k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.14k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  4.28k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  4.28k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   46|  2.14k|  return static_cast<WireFormatLite::FieldType>(type);
   47|  2.14k|}
extension_set.cc:_ZZN6google8protobuf8internal12ExtensionSetD1EvENK3$_0clEiRNS2_9ExtensionE:
  189|    432|    ForEach([](int /* number */, Extension& ext) { ext.Free(); },
extension_set.cc:_ZN6google8protobuf8internal12_GLOBAL__N_111SizeOfUnionIPNS1_12ExtensionSet8KeyValueEPKS5_EEmT_S9_T0_SA_:
  970|  1.04k|size_t SizeOfUnion(ItX it_dest, ItX end_dest, ItY it_source, ItY end_source) {
  971|  1.04k|  size_t result = 0;
  972|  1.47k|  while (it_dest != end_dest && it_source != end_source) {
  ------------------
  |  Branch (972:10): [True: 440, False: 1.03k]
  |  Branch (972:33): [True: 432, False: 8]
  ------------------
  973|    432|    if (it_dest->first < it_source->first) {
  ------------------
  |  Branch (973:9): [True: 0, False: 432]
  ------------------
  974|      0|      ++result;
  975|      0|      ++it_dest;
  976|    432|    } else if (it_dest->first == it_source->first) {
  ------------------
  |  Branch (976:16): [True: 432, False: 0]
  ------------------
  977|    432|      ++result;
  978|    432|      ++it_dest;
  979|    432|      ++it_source;
  980|    432|    } else {
  981|      0|      if (!it_source->second.is_cleared) {
  ------------------
  |  Branch (981:11): [True: 0, False: 0]
  ------------------
  982|      0|        ++result;
  983|      0|      }
  984|      0|      ++it_source;
  985|      0|    }
  986|    432|  }
  987|  1.04k|  result += std::distance(it_dest, end_dest);
  988|  1.27k|  for (; it_source != end_source; ++it_source) {
  ------------------
  |  Branch (988:10): [True: 230, False: 1.04k]
  ------------------
  989|    230|    if (!it_source->second.is_cleared) {
  ------------------
  |  Branch (989:9): [True: 230, False: 0]
  ------------------
  990|    230|      ++result;
  991|    230|    }
  992|    230|  }
  993|  1.04k|  return result;
  994|  1.04k|}
extension_set.cc:_ZZN6google8protobuf8internal12ExtensionSet9MergeFromEPKNS0_11MessageLiteERKS2_ENK3$_0clEiRKNS2_9ExtensionE:
 1011|    662|      [extendee, this, &other](int number, const Extension& ext) {
 1012|    662|        this->InternalExtensionMergeFrom(extendee, number, ext, other.arena_);
 1013|    662|      },
extension_set.cc:_ZZNK6google8protobuf8internal12ExtensionSet8ByteSizeEvENK3$_0clEiRKNS2_9ExtensionE:
 1317|    416|      [&total_size](int number, const Extension& ext) {
 1318|    416|        total_size += ext.ByteSize(number);
 1319|    416|      },

_ZN6google8protobuf8internal13ExtensionInfoC2Ev:
  108|      8|  constexpr ExtensionInfo() : enum_validity_check() {}
_ZN6google8protobuf8internal13ExtensionInfoC2EPKNS0_11MessageLiteEihbbPFPKcS7_PNS1_12ParseContextEENS1_14LazyAnnotationE:
  121|      1|      : message(extendee),
  122|      1|        number(param_number),
  123|      1|        type(type_param),
  124|      1|        is_repeated(isrepeated),
  125|      1|        is_packed(ispacked),
  126|      1|        is_lazy(islazy),
  127|      1|        enum_validity_check(),
  128|      1|        lazy_eager_verify_func(verify_func) {}
_ZN6google8protobuf8internal24GeneratedExtensionFinderC2EPKNS0_11MessageLiteE:
  178|      8|      : extendee_(extendee) {}
_ZN6google8protobuf8internal12ExtensionSetC2ENS1_18InternalVisibilityEPNS0_5ArenaE:
  208|    854|      : ExtensionSet(arena) {}
_ZNK6google8protobuf8internal12ExtensionSet18_InternalSerializeEPKNS0_11MessageLiteEiiPhPNS0_2io19EpsCopyOutputStreamE:
  486|    229|                              io::EpsCopyOutputStream* stream) const {
  487|    229|    if (flat_size_ == 0) {
  ------------------
  |  Branch (487:9): [True: 19, False: 210]
  ------------------
  488|     19|      assert(!is_large());
  489|     19|      return target;
  490|     19|    }
  491|    210|    return _InternalSerializeImpl(extendee, start_field_number,
  492|    210|                                  end_field_number, target, stream);
  493|    229|  }
_ZNK6google8protobuf8internal12ExtensionSet9Extension11PrefetchPtrEv:
  682|  1.51k|    const void* PrefetchPtr() const {
  683|  1.51k|      ABSL_DCHECK_EQ(is_pointer, is_repeated || FieldTypeIsPointer(type));
  ------------------
  |  |   74|  1.51k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|  1.51k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.51k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.51k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (56:38): [True: 0, False: 0]
  |  |  |  |  |  |  |  Branch (56:38): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.51k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  684|       |      // We don't want to prefetch invalid/null pointers so if there isn't a
  685|       |      // pointer to prefetch, then return `this`.
  686|  1.51k|      return is_pointer ? absl::bit_cast<const void*>(ptr) : this;
  ------------------
  |  Branch (686:14): [True: 1.51k, False: 0]
  ------------------
  687|  1.51k|    }
_ZNK6google8protobuf8internal12ExtensionSet8is_largeEv:
  791|  26.2k|  bool is_large() const { return static_cast<int16_t>(flat_size_) < 0; }
_ZNK6google8protobuf8internal12ExtensionSet8PrefetchclEPKv:
  802|  1.07k|    void operator()(const void* ptr) const { absl::PrefetchToLocalCache(ptr); }
_ZNK6google8protobuf8internal12ExtensionSet11PrefetchNtaclEPKv:
  805|    432|    void operator()(const void* ptr) const {
  806|    432|      absl::PrefetchToLocalCacheNta(ptr);
  807|    432|    }
_ZN6google8protobuf8internal12ExtensionSet10flat_beginEv:
 1030|  3.44k|  KeyValue* flat_begin() {
 1031|       |    assert(!is_large());
 1032|  3.44k|    return map_.flat;
 1033|  3.44k|  }
_ZNK6google8protobuf8internal12ExtensionSet10flat_beginEv:
 1034|  21.1k|  const KeyValue* flat_begin() const {
 1035|       |    assert(!is_large());
 1036|  21.1k|    return map_.flat;
 1037|  21.1k|  }
_ZN6google8protobuf8internal12ExtensionSet8flat_endEv:
 1038|  3.44k|  KeyValue* flat_end() {
 1039|       |    assert(!is_large());
 1040|  3.44k|    return map_.flat + flat_size_;
 1041|  3.44k|  }
_ZNK6google8protobuf8internal12ExtensionSet8flat_endEv:
 1042|  21.1k|  const KeyValue* flat_end() const {
 1043|       |    assert(!is_large());
 1044|  21.1k|    return map_.flat + flat_size_;
 1045|  21.1k|  }
_ZNK6google8protobuf8internal12ExtensionSet32FindExtensionInfoFromFieldNumberINS1_24GeneratedExtensionFinderEEEbiiPT_PNS1_13ExtensionInfoEPb:
  937|      8|                                        bool* was_packed_on_wire) const {
  938|      8|    if (!extension_finder->Find(field_number, extension)) {
  ------------------
  |  Branch (938:9): [True: 0, False: 8]
  ------------------
  939|      0|      return false;
  940|      0|    }
  941|       |
  942|      8|    ABSL_DCHECK(extension->type > 0 &&
  ------------------
  |  |   47|      8|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      8|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     24|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      8|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     16|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     16|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 8, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      8|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 8]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 8, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     24|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     24|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  943|      8|                extension->type <= WireFormatLite::MAX_FIELD_TYPE);
  944|      8|    auto real_type = static_cast<WireFormatLite::FieldType>(extension->type);
  945|       |
  946|      8|    WireFormatLite::WireType expected_wire_type =
  947|      8|        WireFormatLite::WireTypeForFieldType(real_type);
  948|       |
  949|       |    // Check if this is a packed field.
  950|      8|    *was_packed_on_wire = false;
  951|      8|    if (extension->is_repeated &&
  ------------------
  |  Branch (951:9): [True: 0, False: 8]
  ------------------
  952|      0|        wire_type == WireFormatLite::WIRETYPE_LENGTH_DELIMITED &&
  ------------------
  |  Branch (952:9): [True: 0, False: 0]
  ------------------
  953|      0|        is_packable(expected_wire_type)) {
  ------------------
  |  Branch (953:9): [True: 0, False: 0]
  ------------------
  954|      0|      *was_packed_on_wire = true;
  955|      0|      return true;
  956|      0|    }
  957|       |    // Otherwise the wire type must match.
  958|      8|    return expected_wire_type == wire_type;
  959|      8|  }
_ZN6google8protobuf8internal17MessageTypeTraitsIN2pb11CppFeaturesEE3GetEiRKNS1_12ExtensionSetERKS4_:
 1484|  18.1k|                              ConstType default_value) {
 1485|  18.1k|    return static_cast<const Type&>(set.GetMessage(number, default_value));
 1486|  18.1k|  }
_ZNK6google8protobuf8internal19ExtensionIdentifierINS0_10FeatureSetENS1_17MessageTypeTraitsIN2pb11CppFeaturesEEELh11ELb0EE13default_valueEv:
 1622|  18.1k|  typename TypeTraits::ConstType default_value() const {
 1623|  18.1k|    return TypeTraits::FromInitType(default_value_);
 1624|  18.1k|  }
_ZN6google8protobuf8internal17MessageTypeTraitsIN2pb11CppFeaturesEE12FromInitTypeEPKv:
 1477|  18.1k|  static ConstType FromInitType(InitType v) {
 1478|  18.1k|    return *static_cast<const Type*>(v);
 1479|  18.1k|  }
_ZNK6google8protobuf8internal19ExtensionIdentifierINS0_10FeatureSetENS1_17MessageTypeTraitsIN2pb11CppFeaturesEEELh11ELb0EE6numberEv:
 1621|  18.3k|  inline int number() const { return number_; }
_ZN6google8protobuf8internal17MessageTypeTraitsIN2pb11CppFeaturesEE7MutableEihPNS1_12ExtensionSetE:
 1494|    206|                                    ExtensionSet* set) {
 1495|    206|    return static_cast<Type*>(set->MutableMessage(
 1496|    206|        number, field_type, Type::default_instance(), nullptr));
 1497|    206|  }
_ZN6google8protobuf8internal12ExtensionSetC2EPNS0_5ArenaE:
 1066|    854|    : arena_(arena), flat_capacity_(0), flat_size_(0), map_{nullptr} {}
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet7ForEachIZNS2_D1EvE3$_0NS2_11PrefetchNtaEEEvT_T0_:
  839|    851|  void ForEach(KeyValueFunctor func, PrefetchFunctor prefetch_func) {
  840|    851|    if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|    851|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 851]
  |  |  |  Branch (365:54): [Folded, False: 851]
  |  |  |  Branch (365:63): [True: 0, False: 851]
  |  |  ------------------
  ------------------
  841|      0|      ForEachPrefetchImpl(map_.large->begin(), map_.large->end(),
  842|      0|                          std::move(func), std::move(prefetch_func));
  843|      0|      return;
  844|      0|    }
  845|    851|    ForEachPrefetchImpl(flat_begin(), flat_end(), std::move(func),
  846|    851|                        std::move(prefetch_func));
  847|    851|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet19ForEachPrefetchImplIPNS2_8KeyValueEZNS2_D1EvE3$_0NS2_11PrefetchNtaEEEvT_S8_T0_T1_:
  814|    851|                                  PrefetchFunctor prefetch_func) {
  815|       |    // Note: based on arena's ChunkList::Cleanup().
  816|       |    // Prefetch distance 16 performs better than 8 in load tests.
  817|    851|    constexpr int kPrefetchDistance = 16;
  818|    851|    Iterator prefetch = it;
  819|       |    // Prefetch the first kPrefetchDistance extensions.
  820|  1.28k|    for (int i = 0; prefetch != end && i < kPrefetchDistance; ++prefetch, ++i) {
  ------------------
  |  Branch (820:21): [True: 432, False: 851]
  |  Branch (820:40): [True: 432, False: 0]
  ------------------
  821|    432|      prefetch_func(prefetch->second.PrefetchPtr());
  822|    432|    }
  823|       |    // For the middle extensions, call func and then prefetch the extension
  824|       |    // kPrefetchDistance after the current one.
  825|    851|    for (; prefetch != end; ++it, ++prefetch) {
  ------------------
  |  Branch (825:12): [True: 0, False: 851]
  ------------------
  826|      0|      func(it->first, it->second);
  827|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  828|      0|    }
  829|       |    // Call func on the rest without prefetching.
  830|  1.28k|    for (; it != end; ++it) func(it->first, it->second);
  ------------------
  |  Branch (830:12): [True: 432, False: 851]
  ------------------
  831|    851|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet7ForEachIZNS2_5ClearEvE3$_0NS2_8PrefetchEEEvT_T0_:
  839|     19|  void ForEach(KeyValueFunctor func, PrefetchFunctor prefetch_func) {
  840|     19|    if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|     19|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 19]
  |  |  |  Branch (365:54): [Folded, False: 19]
  |  |  |  Branch (365:63): [True: 0, False: 19]
  |  |  ------------------
  ------------------
  841|      0|      ForEachPrefetchImpl(map_.large->begin(), map_.large->end(),
  842|      0|                          std::move(func), std::move(prefetch_func));
  843|      0|      return;
  844|      0|    }
  845|     19|    ForEachPrefetchImpl(flat_begin(), flat_end(), std::move(func),
  846|     19|                        std::move(prefetch_func));
  847|     19|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet19ForEachPrefetchImplIPNS2_8KeyValueEZNS2_5ClearEvE3$_0NS2_8PrefetchEEEvT_S8_T0_T1_:
  814|     19|                                  PrefetchFunctor prefetch_func) {
  815|       |    // Note: based on arena's ChunkList::Cleanup().
  816|       |    // Prefetch distance 16 performs better than 8 in load tests.
  817|     19|    constexpr int kPrefetchDistance = 16;
  818|     19|    Iterator prefetch = it;
  819|       |    // Prefetch the first kPrefetchDistance extensions.
  820|     19|    for (int i = 0; prefetch != end && i < kPrefetchDistance; ++prefetch, ++i) {
  ------------------
  |  Branch (820:21): [True: 0, False: 19]
  |  Branch (820:40): [True: 0, False: 0]
  ------------------
  821|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  822|      0|    }
  823|       |    // For the middle extensions, call func and then prefetch the extension
  824|       |    // kPrefetchDistance after the current one.
  825|     19|    for (; prefetch != end; ++it, ++prefetch) {
  ------------------
  |  Branch (825:12): [True: 0, False: 19]
  ------------------
  826|      0|      func(it->first, it->second);
  827|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  828|      0|    }
  829|       |    // Call func on the rest without prefetching.
  830|     19|    for (; it != end; ++it) func(it->first, it->second);
  ------------------
  |  Branch (830:12): [True: 0, False: 19]
  ------------------
  831|     19|  }
extension_set.cc:_ZNK6google8protobuf8internal12ExtensionSet7ForEachIZNS2_9MergeFromEPKNS0_11MessageLiteERKS2_E3$_0NS2_8PrefetchEEEvT_T0_:
  850|  1.04k|  void ForEach(KeyValueFunctor func, PrefetchFunctor prefetch_func) const {
  851|  1.04k|    if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|  1.04k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.04k]
  |  |  |  Branch (365:54): [Folded, False: 1.04k]
  |  |  |  Branch (365:63): [True: 0, False: 1.04k]
  |  |  ------------------
  ------------------
  852|      0|      ForEachPrefetchImpl(map_.large->begin(), map_.large->end(),
  853|      0|                          std::move(func), std::move(prefetch_func));
  854|      0|      return;
  855|      0|    }
  856|  1.04k|    ForEachPrefetchImpl(flat_begin(), flat_end(), std::move(func),
  857|  1.04k|                        std::move(prefetch_func));
  858|  1.04k|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet19ForEachPrefetchImplIPKNS2_8KeyValueEZNS2_9MergeFromEPKNS0_11MessageLiteERKS2_E3$_0NS2_8PrefetchEEEvT_SE_T0_T1_:
  814|  1.04k|                                  PrefetchFunctor prefetch_func) {
  815|       |    // Note: based on arena's ChunkList::Cleanup().
  816|       |    // Prefetch distance 16 performs better than 8 in load tests.
  817|  1.04k|    constexpr int kPrefetchDistance = 16;
  818|  1.04k|    Iterator prefetch = it;
  819|       |    // Prefetch the first kPrefetchDistance extensions.
  820|  1.70k|    for (int i = 0; prefetch != end && i < kPrefetchDistance; ++prefetch, ++i) {
  ------------------
  |  Branch (820:21): [True: 662, False: 1.04k]
  |  Branch (820:40): [True: 662, False: 0]
  ------------------
  821|    662|      prefetch_func(prefetch->second.PrefetchPtr());
  822|    662|    }
  823|       |    // For the middle extensions, call func and then prefetch the extension
  824|       |    // kPrefetchDistance after the current one.
  825|  1.04k|    for (; prefetch != end; ++it, ++prefetch) {
  ------------------
  |  Branch (825:12): [True: 0, False: 1.04k]
  ------------------
  826|      0|      func(it->first, it->second);
  827|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  828|      0|    }
  829|       |    // Call func on the rest without prefetching.
  830|  1.70k|    for (; it != end; ++it) func(it->first, it->second);
  ------------------
  |  Branch (830:12): [True: 662, False: 1.04k]
  ------------------
  831|  1.04k|  }
extension_set.cc:_ZNK6google8protobuf8internal12ExtensionSet7ForEachIZNKS2_8ByteSizeEvE3$_0NS2_8PrefetchEEEvT_T0_:
  850|    604|  void ForEach(KeyValueFunctor func, PrefetchFunctor prefetch_func) const {
  851|    604|    if (PROTOBUF_PREDICT_FALSE(is_large())) {
  ------------------
  |  |  365|    604|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 604]
  |  |  |  Branch (365:54): [Folded, False: 604]
  |  |  |  Branch (365:63): [True: 0, False: 604]
  |  |  ------------------
  ------------------
  852|      0|      ForEachPrefetchImpl(map_.large->begin(), map_.large->end(),
  853|      0|                          std::move(func), std::move(prefetch_func));
  854|      0|      return;
  855|      0|    }
  856|    604|    ForEachPrefetchImpl(flat_begin(), flat_end(), std::move(func),
  857|    604|                        std::move(prefetch_func));
  858|    604|  }
extension_set.cc:_ZN6google8protobuf8internal12ExtensionSet19ForEachPrefetchImplIPKNS2_8KeyValueEZNKS2_8ByteSizeEvE3$_0NS2_8PrefetchEEEvT_S9_T0_T1_:
  814|    604|                                  PrefetchFunctor prefetch_func) {
  815|       |    // Note: based on arena's ChunkList::Cleanup().
  816|       |    // Prefetch distance 16 performs better than 8 in load tests.
  817|    604|    constexpr int kPrefetchDistance = 16;
  818|    604|    Iterator prefetch = it;
  819|       |    // Prefetch the first kPrefetchDistance extensions.
  820|  1.02k|    for (int i = 0; prefetch != end && i < kPrefetchDistance; ++prefetch, ++i) {
  ------------------
  |  Branch (820:21): [True: 416, False: 604]
  |  Branch (820:40): [True: 416, False: 0]
  ------------------
  821|    416|      prefetch_func(prefetch->second.PrefetchPtr());
  822|    416|    }
  823|       |    // For the middle extensions, call func and then prefetch the extension
  824|       |    // kPrefetchDistance after the current one.
  825|    604|    for (; prefetch != end; ++it, ++prefetch) {
  ------------------
  |  Branch (825:12): [True: 0, False: 604]
  ------------------
  826|      0|      func(it->first, it->second);
  827|      0|      prefetch_func(prefetch->second.PrefetchPtr());
  828|      0|    }
  829|       |    // Call func on the rest without prefetching.
  830|  1.02k|    for (; it != end; ++it) func(it->first, it->second);
  ------------------
  |  Branch (830:12): [True: 416, False: 604]
  ------------------
  831|    604|  }

_ZN6google8protobuf8internal12ExtensionSet10ParseFieldEmPKcPKNS0_7MessageEPNS1_16InternalMetadataEPNS1_12ParseContextE:
  328|      8|                                     internal::ParseContext* ctx) {
  329|      8|  int number = tag >> 3;
  330|      8|  bool was_packed_on_wire;
  331|      8|  ExtensionInfo extension;
  332|      8|  if (!FindExtension(tag & 7, number, extendee, ctx, &extension,
  ------------------
  |  Branch (332:7): [True: 0, False: 8]
  ------------------
  333|      8|                     &was_packed_on_wire)) {
  334|      0|    return UnknownFieldParse(
  335|      0|        tag, metadata->mutable_unknown_fields<UnknownFieldSet>(), ptr, ctx);
  336|      0|  }
  337|      8|  return ParseFieldWithExtensionInfo<UnknownFieldSet>(
  338|      8|      number, was_packed_on_wire, extension, metadata, ptr, ctx);
  339|      8|}
_ZN6google8protobuf8internal12ExtensionSet13FindExtensionEijPKNS0_7MessageEPKNS1_12ParseContextEPNS1_13ExtensionInfoEPb:
  306|      8|                                 bool* was_packed_on_wire) {
  307|      8|  if (ctx->data().pool == nullptr) {
  ------------------
  |  Branch (307:7): [True: 8, False: 0]
  ------------------
  308|      8|    GeneratedExtensionFinder finder(extendee);
  309|      8|    if (!FindExtensionInfoFromFieldNumber(wire_type, field, &finder, extension,
  ------------------
  |  Branch (309:9): [True: 0, False: 8]
  ------------------
  310|      8|                                          was_packed_on_wire)) {
  311|      0|      return false;
  312|      0|    }
  313|      8|  } else {
  314|      0|    DescriptorPoolExtensionFinder finder(ctx->data().pool, ctx->data().factory,
  315|      0|                                         extendee->GetDescriptor());
  316|      0|    if (!FindExtensionInfoFromFieldNumber(wire_type, field, &finder, extension,
  ------------------
  |  Branch (316:9): [True: 0, False: 0]
  ------------------
  317|      0|                                          was_packed_on_wire)) {
  318|      0|      return false;
  319|      0|    }
  320|      0|  }
  321|      8|  return true;
  322|      8|}

_ZN6google8protobuf8internal12ExtensionSet27ParseFieldWithExtensionInfoINS0_15UnknownFieldSetEEEPKcibRKNS1_13ExtensionInfoEPNS1_16InternalMetadataES6_PNS1_12ParseContextE:
   22|      8|    InternalMetadata* metadata, const char* ptr, internal::ParseContext* ctx) {
   23|      8|  if (was_packed_on_wire) {
  ------------------
  |  Branch (23:7): [True: 0, False: 8]
  ------------------
   24|      0|    switch (extension.type) {
  ------------------
  |  Branch (24:13): [True: 0, False: 0]
  ------------------
   25|      0|#define HANDLE_TYPE(UPPERCASE, CPP_CAMELCASE)                                \
   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
   29|      0|                                extension.descriptor),                       \
   30|      0|        ptr, ctx);
   31|      0|      HANDLE_TYPE(INT32, Int32);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   32|      0|      HANDLE_TYPE(INT64, Int64);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   33|      0|      HANDLE_TYPE(UINT32, UInt32);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   34|      0|      HANDLE_TYPE(UINT64, UInt64);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   35|      0|      HANDLE_TYPE(SINT32, SInt32);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   36|      0|      HANDLE_TYPE(SINT64, SInt64);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   37|      0|      HANDLE_TYPE(FIXED32, Fixed32);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   38|      0|      HANDLE_TYPE(FIXED64, Fixed64);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   39|      0|      HANDLE_TYPE(SFIXED32, SFixed32);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   40|      0|      HANDLE_TYPE(SFIXED64, SFixed64);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   41|      0|      HANDLE_TYPE(FLOAT, Float);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   42|      0|      HANDLE_TYPE(DOUBLE, Double);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   43|      0|      HANDLE_TYPE(BOOL, Bool);
  ------------------
  |  |   26|      0|  case WireFormatLite::TYPE_##UPPERCASE:                                     \
  |  |  ------------------
  |  |  |  Branch (26:3): [True: 0, False: 0]
  |  |  ------------------
  |  |   27|      0|    return internal::Packed##CPP_CAMELCASE##Parser(                          \
  |  |   28|      0|        MutableRawRepeatedField(number, extension.type, extension.is_packed, \
  |  |   29|      0|                                extension.descriptor),                       \
  |  |   30|      0|        ptr, ctx);
  ------------------
   44|      0|#undef HANDLE_TYPE
   45|       |
   46|      0|      case WireFormatLite::TYPE_ENUM:
  ------------------
  |  Branch (46:7): [True: 0, False: 0]
  ------------------
   47|      0|        return internal::PackedEnumParserArg<T>(
   48|      0|            MutableRawRepeatedField(number, extension.type, extension.is_packed,
   49|      0|                                    extension.descriptor),
   50|      0|            ptr, ctx, extension.enum_validity_check.func,
   51|      0|            extension.enum_validity_check.arg, metadata, number);
   52|      0|      case WireFormatLite::TYPE_STRING:
  ------------------
  |  Branch (52:7): [True: 0, False: 0]
  ------------------
   53|      0|      case WireFormatLite::TYPE_BYTES:
  ------------------
  |  Branch (53:7): [True: 0, False: 0]
  ------------------
   54|      0|      case WireFormatLite::TYPE_GROUP:
  ------------------
  |  Branch (54:7): [True: 0, False: 0]
  ------------------
   55|      0|      case WireFormatLite::TYPE_MESSAGE:
  ------------------
  |  Branch (55:7): [True: 0, False: 0]
  ------------------
   56|      0|        ABSL_LOG(FATAL) << "Non-primitive types can't be packed.";
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   57|      0|        break;
   58|      0|    }
   59|      8|  } else {
   60|      8|    switch (extension.type) {
  ------------------
  |  Branch (60:13): [True: 8, False: 0]
  ------------------
   61|      0|#define HANDLE_VARINT_TYPE(UPPERCASE, CPP_CAMELCASE)                        \
   62|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
   63|      0|    uint64_t value;                                                         \
   64|      0|    ptr = VarintParse(ptr, &value);                                         \
   65|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
   66|      0|    if (extension.is_repeated) {                                            \
   67|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
   68|      0|                         extension.is_packed, value, extension.descriptor); \
   69|      0|    } else {                                                                \
   70|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
   71|      0|                         extension.descriptor);                             \
   72|      0|    }                                                                       \
   73|      0|  } break
   74|       |
   75|      0|      HANDLE_VARINT_TYPE(INT32, Int32);
  ------------------
  |  |   62|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (62:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   63|      0|    uint64_t value;                                                         \
  |  |   64|      0|    ptr = VarintParse(ptr, &value);                                         \
  |  |   65|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (66:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   67|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   68|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   69|      0|    } else {                                                                \
  |  |   70|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   71|      0|                         extension.descriptor);                             \
  |  |   72|      0|    }                                                                       \
  |  |   73|      0|  } break
  ------------------
   76|      0|      HANDLE_VARINT_TYPE(INT64, Int64);
  ------------------
  |  |   62|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (62:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   63|      0|    uint64_t value;                                                         \
  |  |   64|      0|    ptr = VarintParse(ptr, &value);                                         \
  |  |   65|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (66:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   67|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   68|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   69|      0|    } else {                                                                \
  |  |   70|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   71|      0|                         extension.descriptor);                             \
  |  |   72|      0|    }                                                                       \
  |  |   73|      0|  } break
  ------------------
   77|      0|      HANDLE_VARINT_TYPE(UINT32, UInt32);
  ------------------
  |  |   62|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (62:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   63|      0|    uint64_t value;                                                         \
  |  |   64|      0|    ptr = VarintParse(ptr, &value);                                         \
  |  |   65|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (66:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   67|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   68|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   69|      0|    } else {                                                                \
  |  |   70|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   71|      0|                         extension.descriptor);                             \
  |  |   72|      0|    }                                                                       \
  |  |   73|      0|  } break
  ------------------
   78|      0|      HANDLE_VARINT_TYPE(UINT64, UInt64);
  ------------------
  |  |   62|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (62:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   63|      0|    uint64_t value;                                                         \
  |  |   64|      0|    ptr = VarintParse(ptr, &value);                                         \
  |  |   65|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (66:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   67|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   68|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   69|      0|    } else {                                                                \
  |  |   70|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   71|      0|                         extension.descriptor);                             \
  |  |   72|      0|    }                                                                       \
  |  |   73|      0|  } break
  ------------------
   79|      0|      HANDLE_VARINT_TYPE(BOOL, Bool);
  ------------------
  |  |   62|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (62:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   63|      0|    uint64_t value;                                                         \
  |  |   64|      0|    ptr = VarintParse(ptr, &value);                                         \
  |  |   65|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (66:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   67|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   68|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   69|      0|    } else {                                                                \
  |  |   70|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   71|      0|                         extension.descriptor);                             \
  |  |   72|      0|    }                                                                       \
  |  |   73|      0|  } break
  ------------------
   80|      0|#undef HANDLE_VARINT_TYPE
   81|      0|#define HANDLE_SVARINT_TYPE(UPPERCASE, CPP_CAMELCASE, SIZE)                 \
   82|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
   83|      0|    uint64_t val;                                                           \
   84|      0|    ptr = VarintParse(ptr, &val);                                           \
   85|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
   86|      0|    auto value = WireFormatLite::ZigZagDecode##SIZE(val);                   \
   87|      0|    if (extension.is_repeated) {                                            \
   88|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
   89|      0|                         extension.is_packed, value, extension.descriptor); \
   90|      0|    } else {                                                                \
   91|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
   92|      0|                         extension.descriptor);                             \
   93|      0|    }                                                                       \
   94|      0|  } break
   95|       |
   96|      0|      HANDLE_SVARINT_TYPE(SINT32, Int32, 32);
  ------------------
  |  |   82|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (82:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   83|      0|    uint64_t val;                                                           \
  |  |   84|      0|    ptr = VarintParse(ptr, &val);                                           \
  |  |   85|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|      0|    auto value = WireFormatLite::ZigZagDecode##SIZE(val);                   \
  |  |   87|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (87:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   89|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   90|      0|    } else {                                                                \
  |  |   91|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   92|      0|                         extension.descriptor);                             \
  |  |   93|      0|    }                                                                       \
  |  |   94|      0|  } break
  ------------------
   97|      0|      HANDLE_SVARINT_TYPE(SINT64, Int64, 64);
  ------------------
  |  |   82|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (82:3): [True: 0, False: 8]
  |  |  ------------------
  |  |   83|      0|    uint64_t val;                                                           \
  |  |   84|      0|    ptr = VarintParse(ptr, &val);                                           \
  |  |   85|      0|    GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);                                    \
  |  |  ------------------
  |  |  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  |  |  ------------------
  |  |  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  |  |  | 1154|      0|  }
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|      0|    auto value = WireFormatLite::ZigZagDecode##SIZE(val);                   \
  |  |   87|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (87:9): [True: 0, False: 0]
  |  |  ------------------
  |  |   88|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |   89|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |   90|      0|    } else {                                                                \
  |  |   91|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |   92|      0|                         extension.descriptor);                             \
  |  |   93|      0|    }                                                                       \
  |  |   94|      0|  } break
  ------------------
   98|      0|#undef HANDLE_SVARINT_TYPE
   99|      0|#define HANDLE_FIXED_TYPE(UPPERCASE, CPP_CAMELCASE, CPPTYPE)                \
  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  103|      0|    if (extension.is_repeated) {                                            \
  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  105|      0|                         extension.is_packed, value, extension.descriptor); \
  106|      0|    } else {                                                                \
  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  108|      0|                         extension.descriptor);                             \
  109|      0|    }                                                                       \
  110|      0|  } break
  111|       |
  112|      0|      HANDLE_FIXED_TYPE(FIXED32, UInt32, uint32_t);
  ------------------
  |  |  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (100:3): [True: 0, False: 8]
  |  |  ------------------
  |  |  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  |  |  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  |  |  103|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |  105|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |  106|      0|    } else {                                                                \
  |  |  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |  108|      0|                         extension.descriptor);                             \
  |  |  109|      0|    }                                                                       \
  |  |  110|      0|  } break
  ------------------
  113|      0|      HANDLE_FIXED_TYPE(FIXED64, UInt64, uint64_t);
  ------------------
  |  |  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (100:3): [True: 0, False: 8]
  |  |  ------------------
  |  |  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  |  |  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  |  |  103|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |  105|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |  106|      0|    } else {                                                                \
  |  |  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |  108|      0|                         extension.descriptor);                             \
  |  |  109|      0|    }                                                                       \
  |  |  110|      0|  } break
  ------------------
  114|      0|      HANDLE_FIXED_TYPE(SFIXED32, Int32, int32_t);
  ------------------
  |  |  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (100:3): [True: 0, False: 8]
  |  |  ------------------
  |  |  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  |  |  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  |  |  103|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |  105|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |  106|      0|    } else {                                                                \
  |  |  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |  108|      0|                         extension.descriptor);                             \
  |  |  109|      0|    }                                                                       \
  |  |  110|      0|  } break
  ------------------
  115|      0|      HANDLE_FIXED_TYPE(SFIXED64, Int64, int64_t);
  ------------------
  |  |  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (100:3): [True: 0, False: 8]
  |  |  ------------------
  |  |  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  |  |  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  |  |  103|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |  105|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |  106|      0|    } else {                                                                \
  |  |  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |  108|      0|                         extension.descriptor);                             \
  |  |  109|      0|    }                                                                       \
  |  |  110|      0|  } break
  ------------------
  116|      0|      HANDLE_FIXED_TYPE(FLOAT, Float, float);
  ------------------
  |  |  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (100:3): [True: 0, False: 8]
  |  |  ------------------
  |  |  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  |  |  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  |  |  103|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |  105|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |  106|      0|    } else {                                                                \
  |  |  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |  108|      0|                         extension.descriptor);                             \
  |  |  109|      0|    }                                                                       \
  |  |  110|      0|  } break
  ------------------
  117|      0|      HANDLE_FIXED_TYPE(DOUBLE, Double, double);
  ------------------
  |  |  100|      0|  case WireFormatLite::TYPE_##UPPERCASE: {                                  \
  |  |  ------------------
  |  |  |  Branch (100:3): [True: 0, False: 8]
  |  |  ------------------
  |  |  101|      0|    auto value = UnalignedLoad<CPPTYPE>(ptr);                               \
  |  |  102|      0|    ptr += sizeof(CPPTYPE);                                                 \
  |  |  103|      0|    if (extension.is_repeated) {                                            \
  |  |  ------------------
  |  |  |  Branch (103:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  104|      0|      Add##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE,          \
  |  |  105|      0|                         extension.is_packed, value, extension.descriptor); \
  |  |  106|      0|    } else {                                                                \
  |  |  107|      0|      Set##CPP_CAMELCASE(number, WireFormatLite::TYPE_##UPPERCASE, value,   \
  |  |  108|      0|                         extension.descriptor);                             \
  |  |  109|      0|    }                                                                       \
  |  |  110|      0|  } break
  ------------------
  118|      0|#undef HANDLE_FIXED_TYPE
  119|       |
  120|      0|      case WireFormatLite::TYPE_ENUM: {
  ------------------
  |  Branch (120:7): [True: 0, False: 8]
  ------------------
  121|      0|        uint64_t tmp;
  122|      0|        ptr = VarintParse(ptr, &tmp);
  123|      0|        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
  ------------------
  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  | 1154|      0|  }
  |  |  ------------------
  ------------------
  124|      0|        int value = tmp;
  125|       |
  126|      0|        if (!extension.enum_validity_check.func(
  ------------------
  |  Branch (126:13): [True: 0, False: 0]
  ------------------
  127|      0|                extension.enum_validity_check.arg, value)) {
  128|      0|          WriteVarint(number, value, metadata->mutable_unknown_fields<T>());
  129|      0|        } else if (extension.is_repeated) {
  ------------------
  |  Branch (129:20): [True: 0, False: 0]
  ------------------
  130|      0|          AddEnum(number, WireFormatLite::TYPE_ENUM, extension.is_packed, value,
  131|      0|                  extension.descriptor);
  132|      0|        } else {
  133|      0|          SetEnum(number, WireFormatLite::TYPE_ENUM, value,
  134|      0|                  extension.descriptor);
  135|      0|        }
  136|      0|        break;
  137|      0|      }
  138|       |
  139|      0|      case WireFormatLite::TYPE_BYTES:
  ------------------
  |  Branch (139:7): [True: 0, False: 8]
  ------------------
  140|      0|      case WireFormatLite::TYPE_STRING: {
  ------------------
  |  Branch (140:7): [True: 0, False: 8]
  ------------------
  141|      0|        std::string* value =
  142|      0|            extension.is_repeated
  ------------------
  |  Branch (142:13): [True: 0, False: 0]
  ------------------
  143|      0|                ? AddString(number, WireFormatLite::TYPE_STRING,
  144|      0|                            extension.descriptor)
  145|      0|                : MutableString(number, WireFormatLite::TYPE_STRING,
  146|      0|                                extension.descriptor);
  147|      0|        int size = ReadSize(&ptr);
  148|      0|        GOOGLE_PROTOBUF_PARSER_ASSERT(ptr);
  ------------------
  |  | 1157|      0|  GOOGLE_PROTOBUF_ASSERT_RETURN(predicate, nullptr)
  |  |  ------------------
  |  |  |  | 1150|      0|  if (!(predicate)) {                                  \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1150:7): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 1151|      0|    /*  ::raise(SIGINT);  */                           \
  |  |  |  | 1152|      0|    /*  ABSL_LOG(ERROR) << "Parse failure";  */        \
  |  |  |  | 1153|      0|    return ret;                                        \
  |  |  |  | 1154|      0|  }
  |  |  ------------------
  ------------------
  149|      0|        return ctx->ReadString(ptr, size, value);
  150|      0|      }
  151|       |
  152|      0|      case WireFormatLite::TYPE_GROUP: {
  ------------------
  |  Branch (152:7): [True: 0, False: 8]
  ------------------
  153|      0|        MessageLite* value =
  154|      0|            extension.is_repeated
  ------------------
  |  Branch (154:13): [True: 0, False: 0]
  ------------------
  155|      0|                ? AddMessage(number, WireFormatLite::TYPE_GROUP,
  156|      0|                             *extension.message_info.prototype,
  157|      0|                             extension.descriptor)
  158|      0|                : MutableMessage(number, WireFormatLite::TYPE_GROUP,
  159|      0|                                 *extension.message_info.prototype,
  160|      0|                                 extension.descriptor);
  161|      0|        uint32_t tag = (number << 3) + WireFormatLite::WIRETYPE_START_GROUP;
  162|      0|        return ctx->ParseGroup(value, ptr, tag);
  163|      0|      }
  164|       |
  165|      8|      case WireFormatLite::TYPE_MESSAGE: {
  ------------------
  |  Branch (165:7): [True: 8, False: 0]
  ------------------
  166|      8|        MessageLite* value =
  167|      8|            extension.is_repeated
  ------------------
  |  Branch (167:13): [True: 0, False: 8]
  ------------------
  168|      8|                ? AddMessage(number, WireFormatLite::TYPE_MESSAGE,
  169|      0|                             *extension.message_info.prototype,
  170|      0|                             extension.descriptor)
  171|      8|                : MutableMessage(number, WireFormatLite::TYPE_MESSAGE,
  172|      8|                                 *extension.message_info.prototype,
  173|      8|                                 extension.descriptor);
  174|      8|        return ctx->ParseMessage(value, ptr);
  175|      0|      }
  176|      8|    }
  177|      8|  }
  178|      0|  return ptr;
  179|      8|}

_ZN6google8protobuf15FeatureResolver6CreateENS0_7EditionERKNS0_18FeatureSetDefaultsE:
  490|      4|    Edition edition, const FeatureSetDefaults& compiled_defaults) {
  491|      4|  if (edition < compiled_defaults.minimum_edition()) {
  ------------------
  |  Branch (491:7): [True: 0, False: 4]
  ------------------
  492|      0|    return Error("Edition ", edition,
  493|      0|                 " is earlier than the minimum supported edition ",
  494|      0|                 compiled_defaults.minimum_edition());
  495|      0|  }
  496|      4|  if (compiled_defaults.maximum_edition() < edition) {
  ------------------
  |  Branch (496:7): [True: 0, False: 4]
  ------------------
  497|      0|    return Error("Edition ", edition,
  498|      0|                 " is later than the maximum supported edition ",
  499|      0|                 compiled_defaults.maximum_edition());
  500|      0|  }
  501|       |
  502|       |  // Validate compiled defaults.
  503|      4|  Edition prev_edition = EDITION_UNKNOWN;
  504|     16|  for (const auto& edition_default : compiled_defaults.defaults()) {
  ------------------
  |  Branch (504:36): [True: 16, False: 4]
  ------------------
  505|     16|    if (edition_default.edition() == EDITION_UNKNOWN) {
  ------------------
  |  Branch (505:9): [True: 0, False: 16]
  ------------------
  506|      0|      return Error("Invalid edition ", edition_default.edition(),
  507|      0|                   " specified.");
  508|      0|    }
  509|     16|    if (prev_edition != EDITION_UNKNOWN) {
  ------------------
  |  Branch (509:9): [True: 12, False: 4]
  ------------------
  510|     12|      if (edition_default.edition() <= prev_edition) {
  ------------------
  |  Branch (510:11): [True: 0, False: 12]
  ------------------
  511|      0|        return Error(
  512|      0|            "Feature set defaults are not strictly increasing.  Edition ",
  513|      0|            prev_edition, " is greater than or equal to edition ",
  514|      0|            edition_default.edition(), ".");
  515|      0|      }
  516|     12|    }
  517|     16|    FeatureSet features = edition_default.fixed_features();
  518|     16|    features.MergeFrom(edition_default.overridable_features());
  519|     16|    RETURN_IF_ERROR(ValidateMergedFeatures(features));
  ------------------
  |  |   42|     16|  do {                                                         \
  |  |   43|     16|    const absl::Status _status = (expr);                       \
  |  |   44|     16|    if (PROTOBUF_PREDICT_FALSE(!_status.ok())) return _status; \
  |  |  ------------------
  |  |  |  |  365|     16|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (365:36): [True: 0, False: 16]
  |  |  |  |  |  Branch (365:54): [Folded, False: 16]
  |  |  |  |  |  Branch (365:63): [True: 0, False: 16]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|     16|  } while (0)
  |  |  ------------------
  |  |  |  Branch (45:12): [Folded, False: 16]
  |  |  ------------------
  ------------------
  520|       |
  521|     16|    prev_edition = edition_default.edition();
  522|     16|  }
  523|       |
  524|       |  // Select the matching edition defaults.
  525|      4|  auto comparator = [](const auto& a, const auto& b) {
  526|      4|    return a.edition() < b.edition();
  527|      4|  };
  528|      4|  FeatureSetDefaults::FeatureSetEditionDefault search;
  529|      4|  search.set_edition(edition);
  530|      4|  auto first_nonmatch =
  531|      4|      absl::c_upper_bound(compiled_defaults.defaults(), search, comparator);
  532|      4|  if (first_nonmatch == compiled_defaults.defaults().begin()) {
  ------------------
  |  Branch (532:7): [True: 0, False: 4]
  ------------------
  533|      0|    return Error("No valid default found for edition ", edition);
  534|      0|  }
  535|       |
  536|      4|  FeatureSet features = std::prev(first_nonmatch)->fixed_features();
  537|      4|  features.MergeFrom(std::prev(first_nonmatch)->overridable_features());
  538|      4|  return FeatureResolver(std::move(features));
  539|      4|}
_ZNK6google8protobuf15FeatureResolver13MergeFeaturesERKNS0_10FeatureSetES4_:
  542|    210|    const FeatureSet& merged_parent, const FeatureSet& unmerged_child) const {
  543|    210|  FeatureSet merged = defaults_;
  544|    210|  merged.MergeFrom(merged_parent);
  545|    210|  merged.MergeFrom(unmerged_child);
  546|       |
  547|    210|  RETURN_IF_ERROR(ValidateMergedFeatures(merged));
  ------------------
  |  |   42|    210|  do {                                                         \
  |  |   43|    210|    const absl::Status _status = (expr);                       \
  |  |   44|    210|    if (PROTOBUF_PREDICT_FALSE(!_status.ok())) return _status; \
  |  |  ------------------
  |  |  |  |  365|    210|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (365:36): [True: 0, False: 210]
  |  |  |  |  |  Branch (365:54): [Folded, False: 210]
  |  |  |  |  |  Branch (365:63): [True: 0, False: 210]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   45|    210|  } while (0)
  |  |  ------------------
  |  |  |  Branch (45:12): [Folded, False: 210]
  |  |  ------------------
  ------------------
  548|       |
  549|    210|  return merged;
  550|    210|}
feature_resolver.cc:_ZN6google8protobuf12_GLOBAL__N_122ValidateMergedFeaturesERKNS0_10FeatureSetE:
  334|    226|absl::Status ValidateMergedFeatures(const FeatureSet& features) {
  335|       |// Avoid using reflection here because this is called early in the descriptor
  336|       |// builds.  Instead, a reflection-based test will be used to keep this in sync
  337|       |// with descriptor.proto.  These checks should be run on every global feature
  338|       |// in FeatureSet.
  339|    226|#define CHECK_ENUM_FEATURE(FIELD, CAMELCASE, UPPERCASE)               \
  340|    226|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  341|    226|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  342|    226|    return Error("Feature field `" #FIELD                             \
  343|    226|                 "` must resolve to a known value, found " #UPPERCASE \
  344|    226|                 "_UNKNOWN");                                         \
  345|    226|  }
  346|       |
  347|    226|  CHECK_ENUM_FEATURE(field_presence, FieldPresence, FIELD_PRESENCE)
  ------------------
  |  |  340|    226|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  |  |  ------------------
  |  |  |  Branch (340:7): [True: 0, False: 226]
  |  |  ------------------
  |  |  341|    226|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  |  |  ------------------
  |  |  |  Branch (341:7): [True: 0, False: 226]
  |  |  ------------------
  |  |  342|      0|    return Error("Feature field `" #FIELD                             \
  |  |  343|      0|                 "` must resolve to a known value, found " #UPPERCASE \
  |  |  344|      0|                 "_UNKNOWN");                                         \
  |  |  345|      0|  }
  ------------------
  348|    226|  CHECK_ENUM_FEATURE(enum_type, EnumType, ENUM_TYPE)
  ------------------
  |  |  340|    226|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  |  |  ------------------
  |  |  |  Branch (340:7): [True: 0, False: 226]
  |  |  ------------------
  |  |  341|    226|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  |  |  ------------------
  |  |  |  Branch (341:7): [True: 0, False: 226]
  |  |  ------------------
  |  |  342|      0|    return Error("Feature field `" #FIELD                             \
  |  |  343|      0|                 "` must resolve to a known value, found " #UPPERCASE \
  |  |  344|      0|                 "_UNKNOWN");                                         \
  |  |  345|      0|  }
  ------------------
  349|    226|  CHECK_ENUM_FEATURE(repeated_field_encoding, RepeatedFieldEncoding,
  ------------------
  |  |  340|    226|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  |  |  ------------------
  |  |  |  Branch (340:7): [True: 0, False: 226]
  |  |  ------------------
  |  |  341|    226|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  |  |  ------------------
  |  |  |  Branch (341:7): [True: 0, False: 226]
  |  |  ------------------
  |  |  342|      0|    return Error("Feature field `" #FIELD                             \
  |  |  343|      0|                 "` must resolve to a known value, found " #UPPERCASE \
  |  |  344|      0|                 "_UNKNOWN");                                         \
  |  |  345|      0|  }
  ------------------
  350|    226|                     REPEATED_FIELD_ENCODING)
  351|    226|  CHECK_ENUM_FEATURE(utf8_validation, Utf8Validation, UTF8_VALIDATION)
  ------------------
  |  |  340|    226|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  |  |  ------------------
  |  |  |  Branch (340:7): [True: 0, False: 226]
  |  |  ------------------
  |  |  341|    226|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  |  |  ------------------
  |  |  |  Branch (341:7): [True: 0, False: 226]
  |  |  ------------------
  |  |  342|      0|    return Error("Feature field `" #FIELD                             \
  |  |  343|      0|                 "` must resolve to a known value, found " #UPPERCASE \
  |  |  344|      0|                 "_UNKNOWN");                                         \
  |  |  345|      0|  }
  ------------------
  352|    226|  CHECK_ENUM_FEATURE(message_encoding, MessageEncoding, MESSAGE_ENCODING)
  ------------------
  |  |  340|    226|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  |  |  ------------------
  |  |  |  Branch (340:7): [True: 0, False: 226]
  |  |  ------------------
  |  |  341|    226|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  |  |  ------------------
  |  |  |  Branch (341:7): [True: 0, False: 226]
  |  |  ------------------
  |  |  342|      0|    return Error("Feature field `" #FIELD                             \
  |  |  343|      0|                 "` must resolve to a known value, found " #UPPERCASE \
  |  |  344|      0|                 "_UNKNOWN");                                         \
  |  |  345|      0|  }
  ------------------
  353|    226|  CHECK_ENUM_FEATURE(json_format, JsonFormat, JSON_FORMAT)
  ------------------
  |  |  340|    226|  if (!FeatureSet::CAMELCASE##_IsValid(features.FIELD()) ||           \
  |  |  ------------------
  |  |  |  Branch (340:7): [True: 0, False: 226]
  |  |  ------------------
  |  |  341|    226|      features.FIELD() == FeatureSet::UPPERCASE##_UNKNOWN) {          \
  |  |  ------------------
  |  |  |  Branch (341:7): [True: 0, False: 226]
  |  |  ------------------
  |  |  342|      0|    return Error("Feature field `" #FIELD                             \
  |  |  343|      0|                 "` must resolve to a known value, found " #UPPERCASE \
  |  |  344|      0|                 "_UNKNOWN");                                         \
  |  |  345|      0|  }
  ------------------
  354|       |
  355|    226|#undef CHECK_ENUM_FEATURE
  356|       |
  357|    226|  return absl::OkStatus();
  358|    226|}
feature_resolver.cc:_ZZN6google8protobuf15FeatureResolver6CreateENS0_7EditionERKNS0_18FeatureSetDefaultsEENK3$_0clINS0_43FeatureSetDefaults_FeatureSetEditionDefaultES8_EEDaRKT_RKT0_:
  525|     11|  auto comparator = [](const auto& a, const auto& b) {
  526|     11|    return a.edition() < b.edition();
  527|     11|  };

_ZN6google8protobuf15FeatureResolverC2EOS1_:
   35|      8|  FeatureResolver(FeatureResolver&&) = default;
_ZN6google8protobuf15FeatureResolverC2ENS0_10FeatureSetE:
   78|      4|      : defaults_(std::move(defaults)) {}

_ZN6google8protobuf8internal12ValidateEnumEiPKj:
   80|      1|bool ValidateEnum(int value, const uint32_t* data) {
   81|      1|  return ValidateEnumInlined(value, data);
   82|      1|}

_ZN6google8protobuf8internal19ValidateEnumInlinedEiPKj:
   79|     94|                                                       const uint32_t* data) {
   80|     94|  const int16_t min_seq = static_cast<int16_t>(data[0] & 0xFFFF);
   81|     94|  const uint16_t length_seq = static_cast<uint16_t>(data[0] >> 16);
   82|     94|  uint64_t adjusted =
   83|     94|      static_cast<uint64_t>(static_cast<int64_t>(value)) - min_seq;
   84|       |  // Check if the value is within the sequential part.
   85|     94|  if (PROTOBUF_PREDICT_TRUE(adjusted < length_seq)) {
  ------------------
  |  |  364|     94|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 94]
  |  |  |  Branch (364:53): [Folded, False: 94]
  |  |  |  Branch (364:62): [True: 0, False: 94]
  |  |  ------------------
  ------------------
   86|      0|    return true;
   87|      0|  }
   88|       |
   89|     94|  const uint16_t length_bitmap = static_cast<uint16_t>(data[1] & 0xFFFF);
   90|     94|  adjusted -= length_seq;
   91|       |  // Check if the value is within the bitmap.
   92|     94|  if (PROTOBUF_PREDICT_TRUE(adjusted < length_bitmap)) {
  ------------------
  |  |  364|     94|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 4, False: 90]
  |  |  |  Branch (364:53): [Folded, False: 94]
  |  |  |  Branch (364:62): [True: 4, False: 90]
  |  |  ------------------
  ------------------
   93|      4|    return ((data[2 + (adjusted / 32)] >> (adjusted % 32)) & 1) == 1;
   94|      4|  }
   95|       |
   96|       |  // Check if the value is on the ordered part.
   97|     90|  const uint16_t num_ordered = static_cast<uint16_t>(data[1] >> 16);
   98|     90|  data += 2 + length_bitmap / 32;
   99|     90|  size_t pos = 0;
  100|    286|  while (pos < num_ordered) {
  ------------------
  |  Branch (100:10): [True: 286, False: 0]
  ------------------
  101|    286|    const int32_t sample = static_cast<int32_t>(data[pos]);
  102|    286|    if (sample == value) return true;
  ------------------
  |  Branch (102:9): [True: 90, False: 196]
  ------------------
  103|    196|    pos = 2 * pos + (sample > value ? 1 : 2);
  ------------------
  |  Branch (103:22): [True: 166, False: 30]
  ------------------
  104|    196|  }
  105|      0|  return false;
  106|     90|}

_ZN6google8protobuf8internal40InitializeFileDescriptorDefaultInstancesEv:
   93|      6|void InitializeFileDescriptorDefaultInstances() {
   94|       |#if !defined(PROTOBUF_CONSTINIT_DEFAULT_INSTANCES)
   95|       |  static std::true_type init =
   96|       |      (InitializeFileDescriptorDefaultInstancesSlow(), std::true_type{});
   97|       |  (void)init;
   98|       |#endif  // !defined(PROTOBUF_CONSTINIT_DEFAULT_INSTANCES)
   99|      6|}
_ZN6google8protobuf8internal26InitializeLazyExtensionSetEv:
  101|      6|void InitializeLazyExtensionSet() {
  102|      6|}
_ZN6google8protobuf10ReflectionC2EPKNS0_10DescriptorERKNS0_8internal16ReflectionSchemaEPKNS0_14DescriptorPoolEPNS0_14MessageFactoryE:
  314|     45|    : descriptor_(descriptor),
  315|     45|      schema_(schema),
  316|       |      descriptor_pool_(
  317|     45|          (pool == nullptr) ? DescriptorPool::internal_generated_pool() : pool),
  ------------------
  |  Branch (317:11): [True: 0, False: 45]
  ------------------
  318|     45|      message_factory_(factory),
  319|     45|      last_non_weak_field_index_(-1) {
  320|     45|  last_non_weak_field_index_ = descriptor_->field_count() - 1;
  321|     45|}
_ZNK6google8protobuf10Reflection8HasFieldERKNS0_7MessageEPKNS0_15FieldDescriptorE:
 1224|   167k|                          const FieldDescriptor* field) const {
 1225|   167k|  USAGE_CHECK_MESSAGE(HasField, &message);
 1226|   167k|  USAGE_CHECK_MESSAGE_TYPE(HasField);
  ------------------
  |  |  286|   167k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  ------------------
  |  |  |  |  262|   167k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|   167k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 167k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  260|   167k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  287|   167k|                 "Field does not match message type.");
  ------------------
 1227|   167k|  USAGE_CHECK_SINGULAR(HasField);
  ------------------
  |  |  289|   167k|  USAGE_CHECK_NE(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  ------------------
  |  |  |  |  264|   167k|  USAGE_CHECK((A) != (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|   167k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 167k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  260|   167k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  290|   167k|                 "Field is repeated; the method requires a singular field.")
  ------------------
 1228|       |
 1229|   167k|  if (field->is_extension()) {
  ------------------
  |  Branch (1229:7): [True: 0, False: 167k]
  ------------------
 1230|      0|    return GetExtensionSet(message).Has(field->number());
 1231|   167k|  } else {
 1232|   167k|    if (schema_.InRealOneof(field)) {
  ------------------
  |  Branch (1232:9): [True: 23.6k, False: 143k]
  ------------------
 1233|  23.6k|      return HasOneofField(message, field);
 1234|   143k|    } else {
 1235|   143k|      return HasFieldSingular(message, field);
 1236|   143k|    }
 1237|   167k|  }
 1238|   167k|}
_ZNK6google8protobuf10Reflection9FieldSizeERKNS0_7MessageEPKNS0_15FieldDescriptorE:
 1325|  89.3k|                          const FieldDescriptor* field) const {
 1326|  89.3k|  USAGE_CHECK_MESSAGE(FieldSize, &message);
 1327|  89.3k|  USAGE_CHECK_MESSAGE_TYPE(FieldSize);
  ------------------
  |  |  286|  89.3k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  ------------------
  |  |  |  |  262|  89.3k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  89.3k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 89.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  260|  89.3k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  287|  89.3k|                 "Field does not match message type.");
  ------------------
 1328|  89.3k|  USAGE_CHECK_REPEATED(FieldSize);
  ------------------
  |  |  292|  89.3k|  USAGE_CHECK_EQ(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  ------------------
  |  |  |  |  262|  89.3k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  |  |  |  |  259|  89.3k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 89.3k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  260|  89.3k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  293|  89.3k|                 "Field is singular; the method requires a repeated field.")
  ------------------
 1329|       |
 1330|  89.3k|  if (field->is_extension()) {
  ------------------
  |  Branch (1330:7): [True: 0, False: 89.3k]
  ------------------
 1331|      0|    return GetExtensionSet(message).ExtensionSize(field->number());
 1332|  89.3k|  } else {
 1333|  89.3k|    switch (field->cpp_type()) {
  ------------------
  |  Branch (1333:13): [True: 89.3k, False: 0]
  ------------------
 1334|      0|#define HANDLE_TYPE(UPPERCASE, LOWERCASE)    \
 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
 1337|       |
 1338|      0|      HANDLE_TYPE(INT32, int32_t);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 89.3k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1339|      0|      HANDLE_TYPE(INT64, int64_t);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 89.3k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1340|      0|      HANDLE_TYPE(UINT32, uint32_t);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 89.3k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1341|      0|      HANDLE_TYPE(UINT64, uint64_t);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 89.3k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1342|      0|      HANDLE_TYPE(DOUBLE, double);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 89.3k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1343|      0|      HANDLE_TYPE(FLOAT, float);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 89.3k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1344|      0|      HANDLE_TYPE(BOOL, bool);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 89.3k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1345|      0|      HANDLE_TYPE(ENUM, int);
  ------------------
  |  | 1335|      0|  case FieldDescriptor::CPPTYPE_##UPPERCASE: \
  |  |  ------------------
  |  |  |  Branch (1335:3): [True: 0, False: 89.3k]
  |  |  ------------------
  |  | 1336|      0|    return GetRaw<RepeatedField<LOWERCASE> >(message, field).size()
  ------------------
 1346|      0|#undef HANDLE_TYPE
 1347|       |
 1348|      0|      case FieldDescriptor::CPPTYPE_STRING:
  ------------------
  |  Branch (1348:7): [True: 0, False: 89.3k]
  ------------------
 1349|      0|        if (field->cpp_string_type() == FieldDescriptor::CppStringType::kCord) {
  ------------------
  |  Branch (1349:13): [True: 0, False: 0]
  ------------------
 1350|      0|          return GetRaw<RepeatedField<absl::Cord> >(message, field).size();
 1351|      0|        }
 1352|      0|        ABSL_FALLTHROUGH_INTENDED;
  ------------------
  |  |  644|      0|#define ABSL_FALLTHROUGH_INTENDED [[fallthrough]]
  ------------------
 1353|  89.3k|      case FieldDescriptor::CPPTYPE_MESSAGE:
  ------------------
  |  Branch (1353:7): [True: 89.3k, False: 0]
  ------------------
 1354|  89.3k|        if (IsMapFieldInApi(field)) {
  ------------------
  |  Branch (1354:13): [True: 0, False: 89.3k]
  ------------------
 1355|      0|          const internal::MapFieldBase& map =
 1356|      0|              GetRaw<MapFieldBase>(message, field);
 1357|      0|          if (map.IsRepeatedFieldValid()) {
  ------------------
  |  Branch (1357:15): [True: 0, False: 0]
  ------------------
 1358|      0|            return map.GetRepeatedField().size();
 1359|      0|          } else {
 1360|       |            // No need to materialize the repeated field if it is out of sync:
 1361|       |            // its size will be the same as the map's size.
 1362|      0|            return map.size();
 1363|      0|          }
 1364|  89.3k|        } else {
 1365|  89.3k|          return GetRaw<RepeatedPtrFieldBase>(message, field).size();
 1366|  89.3k|        }
 1367|  89.3k|    }
 1368|       |
 1369|      0|    ABSL_LOG(FATAL) << "Can't get here.";
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|  89.3k|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|  89.3k|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1370|      0|    return 0;
 1371|      0|  }
 1372|  89.3k|}
_ZNK6google8protobuf10Reflection9SetUInt32EPNS0_7MessageEPKNS0_15FieldDescriptorEj:
 1765|  8.42k|      Message* message, const FieldDescriptor* field, PASSTYPE value) const {  \
 1766|  8.42k|    USAGE_MUTABLE_CHECK_ALL(Set##TYPENAME, SINGULAR, CPPTYPE);                 \
  ------------------
  |  |  302|  8.42k|  USAGE_CHECK_MESSAGE(METHOD, message);                 \
  |  |  303|  8.42k|  USAGE_CHECK_MESSAGE_TYPE(METHOD);                     \
  |  |  ------------------
  |  |  |  |  286|  8.42k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  8.42k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  8.42k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 8.42k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  8.42k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  287|  8.42k|                 "Field does not match message type.");
  |  |  ------------------
  |  |  304|  8.42k|  USAGE_CHECK_##LABEL(METHOD);                          \
  |  |  ------------------
  |  |  |  |  289|  8.42k|  USAGE_CHECK_NE(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  8.42k|  USAGE_CHECK((A) != (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  8.42k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 8.42k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  8.42k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  290|  8.42k|                 "Field is repeated; the method requires a singular field.")
  |  |  ------------------
  |  |  305|  8.42k|  USAGE_CHECK_TYPE(METHOD, CPPTYPE)
  |  |  ------------------
  |  |  |  |  267|  8.42k|  if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (267:7): [True: 0, False: 8.42k]
  |  |  |  |  ------------------
  |  |  |  |  268|  8.42k|  ReportReflectionUsageTypeError(descriptor_, field, #METHOD,  \
  |  |  |  |  269|      0|                                 FieldDescriptor::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  ------------------
 1767|  8.42k|    if (field->is_extension()) {                                               \
  ------------------
  |  Branch (1767:9): [True: 0, False: 8.42k]
  ------------------
 1768|      0|      return MutableExtensionSet(message)->Set##TYPENAME(                      \
 1769|      0|          field->number(), field->type(), value, field);                       \
 1770|  8.42k|    } else {                                                                   \
 1771|  8.42k|      SetField<TYPE>(message, field, value);                                   \
 1772|  8.42k|    }                                                                          \
 1773|  8.42k|  }                                                                            \
_ZNK6google8protobuf10Reflection7SetBoolEPNS0_7MessageEPKNS0_15FieldDescriptorEb:
 1765|      3|      Message* message, const FieldDescriptor* field, PASSTYPE value) const {  \
 1766|      3|    USAGE_MUTABLE_CHECK_ALL(Set##TYPENAME, SINGULAR, CPPTYPE);                 \
  ------------------
  |  |  302|      3|  USAGE_CHECK_MESSAGE(METHOD, message);                 \
  |  |  303|      3|  USAGE_CHECK_MESSAGE_TYPE(METHOD);                     \
  |  |  ------------------
  |  |  |  |  286|      3|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|      3|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|      3|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|      3|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  287|      3|                 "Field does not match message type.");
  |  |  ------------------
  |  |  304|      3|  USAGE_CHECK_##LABEL(METHOD);                          \
  |  |  ------------------
  |  |  |  |  289|      3|  USAGE_CHECK_NE(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      3|  USAGE_CHECK((A) != (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|      3|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|      3|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  290|      3|                 "Field is repeated; the method requires a singular field.")
  |  |  ------------------
  |  |  305|      3|  USAGE_CHECK_TYPE(METHOD, CPPTYPE)
  |  |  ------------------
  |  |  |  |  267|      3|  if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (267:7): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  |  |  268|      3|  ReportReflectionUsageTypeError(descriptor_, field, #METHOD,  \
  |  |  |  |  269|      0|                                 FieldDescriptor::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  ------------------
 1767|      3|    if (field->is_extension()) {                                               \
  ------------------
  |  Branch (1767:9): [True: 0, False: 3]
  ------------------
 1768|      0|      return MutableExtensionSet(message)->Set##TYPENAME(                      \
 1769|      0|          field->number(), field->type(), value, field);                       \
 1770|      3|    } else {                                                                   \
 1771|      3|      SetField<TYPE>(message, field, value);                                   \
 1772|      3|    }                                                                          \
 1773|      3|  }                                                                            \
_ZNK6google8protobuf10Reflection9SetStringEPNS0_7MessageEPKNS0_15FieldDescriptorENSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEE:
 1946|  17.9k|                           std::string value) const {
 1947|  17.9k|  USAGE_MUTABLE_CHECK_ALL(SetString, SINGULAR, STRING);
  ------------------
  |  |  302|  17.9k|  USAGE_CHECK_MESSAGE(METHOD, message);                 \
  |  |  303|  17.9k|  USAGE_CHECK_MESSAGE_TYPE(METHOD);                     \
  |  |  ------------------
  |  |  |  |  286|  17.9k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  17.9k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  17.9k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 17.9k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  17.9k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  287|  17.9k|                 "Field does not match message type.");
  |  |  ------------------
  |  |  304|  17.9k|  USAGE_CHECK_##LABEL(METHOD);                          \
  |  |  ------------------
  |  |  |  |  289|  17.9k|  USAGE_CHECK_NE(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  17.9k|  USAGE_CHECK((A) != (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  17.9k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 17.9k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  17.9k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  290|  17.9k|                 "Field is repeated; the method requires a singular field.")
  |  |  ------------------
  |  |  305|  17.9k|  USAGE_CHECK_TYPE(METHOD, CPPTYPE)
  |  |  ------------------
  |  |  |  |  267|  17.9k|  if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (267:7): [True: 0, False: 17.9k]
  |  |  |  |  ------------------
  |  |  |  |  268|  17.9k|  ReportReflectionUsageTypeError(descriptor_, field, #METHOD,  \
  |  |  |  |  269|      0|                                 FieldDescriptor::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  ------------------
 1948|  17.9k|  if (field->is_extension()) {
  ------------------
  |  Branch (1948:7): [True: 0, False: 17.9k]
  ------------------
 1949|      0|    return MutableExtensionSet(message)->SetString(
 1950|      0|        field->number(), field->type(), std::move(value), field);
 1951|  17.9k|  } else {
 1952|  17.9k|    switch (field->cpp_string_type()) {
  ------------------
  |  Branch (1952:13): [True: 17.9k, False: 0]
  ------------------
 1953|      0|      case FieldDescriptor::CppStringType::kCord:
  ------------------
  |  Branch (1953:7): [True: 0, False: 17.9k]
  ------------------
 1954|      0|        if (schema_.InRealOneof(field)) {
  ------------------
  |  Branch (1954:13): [True: 0, False: 0]
  ------------------
 1955|      0|          if (!HasOneofField(*message, field)) {
  ------------------
  |  Branch (1955:15): [True: 0, False: 0]
  ------------------
 1956|      0|            ClearOneof(message, field->containing_oneof());
 1957|      0|            *MutableField<absl::Cord*>(message, field) =
 1958|      0|                Arena::Create<absl::Cord>(message->GetArena());
 1959|      0|          }
 1960|      0|          *(*MutableField<absl::Cord*>(message, field)) = value;
 1961|      0|          break;
 1962|      0|        }
 1963|      0|        *MutableField<absl::Cord>(message, field) = value;
 1964|      0|        break;
 1965|      0|      case FieldDescriptor::CppStringType::kView:
  ------------------
  |  Branch (1965:7): [True: 0, False: 17.9k]
  ------------------
 1966|  17.9k|      case FieldDescriptor::CppStringType::kString: {
  ------------------
  |  Branch (1966:7): [True: 17.9k, False: 0]
  ------------------
 1967|  17.9k|        if (IsInlined(field)) {
  ------------------
  |  Branch (1967:13): [True: 0, False: 17.9k]
  ------------------
 1968|      0|          const uint32_t index = schema_.InlinedStringIndex(field);
 1969|      0|          ABSL_DCHECK_GT(index, 0u);
  ------------------
  |  |   84|      0|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   96|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1970|      0|          uint32_t* states =
 1971|      0|              &MutableInlinedStringDonatedArray(message)[index / 32];
 1972|      0|          uint32_t mask = ~(static_cast<uint32_t>(1) << (index % 32));
 1973|      0|          MutableField<InlinedStringField>(message, field)
 1974|      0|              ->Set(value, message->GetArena(),
 1975|      0|                    IsInlinedStringDonated(*message, field), states, mask,
 1976|      0|                    message);
 1977|      0|          break;
 1978|      0|        }
 1979|       |
 1980|       |        // Oneof string fields are never set as a default instance.
 1981|       |        // We just need to pass some arbitrary default string to make it work.
 1982|       |        // This allows us to not have the real default accessible from
 1983|       |        // reflection.
 1984|  17.9k|        if (schema_.InRealOneof(field) && !HasOneofField(*message, field)) {
  ------------------
  |  Branch (1984:13): [True: 1.03k, False: 16.9k]
  |  Branch (1984:43): [True: 1.03k, False: 0]
  ------------------
 1985|  1.03k|          ClearOneof(message, field->containing_oneof());
 1986|  1.03k|          MutableField<ArenaStringPtr>(message, field)->InitDefault();
 1987|  1.03k|        }
 1988|  17.9k|        MutableField<ArenaStringPtr>(message, field)
 1989|  17.9k|            ->Set(std::move(value), message->GetArena());
 1990|  17.9k|        break;
 1991|  17.9k|      }
 1992|  17.9k|    }
 1993|  17.9k|  }
 1994|  17.9k|}
_ZNK6google8protobuf10Reflection25GetDefaultMessageInstanceEPKNS0_15FieldDescriptorE:
 2305|  32.7k|    const FieldDescriptor* field) const {
 2306|       |  // If we are using the generated factory, we cache the prototype in the field
 2307|       |  // descriptor for faster access.
 2308|       |  // The default instances of generated messages are not cross-linked, which
 2309|       |  // means they contain null pointers on their message fields and can't be used
 2310|       |  // to get the default of submessages.
 2311|  32.7k|  if (message_factory_ == MessageFactory::generated_factory()) {
  ------------------
  |  Branch (2311:7): [True: 32.7k, False: 0]
  ------------------
 2312|  32.7k|    auto& ptr = field->default_generated_instance_;
 2313|  32.7k|    auto* res = ptr.load(std::memory_order_acquire);
 2314|  32.7k|    if (res == nullptr) {
  ------------------
  |  Branch (2314:9): [True: 8, False: 32.7k]
  ------------------
 2315|       |      // First time asking for this field's default. Load it and cache it.
 2316|      8|      res = message_factory_->GetPrototype(field->message_type());
 2317|      8|      ptr.store(res, std::memory_order_release);
 2318|      8|    }
 2319|  32.7k|    return res;
 2320|  32.7k|  }
 2321|       |
 2322|       |  // For other factories, we try the default's object field.
 2323|       |  // In particular, the DynamicMessageFactory will cross link the default
 2324|       |  // instances to allow for this. But only do this for real fields.
 2325|       |  // This is an optimization to avoid going to GetPrototype() below, as that
 2326|       |  // requires a lock and a map lookup.
 2327|      0|  if (!field->is_extension() && !field->options().weak() &&
  ------------------
  |  Branch (2327:7): [True: 0, False: 0]
  |  Branch (2327:33): [True: 0, False: 0]
  ------------------
 2328|      0|      !IsLazyField(field) && !schema_.InRealOneof(field)) {
  ------------------
  |  Branch (2328:7): [True: 0, False: 0]
  |  Branch (2328:30): [True: 0, False: 0]
  ------------------
 2329|      0|    auto* res = DefaultRaw<const Message*>(field);
 2330|      0|    if (res != nullptr) {
  ------------------
  |  Branch (2330:9): [True: 0, False: 0]
  ------------------
 2331|      0|      return res;
 2332|      0|    }
 2333|      0|  }
 2334|       |  // Otherwise, just go to the factory.
 2335|      0|  return message_factory_->GetPrototype(field->message_type());
 2336|      0|}
_ZNK6google8protobuf10Reflection10GetMessageERKNS0_7MessageEPKNS0_15FieldDescriptorEPNS0_14MessageFactoryE:
 2340|  32.7k|                                      MessageFactory* factory) const {
 2341|  32.7k|  USAGE_CHECK_ALL(GetMessage, SINGULAR, MESSAGE);
  ------------------
  |  |  296|  32.7k|  USAGE_CHECK_MESSAGE(METHOD, &message);        \
  |  |  297|  32.7k|  USAGE_CHECK_MESSAGE_TYPE(METHOD);             \
  |  |  ------------------
  |  |  |  |  286|  32.7k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  32.7k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  32.7k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 32.7k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  32.7k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  287|  32.7k|                 "Field does not match message type.");
  |  |  ------------------
  |  |  298|  32.7k|  USAGE_CHECK_##LABEL(METHOD);                  \
  |  |  ------------------
  |  |  |  |  289|  32.7k|  USAGE_CHECK_NE(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  32.7k|  USAGE_CHECK((A) != (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  32.7k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 32.7k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  32.7k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  290|  32.7k|                 "Field is repeated; the method requires a singular field.")
  |  |  ------------------
  |  |  299|  32.7k|  USAGE_CHECK_TYPE(METHOD, CPPTYPE)
  |  |  ------------------
  |  |  |  |  267|  32.7k|  if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (267:7): [True: 0, False: 32.7k]
  |  |  |  |  ------------------
  |  |  |  |  268|  32.7k|  ReportReflectionUsageTypeError(descriptor_, field, #METHOD,  \
  |  |  |  |  269|      0|                                 FieldDescriptor::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  ------------------
 2342|       |
 2343|  32.7k|  if (factory == nullptr) factory = message_factory_;
  ------------------
  |  Branch (2343:7): [True: 32.7k, False: 0]
  ------------------
 2344|       |
 2345|  32.7k|  if (field->is_extension()) {
  ------------------
  |  Branch (2345:7): [True: 0, False: 32.7k]
  ------------------
 2346|      0|    return static_cast<const Message&>(GetExtensionSet(message).GetMessage(
 2347|      0|        field->number(), field->message_type(), factory));
 2348|  32.7k|  } else {
 2349|  32.7k|    if (schema_.InRealOneof(field) && !HasOneofField(message, field)) {
  ------------------
  |  Branch (2349:9): [True: 425, False: 32.3k]
  |  Branch (2349:39): [True: 0, False: 425]
  ------------------
 2350|      0|      return *GetDefaultMessageInstance(field);
 2351|      0|    }
 2352|  32.7k|    const Message* result = GetRaw<const Message*>(message, field);
 2353|  32.7k|    if (result == nullptr) {
  ------------------
  |  Branch (2353:9): [True: 0, False: 32.7k]
  ------------------
 2354|      0|      result = GetDefaultMessageInstance(field);
 2355|      0|    }
 2356|  32.7k|    return *result;
 2357|  32.7k|  }
 2358|  32.7k|}
_ZNK6google8protobuf10Reflection14MutableMessageEPNS0_7MessageEPKNS0_15FieldDescriptorEPNS0_14MessageFactoryE:
 2362|  65.4k|                                    MessageFactory* factory) const {
 2363|  65.4k|  USAGE_MUTABLE_CHECK_ALL(MutableMessage, SINGULAR, MESSAGE);
  ------------------
  |  |  302|  65.4k|  USAGE_CHECK_MESSAGE(METHOD, message);                 \
  |  |  303|  65.4k|  USAGE_CHECK_MESSAGE_TYPE(METHOD);                     \
  |  |  ------------------
  |  |  |  |  286|  65.4k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  65.4k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  65.4k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 65.4k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  65.4k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  287|  65.4k|                 "Field does not match message type.");
  |  |  ------------------
  |  |  304|  65.4k|  USAGE_CHECK_##LABEL(METHOD);                          \
  |  |  ------------------
  |  |  |  |  289|  65.4k|  USAGE_CHECK_NE(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  65.4k|  USAGE_CHECK((A) != (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  65.4k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 65.4k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  65.4k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  290|  65.4k|                 "Field is repeated; the method requires a singular field.")
  |  |  ------------------
  |  |  305|  65.4k|  USAGE_CHECK_TYPE(METHOD, CPPTYPE)
  |  |  ------------------
  |  |  |  |  267|  65.4k|  if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (267:7): [True: 0, False: 65.4k]
  |  |  |  |  ------------------
  |  |  |  |  268|  65.4k|  ReportReflectionUsageTypeError(descriptor_, field, #METHOD,  \
  |  |  |  |  269|      0|                                 FieldDescriptor::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  ------------------
 2364|       |
 2365|  65.4k|  if (factory == nullptr) factory = message_factory_;
  ------------------
  |  Branch (2365:7): [True: 65.4k, False: 0]
  ------------------
 2366|       |
 2367|  65.4k|  if (field->is_extension()) {
  ------------------
  |  Branch (2367:7): [True: 0, False: 65.4k]
  ------------------
 2368|      0|    return static_cast<Message*>(
 2369|      0|        MutableExtensionSet(message)->MutableMessage(field, factory));
 2370|  65.4k|  } else {
 2371|  65.4k|    Message* result;
 2372|       |
 2373|  65.4k|    Message** result_holder = MutableRaw<Message*>(message, field);
 2374|       |
 2375|  65.4k|    if (schema_.InRealOneof(field)) {
  ------------------
  |  Branch (2375:9): [True: 850, False: 64.6k]
  ------------------
 2376|    850|      if (!HasOneofField(*message, field)) {
  ------------------
  |  Branch (2376:11): [True: 425, False: 425]
  ------------------
 2377|    425|        ClearOneof(message, field->containing_oneof());
 2378|    425|        result_holder = MutableField<Message*>(message, field);
 2379|    425|        const Message* default_message = GetDefaultMessageInstance(field);
 2380|    425|        *result_holder = default_message->New(message->GetArena());
 2381|    425|      }
 2382|  64.6k|    } else {
 2383|  64.6k|      SetHasBit(message, field);
 2384|  64.6k|    }
 2385|       |
 2386|  65.4k|    if (*result_holder == nullptr) {
  ------------------
  |  Branch (2386:9): [True: 32.3k, False: 33.1k]
  ------------------
 2387|  32.3k|      const Message* default_message = GetDefaultMessageInstance(field);
 2388|  32.3k|      *result_holder = default_message->New(message->GetArena());
 2389|  32.3k|    }
 2390|  65.4k|    result = *result_holder;
 2391|  65.4k|    return result;
 2392|  65.4k|  }
 2393|  65.4k|}
_ZNK6google8protobuf10Reflection18GetRepeatedMessageERKNS0_7MessageEPKNS0_15FieldDescriptorEi:
 2511|  4.36k|                                              int index) const {
 2512|  4.36k|  USAGE_CHECK_ALL(GetRepeatedMessage, REPEATED, MESSAGE);
  ------------------
  |  |  296|  4.36k|  USAGE_CHECK_MESSAGE(METHOD, &message);        \
  |  |  297|  4.36k|  USAGE_CHECK_MESSAGE_TYPE(METHOD);             \
  |  |  ------------------
  |  |  |  |  286|  4.36k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  4.36k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  4.36k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 4.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  4.36k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  287|  4.36k|                 "Field does not match message type.");
  |  |  ------------------
  |  |  298|  4.36k|  USAGE_CHECK_##LABEL(METHOD);                  \
  |  |  ------------------
  |  |  |  |  292|  4.36k|  USAGE_CHECK_EQ(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  4.36k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  4.36k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 4.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  4.36k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  293|  4.36k|                 "Field is singular; the method requires a repeated field.")
  |  |  ------------------
  |  |  299|  4.36k|  USAGE_CHECK_TYPE(METHOD, CPPTYPE)
  |  |  ------------------
  |  |  |  |  267|  4.36k|  if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (267:7): [True: 0, False: 4.36k]
  |  |  |  |  ------------------
  |  |  |  |  268|  4.36k|  ReportReflectionUsageTypeError(descriptor_, field, #METHOD,  \
  |  |  |  |  269|      0|                                 FieldDescriptor::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  ------------------
 2513|       |
 2514|  4.36k|  if (field->is_extension()) {
  ------------------
  |  Branch (2514:7): [True: 0, False: 4.36k]
  ------------------
 2515|      0|    return static_cast<const Message&>(
 2516|      0|        GetExtensionSet(message).GetRepeatedMessage(field->number(), index));
 2517|  4.36k|  } else {
 2518|  4.36k|    if (IsMapFieldInApi(field)) {
  ------------------
  |  Branch (2518:9): [True: 0, False: 4.36k]
  ------------------
 2519|      0|      return GetRaw<MapFieldBase>(message, field)
 2520|      0|          .GetRepeatedField()
 2521|      0|          .Get<GenericTypeHandler<Message> >(index);
 2522|  4.36k|    } else {
 2523|  4.36k|      return GetRaw<RepeatedPtrFieldBase>(message, field)
 2524|  4.36k|          .Get<GenericTypeHandler<Message> >(index);
 2525|  4.36k|    }
 2526|  4.36k|  }
 2527|  4.36k|}
_ZNK6google8protobuf10Reflection22MutableRepeatedMessageEPNS0_7MessageEPKNS0_15FieldDescriptorEi:
 2531|  4.36k|                                            int index) const {
 2532|  4.36k|  USAGE_MUTABLE_CHECK_ALL(MutableRepeatedMessage, REPEATED, MESSAGE);
  ------------------
  |  |  302|  4.36k|  USAGE_CHECK_MESSAGE(METHOD, message);                 \
  |  |  303|  4.36k|  USAGE_CHECK_MESSAGE_TYPE(METHOD);                     \
  |  |  ------------------
  |  |  |  |  286|  4.36k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  4.36k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  4.36k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 4.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  4.36k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  287|  4.36k|                 "Field does not match message type.");
  |  |  ------------------
  |  |  304|  4.36k|  USAGE_CHECK_##LABEL(METHOD);                          \
  |  |  ------------------
  |  |  |  |  292|  4.36k|  USAGE_CHECK_EQ(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  4.36k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  4.36k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 4.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  4.36k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  293|  4.36k|                 "Field is singular; the method requires a repeated field.")
  |  |  ------------------
  |  |  305|  4.36k|  USAGE_CHECK_TYPE(METHOD, CPPTYPE)
  |  |  ------------------
  |  |  |  |  267|  4.36k|  if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (267:7): [True: 0, False: 4.36k]
  |  |  |  |  ------------------
  |  |  |  |  268|  4.36k|  ReportReflectionUsageTypeError(descriptor_, field, #METHOD,  \
  |  |  |  |  269|      0|                                 FieldDescriptor::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  ------------------
 2533|       |
 2534|  4.36k|  if (field->is_extension()) {
  ------------------
  |  Branch (2534:7): [True: 0, False: 4.36k]
  ------------------
 2535|      0|    return static_cast<Message*>(
 2536|      0|        MutableExtensionSet(message)->MutableRepeatedMessage(field->number(),
 2537|      0|                                                             index));
 2538|  4.36k|  } else {
 2539|  4.36k|    if (IsMapFieldInApi(field)) {
  ------------------
  |  Branch (2539:9): [True: 0, False: 4.36k]
  ------------------
 2540|      0|      return MutableRaw<MapFieldBase>(message, field)
 2541|      0|          ->MutableRepeatedField()
 2542|      0|          ->Mutable<GenericTypeHandler<Message> >(index);
 2543|  4.36k|    } else {
 2544|  4.36k|      return MutableRaw<RepeatedPtrFieldBase>(message, field)
 2545|  4.36k|          ->Mutable<GenericTypeHandler<Message> >(index);
 2546|  4.36k|    }
 2547|  4.36k|  }
 2548|  4.36k|}
_ZNK6google8protobuf10Reflection10AddMessageEPNS0_7MessageEPKNS0_15FieldDescriptorEPNS0_14MessageFactoryE:
 2551|  4.36k|                                MessageFactory* factory) const {
 2552|  4.36k|  USAGE_MUTABLE_CHECK_ALL(AddMessage, REPEATED, MESSAGE);
  ------------------
  |  |  302|  4.36k|  USAGE_CHECK_MESSAGE(METHOD, message);                 \
  |  |  303|  4.36k|  USAGE_CHECK_MESSAGE_TYPE(METHOD);                     \
  |  |  ------------------
  |  |  |  |  286|  4.36k|  USAGE_CHECK_EQ(field->containing_type(), descriptor_, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  4.36k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  4.36k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 4.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  4.36k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  287|  4.36k|                 "Field does not match message type.");
  |  |  ------------------
  |  |  304|  4.36k|  USAGE_CHECK_##LABEL(METHOD);                          \
  |  |  ------------------
  |  |  |  |  292|  4.36k|  USAGE_CHECK_EQ(field->label(), FieldDescriptor::LABEL_REPEATED, METHOD, \
  |  |  |  |  ------------------
  |  |  |  |  |  |  262|  4.36k|  USAGE_CHECK((A) == (B), METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  259|  4.36k|  if (!(CONDITION))                                       \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (259:7): [True: 0, False: 4.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  260|  4.36k|  ReportReflectionUsageError(descriptor_, field, #METHOD, ERROR_DESCRIPTION)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  293|  4.36k|                 "Field is singular; the method requires a repeated field.")
  |  |  ------------------
  |  |  305|  4.36k|  USAGE_CHECK_TYPE(METHOD, CPPTYPE)
  |  |  ------------------
  |  |  |  |  267|  4.36k|  if (field->cpp_type() != FieldDescriptor::CPPTYPE_##CPPTYPE) \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (267:7): [True: 0, False: 4.36k]
  |  |  |  |  ------------------
  |  |  |  |  268|  4.36k|  ReportReflectionUsageTypeError(descriptor_, field, #METHOD,  \
  |  |  |  |  269|      0|                                 FieldDescriptor::CPPTYPE_##CPPTYPE)
  |  |  ------------------
  ------------------
 2553|       |
 2554|  4.36k|  if (factory == nullptr) factory = message_factory_;
  ------------------
  |  Branch (2554:7): [True: 4.36k, False: 0]
  ------------------
 2555|       |
 2556|  4.36k|  if (field->is_extension()) {
  ------------------
  |  Branch (2556:7): [True: 0, False: 4.36k]
  ------------------
 2557|      0|    return static_cast<Message*>(
 2558|      0|        MutableExtensionSet(message)->AddMessage(field, factory));
 2559|  4.36k|  } else {
 2560|  4.36k|    Message* result = nullptr;
 2561|       |
 2562|       |    // We can't use AddField<Message>() because RepeatedPtrFieldBase doesn't
 2563|       |    // know how to allocate one.
 2564|  4.36k|    RepeatedPtrFieldBase* repeated = nullptr;
 2565|  4.36k|    if (IsMapFieldInApi(field)) {
  ------------------
  |  Branch (2565:9): [True: 0, False: 4.36k]
  ------------------
 2566|      0|      repeated =
 2567|      0|          MutableRaw<MapFieldBase>(message, field)->MutableRepeatedField();
 2568|  4.36k|    } else {
 2569|  4.36k|      repeated = MutableRaw<RepeatedPtrFieldBase>(message, field);
 2570|  4.36k|    }
 2571|  4.36k|    result = repeated->AddFromCleared<GenericTypeHandler<Message> >();
 2572|  4.36k|    if (result == nullptr) {
  ------------------
  |  Branch (2572:9): [True: 4.36k, False: 0]
  ------------------
 2573|       |      // We must allocate a new object.
 2574|  4.36k|      const Message* prototype;
 2575|  4.36k|      if (repeated->size() == 0) {
  ------------------
  |  Branch (2575:11): [True: 3.98k, False: 379]
  ------------------
 2576|  3.98k|        prototype = factory->GetPrototype(field->message_type());
 2577|  3.98k|      } else {
 2578|    379|        prototype = &repeated->Get<GenericTypeHandler<Message> >(0);
 2579|    379|      }
 2580|  4.36k|      result = prototype->New(message->GetArena());
 2581|       |      // We can guarantee here that repeated and result are either both heap
 2582|       |      // allocated or arena owned. So it is safe to call the unsafe version
 2583|       |      // of AddAllocated.
 2584|  4.36k|      repeated->UnsafeArenaAddAllocated<GenericTypeHandler<Message> >(result);
 2585|  4.36k|    }
 2586|       |
 2587|  4.36k|    return result;
 2588|  4.36k|  }
 2589|  4.36k|}
_ZNK6google8protobuf10Reflection22MutableRawNonOneofImplEPNS0_7MessageEPKNS0_15FieldDescriptorE:
 2825|  98.6k|                                         const FieldDescriptor* field) const {
 2826|  98.6k|  if (PROTOBUF_PREDICT_FALSE(schema_.IsSplit(field))) {
  ------------------
  |  |  365|  98.6k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 98.6k]
  |  |  |  Branch (365:54): [Folded, False: 98.6k]
  |  |  |  Branch (365:63): [True: 0, False: 98.6k]
  |  |  ------------------
  ------------------
 2827|      0|    return MutableRawSplitImpl(message, field);
 2828|      0|  }
 2829|       |
 2830|  98.6k|  const uint32_t field_offset = schema_.GetFieldOffsetNonOneof(field);
 2831|  98.6k|  return GetPointerAtOffset<void>(message, field_offset);
 2832|  98.6k|}
_ZNK6google8protobuf10Reflection14MutableRawImplEPNS0_7MessageEPKNS0_15FieldDescriptorE:
 2835|   102k|                                 const FieldDescriptor* field) const {
 2836|   102k|  if (PROTOBUF_PREDICT_TRUE(!schema_.InRealOneof(field))) {
  ------------------
  |  |  364|   102k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 98.6k, False: 3.35k]
  |  |  |  Branch (364:53): [Folded, False: 102k]
  |  |  |  Branch (364:62): [True: 98.6k, False: 3.35k]
  |  |  ------------------
  ------------------
 2837|  98.6k|    return MutableRawNonOneofImpl(message, field);
 2838|  98.6k|  }
 2839|       |
 2840|       |  // Oneof fields are not split.
 2841|  3.35k|  ABSL_DCHECK(!schema_.IsSplit(field));
  ------------------
  |  |   47|  3.35k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|   102k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  10.0k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  3.35k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  6.70k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  6.70k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3.35k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  3.35k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3.35k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  3.35k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3.35k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  10.0k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  10.0k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2842|       |
 2843|  3.35k|  const uint32_t field_offset = schema_.GetFieldOffset(field);
 2844|  3.35k|  return GetPointerAtOffset<void>(message, field_offset);
 2845|  3.35k|}
_ZNK6google8protobuf10Reflection10GetHasBitsERKNS0_7MessageE:
 2847|   143k|const uint32_t* Reflection::GetHasBits(const Message& message) const {
 2848|   143k|  ABSL_DCHECK(schema_.HasHasbits());
  ------------------
  |  |   47|   143k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|   143k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|   287k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|   143k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   287k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   287k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 143k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|   143k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 143k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|   143k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 143k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   287k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|   287k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2849|   143k|  return &GetConstRefAtOffset<uint32_t>(message, schema_.HasBitsOffset());
 2850|   143k|}
_ZNK6google8protobuf10Reflection12GetOneofCaseERKNS0_7MessageEPKNS0_15OneofDescriptorE:
 2858|  28.8k|    const Message& message, const OneofDescriptor* oneof_descriptor) const {
 2859|  28.8k|  ABSL_DCHECK(!oneof_descriptor->is_synthetic());
  ------------------
  |  |   47|  28.8k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  28.8k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  57.7k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  28.8k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  57.7k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  57.7k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 28.8k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  28.8k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 28.8k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  28.8k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 28.8k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  57.7k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  57.7k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2860|  28.8k|  return internal::GetConstRefAtOffset<uint32_t>(
 2861|  28.8k|      message, schema_.GetOneofCaseOffset(oneof_descriptor));
 2862|  28.8k|}
_ZNK6google8protobuf10Reflection16HasFieldSingularERKNS0_7MessageEPKNS0_15FieldDescriptorE:
 2954|   143k|                                  const FieldDescriptor* field) const {
 2955|   143k|  ABSL_DCHECK(!field->options().weak());
  ------------------
  |  |   47|   143k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|   143k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|   287k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|   143k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   287k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   287k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 143k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|   143k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 143k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|   143k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 143k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   287k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|   287k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2956|   143k|  if (schema_.HasBitIndex(field) != static_cast<uint32_t>(-1)) {
  ------------------
  |  Branch (2956:7): [True: 143k, False: 0]
  ------------------
 2957|   143k|    return IsIndexInHasBitSet(GetHasBits(message), schema_.HasBitIndex(field));
 2958|   143k|  }
 2959|       |
 2960|       |  // proto3: no has-bits. All fields present except messages, which are
 2961|       |  // present only if their message-field pointer is non-null.
 2962|      0|  if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
  ------------------
  |  Branch (2962:7): [True: 0, False: 0]
  ------------------
 2963|      0|    return !schema_.IsDefaultInstance(message) &&
  ------------------
  |  Branch (2963:12): [True: 0, False: 0]
  ------------------
 2964|      0|           GetRaw<const Message*>(message, field) != nullptr;
  ------------------
  |  Branch (2964:12): [True: 0, False: 0]
  ------------------
 2965|      0|  } else {
 2966|       |    // Non-message field (and non-oneof, since that was handled in HasField()
 2967|       |    // before calling us), and singular (again, checked in HasField). So, this
 2968|       |    // field must be a scalar.
 2969|       |
 2970|       |    // Scalar primitive (numeric or string/bytes) fields are present if
 2971|       |    // their value is non-zero (numeric) or non-empty (string/bytes). N.B.:
 2972|       |    // we must use this definition here, rather than the "scalar fields
 2973|       |    // always present" in the proto3 docs, because MergeFrom() semantics
 2974|       |    // require presence as "present on wire", and reflection-based merge
 2975|       |    // (which uses HasField()) needs to be consistent with this.
 2976|      0|    switch (field->cpp_type()) {
  ------------------
  |  Branch (2976:13): [True: 0, False: 0]
  ------------------
 2977|      0|      case FieldDescriptor::CPPTYPE_STRING:
  ------------------
  |  Branch (2977:7): [True: 0, False: 0]
  ------------------
 2978|      0|        switch (field->cpp_string_type()) {
  ------------------
  |  Branch (2978:17): [True: 0, False: 0]
  ------------------
 2979|      0|          case FieldDescriptor::CppStringType::kCord:
  ------------------
  |  Branch (2979:11): [True: 0, False: 0]
  ------------------
 2980|      0|            return !GetField<const absl::Cord>(message, field).empty();
 2981|      0|          case FieldDescriptor::CppStringType::kView:
  ------------------
  |  Branch (2981:11): [True: 0, False: 0]
  ------------------
 2982|      0|          case FieldDescriptor::CppStringType::kString: {
  ------------------
  |  Branch (2982:11): [True: 0, False: 0]
  ------------------
 2983|      0|            if (IsInlined(field)) {
  ------------------
  |  Branch (2983:17): [True: 0, False: 0]
  ------------------
 2984|      0|              return !GetField<InlinedStringField>(message, field)
 2985|      0|                          .GetNoArena()
 2986|      0|                          .empty();
 2987|      0|            }
 2988|       |
 2989|      0|            return GetField<ArenaStringPtr>(message, field).Get().size() > 0;
 2990|      0|          }
 2991|      0|        }
 2992|      0|        internal::Unreachable();
 2993|      0|      case FieldDescriptor::CPPTYPE_BOOL:
  ------------------
  |  Branch (2993:7): [True: 0, False: 0]
  ------------------
 2994|      0|        return GetRaw<bool>(message, field) != false;
 2995|      0|      case FieldDescriptor::CPPTYPE_INT32:
  ------------------
  |  Branch (2995:7): [True: 0, False: 0]
  ------------------
 2996|      0|        return GetRaw<int32_t>(message, field) != 0;
 2997|      0|      case FieldDescriptor::CPPTYPE_INT64:
  ------------------
  |  Branch (2997:7): [True: 0, False: 0]
  ------------------
 2998|      0|        return GetRaw<int64_t>(message, field) != 0;
 2999|      0|      case FieldDescriptor::CPPTYPE_UINT32:
  ------------------
  |  Branch (2999:7): [True: 0, False: 0]
  ------------------
 3000|      0|        return GetRaw<uint32_t>(message, field) != 0;
 3001|      0|      case FieldDescriptor::CPPTYPE_UINT64:
  ------------------
  |  Branch (3001:7): [True: 0, False: 0]
  ------------------
 3002|      0|        return GetRaw<uint64_t>(message, field) != 0;
 3003|      0|      case FieldDescriptor::CPPTYPE_FLOAT:
  ------------------
  |  Branch (3003:7): [True: 0, False: 0]
  ------------------
 3004|      0|        static_assert(sizeof(uint32_t) == sizeof(float),
 3005|      0|                      "Code assumes uint32_t and float are the same size.");
 3006|      0|        return GetRaw<uint32_t>(message, field) != 0;
 3007|      0|      case FieldDescriptor::CPPTYPE_DOUBLE:
  ------------------
  |  Branch (3007:7): [True: 0, False: 0]
  ------------------
 3008|      0|        static_assert(sizeof(uint64_t) == sizeof(double),
 3009|      0|                      "Code assumes uint64_t and double are the same size.");
 3010|      0|        return GetRaw<uint64_t>(message, field) != 0;
 3011|      0|      case FieldDescriptor::CPPTYPE_ENUM:
  ------------------
  |  Branch (3011:7): [True: 0, False: 0]
  ------------------
 3012|      0|        return GetRaw<int>(message, field) != 0;
 3013|      0|      case FieldDescriptor::CPPTYPE_MESSAGE:
  ------------------
  |  Branch (3013:7): [True: 0, False: 0]
  ------------------
 3014|       |        // handled above; avoid warning
 3015|      0|        break;
 3016|      0|    }
 3017|      0|    ABSL_LOG(FATAL) << "Reached impossible case in HasFieldSingular().";
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3018|      0|    return false;
 3019|      0|  }
 3020|      0|}
_ZNK6google8protobuf10Reflection9SetHasBitEPNS0_7MessageEPKNS0_15FieldDescriptorE:
 3023|  89.9k|                           const FieldDescriptor* field) const {
 3024|  89.9k|  ABSL_DCHECK(!field->options().weak());
  ------------------
  |  |   47|  89.9k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  89.9k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|   179k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  89.9k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   179k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   179k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 89.9k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  89.9k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 89.9k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  89.9k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 89.9k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   179k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|   179k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3025|  89.9k|  const uint32_t index = schema_.HasBitIndex(field);
 3026|  89.9k|  if (index == static_cast<uint32_t>(-1)) return;
  ------------------
  |  Branch (3026:7): [True: 0, False: 89.9k]
  ------------------
 3027|  89.9k|  MutableHasBits(message)[index / 32] |=
 3028|  89.9k|      (static_cast<uint32_t>(1) << (index % 32));
 3029|  89.9k|}
_ZNK6google8protobuf10Reflection8HasOneofERKNS0_7MessageEPKNS0_15OneofDescriptorE:
 3060|  1.46k|                          const OneofDescriptor* oneof_descriptor) const {
 3061|  1.46k|  if (oneof_descriptor->is_synthetic()) {
  ------------------
  |  Branch (3061:7): [True: 0, False: 1.46k]
  ------------------
 3062|      0|    return HasField(message, oneof_descriptor->field(0));
 3063|      0|  }
 3064|  1.46k|  return (GetOneofCase(message, oneof_descriptor) > 0);
 3065|  1.46k|}
_ZNK6google8protobuf10Reflection10ClearOneofEPNS0_7MessageEPKNS0_15OneofDescriptorE:
 3080|  1.46k|                            const OneofDescriptor* oneof_descriptor) const {
 3081|  1.46k|  if (oneof_descriptor->is_synthetic()) {
  ------------------
  |  Branch (3081:7): [True: 0, False: 1.46k]
  ------------------
 3082|      0|    ClearField(message, oneof_descriptor->field(0));
 3083|      0|    return;
 3084|      0|  }
 3085|       |  // TODO: Consider to cache the unused object instead of deleting
 3086|       |  // it. It will be much faster if an application switches a lot from
 3087|       |  // a few oneof fields.  Time/space tradeoff
 3088|  1.46k|  uint32_t oneof_case = GetOneofCase(*message, oneof_descriptor);
 3089|  1.46k|  if (oneof_case > 0) {
  ------------------
  |  Branch (3089:7): [True: 0, False: 1.46k]
  ------------------
 3090|      0|    const FieldDescriptor* field = descriptor_->FindFieldByNumber(oneof_case);
 3091|      0|    if (message->GetArena() == nullptr) {
  ------------------
  |  Branch (3091:9): [True: 0, False: 0]
  ------------------
 3092|      0|      switch (field->cpp_type()) {
 3093|      0|        case FieldDescriptor::CPPTYPE_STRING: {
  ------------------
  |  Branch (3093:9): [True: 0, False: 0]
  ------------------
 3094|      0|          switch (field->cpp_string_type()) {
  ------------------
  |  Branch (3094:19): [True: 0, False: 0]
  ------------------
 3095|      0|            case FieldDescriptor::CppStringType::kCord:
  ------------------
  |  Branch (3095:13): [True: 0, False: 0]
  ------------------
 3096|      0|              delete *MutableRaw<absl::Cord*>(message, field);
 3097|      0|              break;
 3098|      0|            case FieldDescriptor::CppStringType::kView:
  ------------------
  |  Branch (3098:13): [True: 0, False: 0]
  ------------------
 3099|      0|            case FieldDescriptor::CppStringType::kString: {
  ------------------
  |  Branch (3099:13): [True: 0, False: 0]
  ------------------
 3100|       |              // Oneof string fields are never set as a default instance.
 3101|       |              // We just need to pass some arbitrary default string to make it
 3102|       |              // work. This allows us to not have the real default accessible
 3103|       |              // from reflection.
 3104|      0|              MutableField<ArenaStringPtr>(message, field)->Destroy();
 3105|      0|              break;
 3106|      0|            }
 3107|      0|          }
 3108|      0|          break;
 3109|      0|        }
 3110|       |
 3111|      0|        case FieldDescriptor::CPPTYPE_MESSAGE:
  ------------------
  |  Branch (3111:9): [True: 0, False: 0]
  ------------------
 3112|      0|          delete *MutableRaw<Message*>(message, field);
 3113|      0|          break;
 3114|      0|        default:
  ------------------
  |  Branch (3114:9): [True: 0, False: 0]
  ------------------
 3115|      0|          break;
 3116|      0|      }
 3117|      0|    }
 3118|       |
 3119|      0|    *MutableOneofCase(message, oneof_descriptor) = 0;
 3120|      0|  }
 3121|  1.46k|}
_ZN6google8protobuf8internal14AddDescriptorsEPKNS1_15DescriptorTableE:
 3720|      9|void AddDescriptors(const DescriptorTable* table) {
 3721|       |  // AddDescriptors is not thread safe. Callers need to ensure calls are
 3722|       |  // properly serialized. This function is only called pre-main by global
 3723|       |  // descriptors and we can assume single threaded access or it's called
 3724|       |  // by AssignDescriptorImpl which uses a mutex to sequence calls.
 3725|      9|  if (table->is_initialized) return;
  ------------------
  |  Branch (3725:7): [True: 3, False: 6]
  ------------------
 3726|      6|  table->is_initialized = true;
 3727|      6|  AddDescriptorsImpl(table);
 3728|      6|}
_ZN6google8protobuf8internal30AssignDescriptorsOnceInnerCallEPKNS1_15DescriptorTableE:
 3730|      4|void AssignDescriptorsOnceInnerCall(const DescriptorTable* table) {
 3731|      4|  MaybeInitializeLazyDescriptors(table);
 3732|      4|  AssignDescriptorsImpl(table, table->is_eager);
 3733|      4|}
_ZN6google8protobuf8internal17AssignDescriptorsEPKNS1_15DescriptorTableE:
 3735|      1|void AssignDescriptors(const DescriptorTable* table) {
 3736|      1|  absl::call_once(*table->once, [=] { AssignDescriptorsOnceInnerCall(table); });
 3737|      1|}
_ZN6google8protobuf8internal25RegisterFileLevelMetadataEPKNS1_15DescriptorTableE:
 3743|      1|void RegisterFileLevelMetadata(const DescriptorTable* table) {
 3744|      1|  AssignDescriptors(table);
 3745|      1|  auto* file = DescriptorPool::internal_generated_pool()->FindFileByName(
 3746|      1|      table->filename);
 3747|      1|  auto defaults = table->default_instances;
 3748|      1|  internal::cpp::VisitDescriptorsInFileOrder(file, [&](auto* desc) {
 3749|      1|    MessageFactory::InternalRegisterGeneratedMessage(desc, *defaults);
 3750|      1|    ++defaults;
 3751|      1|    return std::false_type{};
 3752|      1|  });
 3753|      1|}
generated_message_reflection.cc:_ZN6google8protobuf12_GLOBAL__N_115IsMapFieldInApiEPKNS0_15FieldDescriptorE:
   79|   102k|bool IsMapFieldInApi(const FieldDescriptor* field) { return field->is_map(); }
generated_message_reflection.cc:_ZN6google8protobuf12_GLOBAL__N_118IsIndexInHasBitSetEPKjj:
 1647|   143k|bool IsIndexInHasBitSet(const uint32_t* has_bit_set, uint32_t has_bit_index) {
 1648|   143k|  ABSL_DCHECK_NE(has_bit_index, ~0u);
  ------------------
  |  |   76|   143k|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|   143k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|   143k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 143k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|   143k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1649|   143k|  return ((has_bit_set[has_bit_index / 32] >> (has_bit_index % 32)) &
 1650|   143k|          static_cast<uint32_t>(1)) != 0;
 1651|   143k|}
_ZNK6google8protobuf10Reflection14MutableHasBitsEPNS0_7MessageE:
 2852|  89.9k|uint32_t* Reflection::MutableHasBits(Message* message) const {
 2853|  89.9k|  ABSL_DCHECK(schema_.HasHasbits());
  ------------------
  |  |   47|  89.9k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  89.9k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|   179k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  89.9k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   179k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   179k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 89.9k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  89.9k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 89.9k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  89.9k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 89.9k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   179k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|   179k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2854|  89.9k|  return GetPointerAtOffset<uint32_t>(message, schema_.HasBitsOffset());
 2855|  89.9k|}
_ZNK6google8protobuf10Reflection16MutableOneofCaseEPNS0_7MessageEPKNS0_15OneofDescriptorE:
 2865|  2.50k|    Message* message, const OneofDescriptor* oneof_descriptor) const {
 2866|  2.50k|  ABSL_DCHECK(!oneof_descriptor->is_synthetic());
  ------------------
  |  |   47|  2.50k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  2.50k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  5.00k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  2.50k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  5.00k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  5.00k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.50k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.50k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.50k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  2.50k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.50k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  5.00k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  5.00k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2867|  2.50k|  return GetPointerAtOffset<uint32_t>(
 2868|  2.50k|      message, schema_.GetOneofCaseOffset(oneof_descriptor));
 2869|  2.50k|}
_ZNK6google8protobuf10Reflection12SetOneofCaseEPNS0_7MessageEPKNS0_15FieldDescriptorE:
 3068|  2.50k|                              const FieldDescriptor* field) const {
 3069|  2.50k|  *MutableOneofCase(message, field->containing_oneof()) = field->number();
 3070|  2.50k|}
generated_message_reflection.cc:_ZN6google8protobuf12_GLOBAL__N_118AddDescriptorsImplEPKNS0_8internal15DescriptorTableE:
 3697|      6|void AddDescriptorsImpl(const DescriptorTable* table) {
 3698|       |  // Reflection refers to the default fields so make sure they are initialized.
 3699|      6|  internal::InitProtobufDefaults();
 3700|      6|  internal::InitializeFileDescriptorDefaultInstances();
 3701|      6|  internal::InitializeLazyExtensionSet();
 3702|       |
 3703|       |  // Ensure all dependent descriptors are registered to the generated descriptor
 3704|       |  // pool and message factory.
 3705|      6|  int num_deps = table->num_deps;
 3706|      7|  for (int i = 0; i < num_deps; i++) {
  ------------------
  |  Branch (3706:19): [True: 1, False: 6]
  ------------------
 3707|       |    // In case of weak fields deps[i] could be null.
 3708|      1|    if (table->deps[i]) AddDescriptors(table->deps[i]);
  ------------------
  |  Branch (3708:9): [True: 1, False: 0]
  ------------------
 3709|      1|  }
 3710|       |
 3711|       |  // Register the descriptor of this file.
 3712|      6|  DescriptorPool::InternalAddGeneratedFile(table->descriptor, table->size);
 3713|      6|  MessageFactory::InternalRegisterGeneratedFile(table);
 3714|      6|}
generated_message_reflection.cc:_ZN6google8protobuf12_GLOBAL__N_130MaybeInitializeLazyDescriptorsEPKNS0_8internal15DescriptorTableE:
 3690|      4|void MaybeInitializeLazyDescriptors(const DescriptorTable* table) {
 3691|      4|  if (!IsLazilyInitializedFile(table->filename)) {
  ------------------
  |  Branch (3691:7): [True: 2, False: 2]
  ------------------
 3692|       |    // Ensure the generated pool has been lazily initialized.
 3693|      2|    DescriptorPool::generated_pool();
 3694|      2|  }
 3695|      4|}
generated_message_reflection.cc:_ZN6google8protobuf12_GLOBAL__N_121AssignDescriptorsImplEPKNS0_8internal15DescriptorTableEb:
 3631|      4|void AssignDescriptorsImpl(const DescriptorTable* table, bool eager) {
 3632|       |  // Ensure the file descriptor is added to the pool.
 3633|      4|  {
 3634|       |    // This only happens once per proto file. So a global mutex to serialize
 3635|       |    // calls to AddDescriptors.
 3636|      4|    static absl::Mutex mu{absl::kConstInit};
 3637|      4|    mu.Lock();
 3638|      4|    AddDescriptors(table);
 3639|      4|    mu.Unlock();
 3640|      4|  }
 3641|      4|  if (eager) {
  ------------------
  |  Branch (3641:7): [True: 0, False: 4]
  ------------------
 3642|       |    // Normally we do not want to eagerly build descriptors of our deps.
 3643|       |    // However if this proto is optimized for code size (ie using reflection)
 3644|       |    // and it has a message extending a custom option of a descriptor with that
 3645|       |    // message being optimized for code size as well. Building the descriptors
 3646|       |    // in this file requires parsing the serialized file descriptor, which now
 3647|       |    // requires parsing the message extension, which potentially requires
 3648|       |    // building the descriptor of the message extending one of the options.
 3649|       |    // However we are already updating descriptor pool under a lock. To prevent
 3650|       |    // this the compiler statically looks for this case and we just make sure we
 3651|       |    // first build the descriptors of all our dependencies, preventing the
 3652|       |    // deadlock.
 3653|      0|    int num_deps = table->num_deps;
 3654|      0|    for (int i = 0; i < num_deps; i++) {
  ------------------
  |  Branch (3654:21): [True: 0, False: 0]
  ------------------
 3655|       |      // In case of weak fields deps[i] could be null.
 3656|      0|      if (table->deps[i]) {
  ------------------
  |  Branch (3656:11): [True: 0, False: 0]
  ------------------
 3657|      0|        absl::call_once(*table->deps[i]->once, AssignDescriptorsImpl,
 3658|      0|                        table->deps[i],
 3659|      0|                        /*eager=*/true);
 3660|      0|      }
 3661|      0|    }
 3662|      0|  }
 3663|       |
 3664|       |  // Fill the arrays with pointers to descriptors and reflection classes.
 3665|      4|  const FileDescriptor* file =
 3666|      4|      DescriptorPool::internal_generated_pool()->FindFileByName(
 3667|      4|          table->filename);
 3668|      4|  ABSL_CHECK(file != nullptr);
  ------------------
  |  |   41|      4|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|      8|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      4|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      8|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      8|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      4|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      8|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 4]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 4]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|      8|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|      8|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3669|       |
 3670|      4|  MessageFactory* factory = MessageFactory::generated_factory();
 3671|       |
 3672|      4|  AssignDescriptorsHelper helper(factory, table->file_level_enum_descriptors,
 3673|      4|                                 table->schemas, table->default_instances,
 3674|      4|                                 table->offsets);
 3675|       |
 3676|     39|  for (int i = 0; i < file->message_type_count(); i++) {
  ------------------
  |  Branch (3676:19): [True: 35, False: 4]
  ------------------
 3677|     35|    helper.AssignMessageDescriptor(file->message_type(i));
 3678|     35|  }
 3679|       |
 3680|      5|  for (int i = 0; i < file->enum_type_count(); i++) {
  ------------------
  |  Branch (3680:19): [True: 1, False: 4]
  ------------------
 3681|      1|    helper.AssignEnumDescriptor(file->enum_type(i));
 3682|      1|  }
 3683|      4|  if (file->options().cc_generic_services()) {
  ------------------
  |  Branch (3683:7): [True: 0, False: 4]
  ------------------
 3684|      0|    for (int i = 0; i < file->service_count(); i++) {
  ------------------
  |  Branch (3684:21): [True: 0, False: 0]
  ------------------
 3685|      0|      table->file_level_service_descriptors[i] = file->service(i);
 3686|      0|    }
 3687|      0|  }
 3688|      4|}
_ZN6google8protobuf23AssignDescriptorsHelperC2EPNS0_14MessageFactoryEPPKNS0_14EnumDescriptorEPKNS0_8internal15MigrationSchemaEPKPKNS0_7MessageEPKj:
 3582|      4|      : factory_(factory),
 3583|      4|        file_level_enum_descriptors_(file_level_enum_descriptors),
 3584|      4|        schemas_(schemas),
 3585|      4|        default_instance_data_(default_instance_data),
 3586|      4|        offsets_(offsets) {}
_ZN6google8protobuf23AssignDescriptorsHelper23AssignMessageDescriptorEPKNS0_10DescriptorE:
 3588|     45|  void AssignMessageDescriptor(const Descriptor* descriptor) {
 3589|     55|    for (int i = 0; i < descriptor->nested_type_count(); i++) {
  ------------------
  |  Branch (3589:21): [True: 10, False: 45]
  ------------------
 3590|     10|      AssignMessageDescriptor(descriptor->nested_type(i));
 3591|     10|    }
 3592|       |
 3593|       |    // If there is no default instance we only want to initialize the descriptor
 3594|       |    // without updating the reflection.
 3595|     45|    if (default_instance_data_[0] != nullptr) {
  ------------------
  |  Branch (3595:9): [True: 45, False: 0]
  ------------------
 3596|     45|      auto& class_data = default_instance_data_[0]->GetClassData()->full();
 3597|       |      // If there is no descriptor_table in the class data, then it is not
 3598|       |      // interested in receiving reflection information either.
 3599|     45|      if (class_data.descriptor_table != nullptr) {
  ------------------
  |  Branch (3599:11): [True: 45, False: 0]
  ------------------
 3600|     45|        class_data.descriptor = descriptor;
 3601|       |
 3602|     45|        class_data.reflection = OnShutdownDelete(new Reflection(
 3603|     45|            descriptor,
 3604|     45|            MigrationToReflectionSchema(default_instance_data_, offsets_,
 3605|     45|                                        *schemas_),
 3606|     45|            DescriptorPool::internal_generated_pool(), factory_));
 3607|     45|      }
 3608|     45|    }
 3609|     62|    for (int i = 0; i < descriptor->enum_type_count(); i++) {
  ------------------
  |  Branch (3609:21): [True: 17, False: 45]
  ------------------
 3610|     17|      AssignEnumDescriptor(descriptor->enum_type(i));
 3611|     17|    }
 3612|     45|    schemas_++;
 3613|     45|    default_instance_data_++;
 3614|     45|  }
generated_message_reflection.cc:_ZN6google8protobuf12_GLOBAL__N_127MigrationToReflectionSchemaEPKPKNS0_7MessageEPKjNS0_8internal15MigrationSchemaE:
 3549|     45|    MigrationSchema migration_schema) {
 3550|     45|  ReflectionSchema result;
 3551|     45|  result.default_instance_ = *default_instance;
 3552|       |  // First 9 offsets are offsets to the special fields. The following offsets
 3553|       |  // are the proto fields.
 3554|       |  //
 3555|       |  // TODO: Find a way to not encode sizeof_split_ in offsets.
 3556|     45|  result.offsets_ = offsets + migration_schema.offsets_index + 8;
 3557|     45|  result.has_bit_indices_ = offsets + migration_schema.has_bit_indices_index;
 3558|     45|  result.has_bits_offset_ = offsets[migration_schema.offsets_index + 0];
 3559|     45|  result.metadata_offset_ = offsets[migration_schema.offsets_index + 1];
 3560|     45|  result.extensions_offset_ = offsets[migration_schema.offsets_index + 2];
 3561|     45|  result.oneof_case_offset_ = offsets[migration_schema.offsets_index + 3];
 3562|     45|  result.object_size_ = migration_schema.object_size;
 3563|     45|  result.weak_field_map_offset_ = offsets[migration_schema.offsets_index + 4];
 3564|     45|  result.inlined_string_donated_offset_ =
 3565|     45|      offsets[migration_schema.offsets_index + 5];
 3566|     45|  result.split_offset_ = offsets[migration_schema.offsets_index + 6];
 3567|     45|  result.sizeof_split_ = offsets[migration_schema.offsets_index + 7];
 3568|     45|  result.inlined_string_indices_ =
 3569|     45|      offsets + migration_schema.inlined_string_indices_index;
 3570|     45|  return result;
 3571|     45|}
_ZN6google8protobuf23AssignDescriptorsHelper20AssignEnumDescriptorEPKNS0_14EnumDescriptorE:
 3616|     18|  void AssignEnumDescriptor(const EnumDescriptor* descriptor) {
 3617|     18|    *file_level_enum_descriptors_ = descriptor;
 3618|     18|    file_level_enum_descriptors_++;
 3619|     18|  }
_ZNK6google8protobuf10Reflection8SetFieldIjEEvPNS0_7MessageEPKNS0_15FieldDescriptorERKT_:
 3177|  8.42k|                          const Type& value) const {
 3178|  8.42k|  bool real_oneof = schema_.InRealOneof(field);
 3179|  8.42k|  if (real_oneof && !HasOneofField(*message, field)) {
  ------------------
  |  Branch (3179:7): [True: 0, False: 8.42k]
  |  Branch (3179:21): [True: 0, False: 0]
  ------------------
 3180|      0|    ClearOneof(message, field->containing_oneof());
 3181|      0|  }
 3182|  8.42k|  *MutableRaw<Type>(message, field) = value;
 3183|  8.42k|  real_oneof ? SetOneofCase(message, field) : SetHasBit(message, field);
  ------------------
  |  Branch (3183:3): [True: 0, False: 8.42k]
  ------------------
 3184|  8.42k|}
_ZNK6google8protobuf10Reflection8SetFieldIbEEvPNS0_7MessageEPKNS0_15FieldDescriptorERKT_:
 3177|      3|                          const Type& value) const {
 3178|      3|  bool real_oneof = schema_.InRealOneof(field);
 3179|      3|  if (real_oneof && !HasOneofField(*message, field)) {
  ------------------
  |  Branch (3179:7): [True: 0, False: 3]
  |  Branch (3179:21): [True: 0, False: 0]
  ------------------
 3180|      0|    ClearOneof(message, field->containing_oneof());
 3181|      0|  }
 3182|      3|  *MutableRaw<Type>(message, field) = value;
 3183|      3|  real_oneof ? SetOneofCase(message, field) : SetHasBit(message, field);
  ------------------
  |  Branch (3183:3): [True: 0, False: 3]
  ------------------
 3184|      3|}
_ZNK6google8protobuf10Reflection12MutableFieldINS0_8internal14ArenaStringPtrEEEPT_PNS0_7MessageEPKNS0_15FieldDescriptorE:
 3188|  18.9k|                               const FieldDescriptor* field) const {
 3189|  18.9k|  schema_.InRealOneof(field) ? SetOneofCase(message, field)
  ------------------
  |  Branch (3189:3): [True: 2.07k, False: 16.9k]
  ------------------
 3190|  18.9k|                             : SetHasBit(message, field);
 3191|  18.9k|  return MutableRaw<Type>(message, field);
 3192|  18.9k|}
_ZNK6google8protobuf10Reflection12MutableFieldIPNS0_7MessageEEEPT_S4_PKNS0_15FieldDescriptorE:
 3188|    425|                               const FieldDescriptor* field) const {
 3189|    425|  schema_.InRealOneof(field) ? SetOneofCase(message, field)
  ------------------
  |  Branch (3189:3): [True: 425, False: 0]
  ------------------
 3190|    425|                             : SetHasBit(message, field);
 3191|    425|  return MutableRaw<Type>(message, field);
 3192|    425|}
generated_message_reflection.cc:_ZZN6google8protobuf8internal25RegisterFileLevelMetadataEPKNS1_15DescriptorTableEENK3$_0clIKNS0_10DescriptorEEEDaPT_:
 3748|     10|  internal::cpp::VisitDescriptorsInFileOrder(file, [&](auto* desc) {
 3749|     10|    MessageFactory::InternalRegisterGeneratedMessage(desc, *defaults);
 3750|     10|    ++defaults;
 3751|     10|    return std::false_type{};
 3752|     10|  });

_ZNK6google8protobuf8internal16ReflectionSchema11InRealOneofEPKNS0_15FieldDescriptorE:
  117|   543k|  bool InRealOneof(const FieldDescriptor* field) const {
  118|   543k|    return field->real_containing_oneof();
  119|   543k|  }
_ZNK6google8protobuf8internal16ReflectionSchema22GetFieldOffsetNonOneofEPKNS0_15FieldDescriptorE:
  123|   224k|  uint32_t GetFieldOffsetNonOneof(const FieldDescriptor* field) const {
  124|   224k|    ABSL_DCHECK(!InRealOneof(field));
  ------------------
  |  |   47|   224k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|   224k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|   449k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|   224k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   449k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   449k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 224k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|   224k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 224k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|   224k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 224k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   449k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|   449k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  125|   224k|    return OffsetValue(offsets_[field->index()], field->type());
  126|   224k|  }
_ZNK6google8protobuf8internal16ReflectionSchema14GetFieldOffsetEPKNS0_15FieldDescriptorE:
  129|  3.77k|  uint32_t GetFieldOffset(const FieldDescriptor* field) const {
  130|  3.77k|    if (InRealOneof(field)) {
  ------------------
  |  Branch (130:9): [True: 3.77k, False: 0]
  ------------------
  131|  3.77k|      size_t offset =
  132|  3.77k|          static_cast<size_t>(field->containing_type()->field_count()) +
  133|  3.77k|          field->containing_oneof()->index();
  134|  3.77k|      return OffsetValue(offsets_[offset], field->type());
  135|  3.77k|    } else {
  136|      0|      return GetFieldOffsetNonOneof(field);
  137|      0|    }
  138|  3.77k|  }
_ZNK6google8protobuf8internal16ReflectionSchema14IsFieldInlinedEPKNS0_15FieldDescriptorE:
  140|  17.9k|  bool IsFieldInlined(const FieldDescriptor* field) const {
  141|  17.9k|    return Inlined(offsets_[field->index()], field->type());
  142|  17.9k|  }
_ZNK6google8protobuf8internal16ReflectionSchema18GetOneofCaseOffsetEPKNS0_15OneofDescriptorE:
  144|  31.3k|  uint32_t GetOneofCaseOffset(const OneofDescriptor* oneof_descriptor) const {
  145|  31.3k|    return static_cast<uint32_t>(oneof_case_offset_) +
  146|  31.3k|           static_cast<uint32_t>(
  147|  31.3k|               static_cast<size_t>(oneof_descriptor->index()) *
  148|  31.3k|               sizeof(uint32_t));
  149|  31.3k|  }
_ZNK6google8protobuf8internal16ReflectionSchema11HasBitIndexEPKNS0_15FieldDescriptorE:
  154|   377k|  uint32_t HasBitIndex(const FieldDescriptor* field) const {
  155|   377k|    if (has_bits_offset_ == -1) return static_cast<uint32_t>(-1);
  ------------------
  |  Branch (155:9): [True: 0, False: 377k]
  ------------------
  156|   377k|    ABSL_DCHECK(HasHasbits());
  ------------------
  |  |   47|   377k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|   377k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.13M|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|   377k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   755k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   755k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 377k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|   377k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 377k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|   377k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 377k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.13M|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.13M|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  157|   377k|    return has_bit_indices_[field->index()];
  158|   377k|  }
_ZNK6google8protobuf8internal16ReflectionSchema13HasBitsOffsetEv:
  161|   233k|  uint32_t HasBitsOffset() const {
  162|   233k|    ABSL_DCHECK(HasHasbits());
  ------------------
  |  |   47|   233k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|   233k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|   467k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|   233k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   467k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   467k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 233k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|   233k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 233k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|   233k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 233k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|   467k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|   467k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|   233k|    return static_cast<uint32_t>(has_bits_offset_);
  164|   233k|  }
_ZNK6google8protobuf8internal16ReflectionSchema7IsSplitEPKNS0_15FieldDescriptorE:
  222|   224k|  bool IsSplit(const FieldDescriptor* field) const {
  223|   224k|    return split_offset_ != -1 &&
  ------------------
  |  Branch (223:12): [True: 0, False: 224k]
  ------------------
  224|      0|           (offsets_[field->index()] & kSplitFieldOffsetMask) != 0;
  ------------------
  |  Branch (224:12): [True: 0, False: 0]
  ------------------
  225|   224k|  }
_ZN6google8protobuf8internal16ReflectionSchema11OffsetValueEjNS1_19FieldDescriptorLite4TypeE:
  263|   228k|  static uint32_t OffsetValue(uint32_t v, FieldDescriptor::Type type) {
  264|   228k|    if (type == FieldDescriptor::TYPE_MESSAGE ||
  ------------------
  |  Branch (264:9): [True: 201k, False: 27.4k]
  ------------------
  265|  27.4k|        type == FieldDescriptor::TYPE_STRING ||
  ------------------
  |  Branch (265:9): [True: 18.9k, False: 8.42k]
  ------------------
  266|   220k|        type == FieldDescriptor::TYPE_BYTES) {
  ------------------
  |  Branch (266:9): [True: 0, False: 8.42k]
  ------------------
  267|   220k|      return v & (~kSplitFieldOffsetMask) & (~kInlinedMask) & (~kLazyMask);
  268|   220k|    }
  269|  8.42k|    return v & (~kSplitFieldOffsetMask);
  270|   228k|  }
_ZN6google8protobuf8internal16ReflectionSchema7InlinedEjNS1_19FieldDescriptorLite4TypeE:
  272|  17.9k|  static bool Inlined(uint32_t v, FieldDescriptor::Type type) {
  273|  17.9k|    if (type == FieldDescriptor::TYPE_STRING ||
  ------------------
  |  Branch (273:9): [True: 17.9k, False: 0]
  ------------------
  274|  17.9k|        type == FieldDescriptor::TYPE_BYTES) {
  ------------------
  |  Branch (274:9): [True: 0, False: 0]
  ------------------
  275|  17.9k|      return (v & kInlinedMask) != 0u;
  276|  17.9k|    } else {
  277|       |      // Non string/byte fields are not inlined.
  278|      0|      return false;
  279|      0|    }
  280|  17.9k|  }

_ZN6google8protobuf8internal11TcFieldDataC2ENS2_11DefaultInitE:
   64|  7.54k|  TcFieldData(DefaultInit) {}  // NOLINT(google-explicit-constructor)
_ZNK6google8protobuf8internal11TcFieldData10hasbit_idxEv:
   85|  2.96k|  uint8_t hasbit_idx() const { return static_cast<uint8_t>(data >> 16); }
_ZNK6google8protobuf8internal11TcFieldData7aux_idxEv:
   86|  2.43k|  uint8_t aux_idx() const { return static_cast<uint8_t>(data >> 24); }
_ZNK6google8protobuf8internal11TcFieldData6offsetEv:
   87|  3.22k|  uint16_t offset() const { return static_cast<uint16_t>(data >> 48); }
_ZNK6google8protobuf8internal11TcFieldData3tagEv:
  122|    130|  uint32_t tag() const { return static_cast<uint32_t>(data); }
_ZNK6google8protobuf8internal11TcFieldData12entry_offsetEv:
  123|    149|  uint32_t entry_offset() const { return static_cast<uint32_t>(data >> 32); }
_ZNK6google8protobuf8internal16TcParseTableBase14FastFieldEntry6targetEv:
  370|  3.32k|    TailCallParseFunc target() const {
  371|  3.32k|      return target_atomic.load(std::memory_order_relaxed);
  372|  3.32k|    }
_ZNK6google8protobuf8internal16TcParseTableBase10fast_entryEm:
  378|  3.32k|  const FastFieldEntry* fast_entry(size_t idx) const {
  379|  3.32k|    return reinterpret_cast<const FastFieldEntry*>(this + 1) + idx;
  380|  3.32k|  }
_ZNK6google8protobuf8internal16TcParseTableBase18field_lookup_beginEv:
  386|     15|  const uint16_t* field_lookup_begin() const {
  387|     15|    return reinterpret_cast<const uint16_t*>(reinterpret_cast<uintptr_t>(this) +
  388|     15|                                             lookup_table_offset);
  389|     15|  }
_ZNK6google8protobuf8internal16TcParseTableBase19field_entries_beginEv:
  406|    103|  const FieldEntry* field_entries_begin() const {
  407|    103|    return reinterpret_cast<const FieldEntry*>(
  408|    103|        reinterpret_cast<uintptr_t>(this) + field_entries_offset);
  409|    103|  }
_ZN6google8protobuf8internal16TcParseTableBase8FieldAuxC2Ev:
  420|     27|    constexpr FieldAux() : message_default_p(nullptr) {}
_ZNK6google8protobuf8internal16TcParseTableBase9field_auxEj:
  451|    485|  const FieldAux* field_aux(uint32_t idx) const {
  452|    485|    return reinterpret_cast<const FieldAux*>(reinterpret_cast<uintptr_t>(this) +
  453|    485|                                             aux_offset) +
  454|    485|           idx;
  455|    485|  }
_ZNK6google8protobuf8internal16TcParseTableBase9field_auxEPKNS2_10FieldEntryE:
  461|     88|  const FieldAux* field_aux(const FieldEntry* entry) const {
  462|     88|    return field_aux(entry->aux_idx);
  463|     88|  }
_ZNK6google8protobuf8internal16TcParseTableBase16default_instanceEv:
  477|      8|  const MessageLite* default_instance() const { return class_data->prototype; }
_ZNK6google8protobuf8internal11TcFieldData9coded_tagIhEET_v:
   82|  3.21k|  TagType coded_tag() const {
   83|  3.21k|    return static_cast<TagType>(data);
   84|  3.21k|  }
_ZNK6google8protobuf8internal11TcFieldData9coded_tagItEET_v:
   82|    101|  TagType coded_tag() const {
   83|    101|    return static_cast<TagType>(data);
   84|    101|  }

_ZN6google8protobuf8internal8TcParser15GenericFallbackEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
   49|      8|const char* TcParser::GenericFallback(PROTOBUF_TC_PARAM_DECL) {
   50|      8|  PROTOBUF_MUSTTAIL return GenericFallbackImpl<Message, UnknownFieldSet>(
  ------------------
  |  |  236|      8|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
   51|      8|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      8|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
   52|      8|}

_ZN6google8protobuf8internal8TcParser11SyncHasbitsEPNS0_11MessageLiteEmPKNS1_16TcParseTableBaseE:
  860|  1.02k|      MessageLite* msg, uint64_t hasbits, const TcParseTableBase* table) {
  861|  1.02k|    const uint32_t has_bits_offset = table->has_bits_offset;
  862|  1.02k|    if (has_bits_offset) {
  ------------------
  |  Branch (862:9): [True: 1.02k, False: 0]
  ------------------
  863|       |      // Only the first 32 has-bits are updated. Nothing above those is stored,
  864|       |      // but e.g. messages without has-bits update the upper bits.
  865|  1.02k|      RefAt<uint32_t>(msg, has_bits_offset) |= static_cast<uint32_t>(hasbits);
  866|  1.02k|    }
  867|  1.02k|  }
_ZN6google8protobuf8internal8TcParser11TagDispatchEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1098|  3.32k|    PROTOBUF_TC_PARAM_NO_DATA_DECL) {
 1099|  3.32k|  const auto coded_tag = UnalignedLoad<uint16_t>(ptr);
 1100|  3.32k|  const size_t idx = coded_tag & table->fast_idx_mask;
 1101|  3.32k|  PROTOBUF_ASSUME((idx & 7) == 0);
  ------------------
  |  |  941|  3.32k|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
 1102|  3.32k|  auto* fast_entry = table->fast_entry(idx >> 3);
 1103|  3.32k|  TcFieldData data = fast_entry->bits;
 1104|  3.32k|  data.data ^= coded_tag;
 1105|  3.32k|  PROTOBUF_MUSTTAIL return fast_entry->target()(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|  3.32k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return fast_entry->target()(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|  3.32k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1106|  3.32k|}
_ZN6google8protobuf8internal8TcParser13ToTagDispatchEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1114|  3.07k|    PROTOBUF_TC_PARAM_NO_DATA_DECL) {
 1115|  3.07k|  constexpr bool always_return = !PROTOBUF_TAILCALL;
  ------------------
  |  |  237|  3.07k|#define PROTOBUF_TAILCALL true
  ------------------
 1116|  3.07k|  if (always_return || !ctx->DataAvailable(ptr)) {
  ------------------
  |  Branch (1116:7): [Folded, False: 3.07k]
  |  Branch (1116:24): [True: 772, False: 2.30k]
  ------------------
 1117|    772|    PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|    772|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|    772|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1118|    772|  }
 1119|  2.30k|  PROTOBUF_MUSTTAIL return TagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|  2.30k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return TagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|  2.30k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1120|  3.07k|}
_ZN6google8protobuf8internal8TcParser11ToParseLoopEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1123|    941|    PROTOBUF_TC_PARAM_NO_DATA_DECL) {
 1124|    941|  (void)ctx;
 1125|    941|  SyncHasbits(msg, hasbits, table);
 1126|    941|  return ptr;
 1127|    941|}
_ZN6google8protobuf8internal8TcParser9ParseLoopEPNS0_11MessageLiteEPKcPNS1_12ParseContextEPKNS1_16TcParseTableBaseE:
 1131|    987|    const TcParseTableBase* table) {
 1132|       |  // Note: TagDispatch uses a dispatch table at "&table->fast_entries".
 1133|       |  // For fast dispatch, we'd like to have a pointer to that, but if we use
 1134|       |  // that expression, there's no easy way to get back to "table", which we also
 1135|       |  // need during dispatch.  It turns out that "table + 1" points exactly to
 1136|       |  // fast_entries, so we just increment table by 1 here, to get the register
 1137|       |  // holding the value we want.
 1138|    987|  table += 1;
 1139|  2.01k|  while (!ctx->Done(&ptr)) {
  ------------------
  |  Branch (1139:10): [True: 1.02k, False: 987]
  ------------------
 1140|  1.02k|#if defined(__GNUC__)
 1141|       |    // Note: this asm prevents the compiler (clang, specifically) from
 1142|       |    // believing (thanks to CSE) that it needs to dedicate a register both
 1143|       |    // to "table" and "&table->fast_entries".
 1144|       |    // TODO: remove this asm
 1145|  1.02k|    asm("" : "+r"(table));
 1146|  1.02k|#endif
 1147|  1.02k|    ptr = TagDispatch(msg, ptr, ctx, TcFieldData::DefaultInit(), table - 1, 0);
 1148|  1.02k|    if (ptr == nullptr) break;
  ------------------
  |  Branch (1148:9): [True: 0, False: 1.02k]
  ------------------
 1149|  1.02k|    if (ctx->LastTag() != 1) break;  // Ended on terminating tag
  ------------------
  |  Branch (1149:9): [True: 0, False: 1.02k]
  ------------------
 1150|  1.02k|  }
 1151|    987|  table -= 1;
 1152|    987|  if (ABSL_PREDICT_FALSE(table->has_post_loop_handler)) {
  ------------------
  |  |  178|    987|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 987]
  |  |  |  Branch (178:49): [Folded, False: 987]
  |  |  |  Branch (178:58): [True: 0, False: 987]
  |  |  ------------------
  ------------------
 1153|      0|    return table->post_loop_handler(msg, ptr, ctx);
 1154|      0|  }
 1155|    987|  return ptr;
 1156|    987|}
_ZN6google8protobuf8internal8TcParser5RefAtIjEERT_Pvm:
  714|  1.81k|  static inline T& RefAt(void* x, size_t offset) {
  715|  1.81k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|  1.81k|    return *target;
  728|  1.81k|  }
_ZN6google8protobuf8internal8TcParser19GenericFallbackImplINS0_7MessageENS0_15UnknownFieldSetEEEPKcPNS0_11MessageLiteES7_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  906|      8|  PROTOBUF_CC static const char* GenericFallbackImpl(PROTOBUF_TC_PARAM_DECL) {
  907|      8|    if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|      8|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 8]
  |  |  |  Branch (365:54): [Folded, False: 8]
  |  |  |  Branch (365:63): [True: 0, False: 8]
  |  |  ------------------
  ------------------
  908|       |      // This is the ABI used by GetUnknownFieldOps(). Return the vtable.
  909|      0|      static constexpr UnknownFieldOps kOps = {
  910|      0|          WriteVarintToUnknown<UnknownFieldsT>,
  911|      0|          WriteLengthDelimitedToUnknown<UnknownFieldsT>};
  912|      0|      return reinterpret_cast<const char*>(&kOps);
  913|      0|    }
  914|       |
  915|      8|    SyncHasbits(msg, hasbits, table);
  916|      8|    uint32_t tag = data.tag();
  917|      8|    if ((tag & 7) == WireFormatLite::WIRETYPE_END_GROUP || tag == 0) {
  ------------------
  |  Branch (917:9): [True: 0, False: 8]
  |  Branch (917:60): [True: 0, False: 8]
  ------------------
  918|      0|      ctx->SetLastTag(tag);
  919|      0|      return ptr;
  920|      0|    }
  921|       |
  922|      8|    if (table->extension_offset != 0) {
  ------------------
  |  Branch (922:9): [True: 8, False: 0]
  ------------------
  923|       |      // We don't need to check the extension ranges. If it is not an extension
  924|       |      // it will be handled just like if it was an unknown extension: sent to
  925|       |      // the unknown field set.
  926|      8|      return RefAt<ExtensionSet>(msg, table->extension_offset)
  927|      8|          .ParseField(
  928|      8|              tag, ptr,
  929|      8|              static_cast<const MessageBaseT*>(table->default_instance()),
  930|      8|              &msg->_internal_metadata_, ctx);
  931|      8|    } else {
  932|       |      // Otherwise, we directly put it on the unknown field set.
  933|      0|      return UnknownFieldParse(
  934|      0|          tag,
  935|      0|          msg->_internal_metadata_.mutable_unknown_fields<UnknownFieldsT>(),
  936|      0|          ptr, ctx);
  937|      0|    }
  938|      8|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS1_12ExtensionSetEEERT_Pvm:
  714|      8|  static inline T& RefAt(void* x, size_t offset) {
  715|      8|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|      8|    return *target;
  728|      8|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS1_16TcParseTableBase10FieldEntryEEERKT_PKvm:
  731|    149|  static inline const T& RefAt(const void* x, size_t offset) {
  732|    149|    const T* target =
  733|    149|        reinterpret_cast<const T*>(static_cast<const char*>(x) + offset);
  734|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  735|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  736|       |    // not respect the alignment as expressed by `alignof(T)`
  737|       |    if (PROTOBUF_PREDICT_FALSE(
  738|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  739|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  740|       |                reinterpret_cast<uintptr_t>(target));
  741|       |      // Explicit abort to let compilers know this code-path does not return
  742|       |      abort();
  743|       |    }
  744|       |#endif
  745|    149|    return *target;
  746|    149|  }
_ZN6google8protobuf8internal8TcParser29MaybeCreateRepeatedFieldRefAtIjLb0EEERNS0_13RepeatedFieldIT_EEPvmPNS0_11MessageLiteE:
  767|     27|      void* x, size_t offset, MessageLite* msg) {
  768|     27|    return MaybeCreateRepeatedRefAt<RepeatedField<T>, is_split>(x, offset, msg);
  769|     27|  }
_ZN6google8protobuf8internal8TcParser24MaybeCreateRepeatedRefAtINS0_13RepeatedFieldIjEELb0EEERT_PvmPNS0_11MessageLiteE:
  756|     27|                                            MessageLite* msg) {
  757|     27|    if (!is_split) return RefAt<T>(x, offset);
  ------------------
  |  Branch (757:9): [True: 27, Folded]
  ------------------
  758|      0|    void*& ptr = RefAt<void*>(x, offset);
  759|      0|    if (ptr == DefaultRawPtr()) {
  ------------------
  |  Branch (759:9): [True: 0, False: 0]
  ------------------
  760|      0|      ptr = Arena::Create<T>(msg->GetArena());
  761|      0|    }
  762|      0|    return *static_cast<T*>(ptr);
  763|     27|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS0_13RepeatedFieldIjEEEERT_Pvm:
  714|     27|  static inline T& RefAt(void* x, size_t offset) {
  715|     27|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|     27|    return *target;
  728|     27|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEERT_Pvm:
  714|      6|  static inline T& RefAt(void* x, size_t offset) {
  715|      6|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|      6|    return *target;
  728|      6|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS1_20RepeatedPtrFieldBaseEEERT_Pvm:
  714|    257|  static inline T& RefAt(void* x, size_t offset) {
  715|    257|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|    257|    return *target;
  728|    257|  }
_ZN6google8protobuf8internal8TcParser5RefAtIbEERT_Pvm:
  714|     33|  static inline T& RefAt(void* x, size_t offset) {
  715|     33|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|     33|    return *target;
  728|     33|  }
_ZN6google8protobuf8internal8TcParser5RefAtIiEERT_Pvm:
  714|  1.00k|  static inline T& RefAt(void* x, size_t offset) {
  715|  1.00k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|  1.00k|    return *target;
  728|  1.00k|  }
_ZN6google8protobuf8internal8TcParser5RefAtINS1_14ArenaStringPtrEEERT_Pvm:
  714|  1.12k|  static inline T& RefAt(void* x, size_t offset) {
  715|  1.12k|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|  1.12k|    return *target;
  728|  1.12k|  }
_ZN6google8protobuf8internal8TcParser5RefAtIPNS0_11MessageLiteEEERT_Pvm:
  714|     74|  static inline T& RefAt(void* x, size_t offset) {
  715|     74|    T* target = reinterpret_cast<T*>(static_cast<char*>(x) + offset);
  716|       |#if !defined(NDEBUG) && !(defined(_MSC_VER) && defined(_M_IX86))
  717|       |    // Check the alignment in debug mode, except in 32-bit msvc because it does
  718|       |    // not respect the alignment as expressed by `alignof(T)`
  719|       |    if (PROTOBUF_PREDICT_FALSE(
  720|       |            reinterpret_cast<uintptr_t>(target) % alignof(T) != 0)) {
  721|       |      AlignFail(std::integral_constant<size_t, alignof(T)>(),
  722|       |                reinterpret_cast<uintptr_t>(target));
  723|       |      // Explicit abort to let compilers know this code-path does not return
  724|       |      abort();
  725|       |    }
  726|       |#endif
  727|     74|    return *target;
  728|     74|  }

_ZN6google8protobuf8internal8TcParser21ParseLoopPreserveNoneEPNS0_11MessageLiteEPKcPNS1_12ParseContextEPKNS1_16TcParseTableBaseE:
   82|     27|    const TcParseTableBase* table) {
   83|     27|  return ParseLoop(msg, ptr, ctx, table);
   84|     27|}
_ZN6google8protobuf8internal8TcParser14FindFieldEntryEPKNS1_16TcParseTableBaseEj:
  138|    103|    const TcParseTableBase* table, uint32_t field_num) {
  139|    103|  const FieldEntry* const field_entries = table->field_entries_begin();
  140|       |
  141|    103|  uint32_t fstart = 1;
  142|    103|  uint32_t adj_fnum = field_num - fstart;
  143|       |
  144|    103|  if (PROTOBUF_PREDICT_TRUE(adj_fnum < 32)) {
  ------------------
  |  |  364|    103|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 88, False: 15]
  |  |  |  Branch (364:53): [Folded, False: 103]
  |  |  |  Branch (364:62): [True: 88, False: 15]
  |  |  ------------------
  ------------------
  145|     88|    uint32_t skipmap = table->skipmap32;
  146|     88|    uint32_t skipbit = 1 << adj_fnum;
  147|     88|    if (PROTOBUF_PREDICT_FALSE(skipmap & skipbit)) return nullptr;
  ------------------
  |  |  365|     88|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 88]
  |  |  |  Branch (365:54): [Folded, False: 88]
  |  |  |  Branch (365:63): [True: 0, False: 88]
  |  |  ------------------
  ------------------
  148|     88|    skipmap &= skipbit - 1;
  149|     88|    adj_fnum -= absl::popcount(skipmap);
  150|     88|    auto* entry = field_entries + adj_fnum;
  151|     88|    PROTOBUF_ASSUME(entry != nullptr);
  ------------------
  |  |  941|     88|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  152|     88|    return entry;
  153|     88|  }
  154|     15|  const uint16_t* lookup_table = table->field_lookup_begin();
  155|     15|  for (;;) {
  156|     15|#ifdef ABSL_IS_LITTLE_ENDIAN
  157|     15|    memcpy(&fstart, lookup_table, sizeof(fstart));
  158|       |#else
  159|       |    fstart = lookup_table[0] | (lookup_table[1] << 16);
  160|       |#endif
  161|     15|    lookup_table += sizeof(fstart) / sizeof(*lookup_table);
  162|     15|    uint32_t num_skip_entries = *lookup_table++;
  163|     15|    if (field_num < fstart) return nullptr;
  ------------------
  |  Branch (163:9): [True: 8, False: 7]
  ------------------
  164|      7|    adj_fnum = field_num - fstart;
  165|      7|    uint32_t skip_num = adj_fnum / 16;
  166|      7|    if (PROTOBUF_PREDICT_TRUE(skip_num < num_skip_entries)) {
  ------------------
  |  |  364|      7|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 7, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 7]
  |  |  |  Branch (364:62): [True: 7, False: 0]
  |  |  ------------------
  ------------------
  167|       |      // for each group of 16 fields we have:
  168|       |      // a bitmap of 16 bits
  169|       |      // a 16-bit field-entry offset for the first of them.
  170|      7|      auto* skip_data = lookup_table + (adj_fnum / 16) * (sizeof(SkipEntry16) /
  171|      7|                                                          sizeof(uint16_t));
  172|      7|      SkipEntry16 se = {skip_data[0], skip_data[1]};
  173|      7|      adj_fnum &= 15;
  174|      7|      uint32_t skipmap = se.skipmap;
  175|      7|      uint16_t skipbit = 1 << adj_fnum;
  176|      7|      if (PROTOBUF_PREDICT_FALSE(skipmap & skipbit)) return nullptr;
  ------------------
  |  |  365|      7|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 7]
  |  |  |  Branch (365:54): [Folded, False: 7]
  |  |  |  Branch (365:63): [True: 0, False: 7]
  |  |  ------------------
  ------------------
  177|      7|      skipmap &= skipbit - 1;
  178|      7|      adj_fnum += se.field_entry_offset;
  179|      7|      adj_fnum -= absl::popcount(skipmap);
  180|      7|      auto* entry = field_entries + adj_fnum;
  181|      7|      PROTOBUF_ASSUME(entry != nullptr);
  ------------------
  |  |  941|      7|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  182|      7|      return entry;
  183|      7|    }
  184|      0|    lookup_table +=
  185|      0|        num_skip_entries * (sizeof(SkipEntry16) / sizeof(*lookup_table));
  186|      0|  }
  187|     15|}
_ZN6google8protobuf8internal8TcParser9MiniParseEPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  322|    103|    PROTOBUF_TC_PARAM_NO_DATA_DECL) {
  323|    103|  PROTOBUF_MUSTTAIL return MiniParse<false>(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|    103|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return MiniParse<false>(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|    103|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  324|    103|}
_ZN6google8protobuf8internal8TcParser10AddMessageEPKNS1_16TcParseTableBaseERNS1_20RepeatedPtrFieldBaseE:
  364|    875|                                  RepeatedPtrFieldBase& field) {
  365|    875|  return static_cast<MessageLite*>(field.AddInternal(
  366|    875|      [table](Arena* arena) { return NewMessage(table, arena); }));
  367|    875|}
_ZN6google8protobuf8internal8TcParser8FastMtS1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  417|     47|PROTOBUF_NOINLINE const char* TcParser::FastMtS1(PROTOBUF_TC_PARAM_DECL) {
  418|     47|  PROTOBUF_MUSTTAIL return SingularParseMessageAuxImpl<uint8_t, false, true>(
  ------------------
  |  |  236|     47|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  419|     47|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     47|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  420|     47|}
_ZN6google8protobuf8internal8TcParser8FastMtR1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  503|    231|PROTOBUF_NOINLINE const char* TcParser::FastMtR1(PROTOBUF_TC_PARAM_DECL) {
  504|    231|  PROTOBUF_MUSTTAIL return RepeatedParseMessageAuxImpl<uint8_t, false, true>(
  ------------------
  |  |  236|    231|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  505|    231|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|    231|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  506|    231|}
_ZN6google8protobuf8internal8TcParser8FastMtR2EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  508|     27|PROTOBUF_NOINLINE const char* TcParser::FastMtR2(PROTOBUF_TC_PARAM_DECL) {
  509|     27|  PROTOBUF_MUSTTAIL return RepeatedParseMessageAuxImpl<uint16_t, false, true>(
  ------------------
  |  |  236|     27|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  510|     27|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     27|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  511|     27|}
_ZN6google8protobuf8internal8TcParser8FastV8S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  829|     57|PROTOBUF_NOINLINE const char* TcParser::FastV8S1(PROTOBUF_TC_PARAM_DECL) {
  830|     57|  using TagType = uint8_t;
  831|       |
  832|       |  // Special case for a varint bool field with a tag of 1 byte:
  833|       |  // The coded_tag() field will actually contain the value too and we can check
  834|       |  // both at the same time.
  835|     57|  auto coded_tag = data.coded_tag<uint16_t>();
  836|     57|  if (PROTOBUF_PREDICT_TRUE(coded_tag == 0x0000 || coded_tag == 0x0100)) {
  ------------------
  |  |  364|    108|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 30, False: 27]
  |  |  |  Branch (364:53): [Folded, False: 57]
  |  |  |  Branch (364:63): [True: 6, False: 51]
  |  |  |  Branch (364:63): [True: 24, False: 27]
  |  |  ------------------
  ------------------
  837|     30|    auto& field = RefAt<bool>(msg, data.offset());
  838|       |    // Note: we use `data.data` because Clang generates suboptimal code when
  839|       |    // using coded_tag.
  840|       |    // In x86_64 this uses the CH register to read the second byte out of
  841|       |    // `data`.
  842|     30|    uint8_t value = data.data >> 8;
  843|       |    // The assume allows using a mov instead of test+setne.
  844|     30|    PROTOBUF_ASSUME(value <= 1);
  ------------------
  |  |  941|     30|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  845|     30|    field = static_cast<bool>(value);
  846|       |
  847|     30|    ptr += sizeof(TagType) + 1;  // Consume the tag and the value.
  848|     30|    hasbits |= (uint64_t{1} << data.hasbit_idx());
  849|       |
  850|     30|    PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     30|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     30|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  851|     30|  }
  852|       |
  853|       |  // If it didn't match above either the tag is wrong, or the value is encoded
  854|       |  // non-canonically.
  855|       |  // Jump to MiniParse as wrong tag is the most probable reason.
  856|     27|  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     27|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     27|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  857|     57|}
_ZN6google8protobuf8internal8TcParser8FastV8S2EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  859|     10|PROTOBUF_NOINLINE const char* TcParser::FastV8S2(PROTOBUF_TC_PARAM_DECL) {
  860|     10|  PROTOBUF_MUSTTAIL return SingularVarint<bool, uint16_t>(
  ------------------
  |  |  236|     10|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  861|     10|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     10|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  862|     10|}
_ZN6google8protobuf8internal8TcParser9FastV32S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  863|    753|PROTOBUF_NOINLINE const char* TcParser::FastV32S1(PROTOBUF_TC_PARAM_DECL) {
  864|    753|  PROTOBUF_MUSTTAIL return FastVarintS1<uint32_t>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|    753|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return FastVarintS1<uint32_t>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|    753|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  865|    753|}
_ZN6google8protobuf8internal8TcParser8FastEvS1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1095|     93|PROTOBUF_NOINLINE const char* TcParser::FastEvS1(PROTOBUF_TC_PARAM_DECL) {
 1096|     93|  PROTOBUF_MUSTTAIL return SingularEnum<uint8_t, field_layout::kTvEnum>(
  ------------------
  |  |  236|     93|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1097|     93|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     93|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1098|     93|}
_ZN6google8protobuf8internal8TcParser9FastEr0S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1231|     84|PROTOBUF_NOINLINE const char* TcParser::FastEr0S1(PROTOBUF_TC_PARAM_DECL) {
 1232|     84|  PROTOBUF_MUSTTAIL return SingularEnumSmallRange<uint8_t, 0>(
  ------------------
  |  |  236|     84|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1233|     84|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     84|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1234|     84|}
_ZN6google8protobuf8internal8TcParser9FastEr1S1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1241|    891|PROTOBUF_NOINLINE const char* TcParser::FastEr1S1(PROTOBUF_TC_PARAM_DECL) {
 1242|    891|  PROTOBUF_MUSTTAIL return SingularEnumSmallRange<uint8_t, 1>(
  ------------------
  |  |  236|    891|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1243|    891|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|    891|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1244|    891|}
_ZN6google8protobuf8internal8TcParser7FastSS1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1456|  1.11k|PROTOBUF_NOINLINE const char* TcParser::FastSS1(PROTOBUF_TC_PARAM_DECL) {
 1457|  1.11k|  PROTOBUF_MUSTTAIL return SingularString<uint8_t, ArenaStringPtr,
  ------------------
  |  |  236|  1.11k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1458|  1.11k|                                          kUtf8ValidateOnly>(
 1459|  1.11k|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|  1.11k|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1460|  1.11k|}
_ZN6google8protobuf8internal8TcParser7FastSS2EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1461|      7|PROTOBUF_NOINLINE const char* TcParser::FastSS2(PROTOBUF_TC_PARAM_DECL) {
 1462|      7|  PROTOBUF_MUSTTAIL return SingularString<uint16_t, ArenaStringPtr,
  ------------------
  |  |  236|      7|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1463|      7|                                          kUtf8ValidateOnly>(
 1464|      7|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      7|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1465|      7|}
_ZN6google8protobuf8internal8TcParser7FastSR1EPNS0_11MessageLiteEPKcPNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1581|      6|PROTOBUF_NOINLINE const char* TcParser::FastSR1(PROTOBUF_TC_PARAM_DECL) {
 1582|      6|  PROTOBUF_MUSTTAIL return RepeatedString<
  ------------------
  |  |  236|      6|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1583|      6|      uint8_t, RepeatedPtrField<std::string>, kUtf8ValidateOnly>(
 1584|      6|      PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      6|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1585|      6|}
_ZN6google8protobuf8internal8TcParser17MaybeGetSplitBaseEPNS0_11MessageLiteEbPKNS1_16TcParseTableBaseE:
 1693|     95|                                  const TcParseTableBase* table) {
 1694|     95|  void* out = msg;
 1695|     95|  if (is_split) {
  ------------------
  |  Branch (1695:7): [True: 0, False: 95]
  ------------------
 1696|      0|    const uint32_t split_offset = GetSplitOffset(table);
 1697|      0|    void* default_split =
 1698|      0|        TcParser::RefAt<void*>(table->default_instance(), split_offset);
 1699|      0|    void*& split = TcParser::RefAt<void*>(msg, split_offset);
 1700|      0|    if (split == default_split) {
  ------------------
  |  Branch (1700:9): [True: 0, False: 0]
  ------------------
 1701|       |      // Allocate split instance when needed.
 1702|      0|      uint32_t size = GetSizeofSplit(table);
 1703|      0|      Arena* arena = msg->GetArena();
 1704|      0|      split = (arena == nullptr) ? ::operator new(size)
  ------------------
  |  Branch (1704:15): [True: 0, False: 0]
  ------------------
 1705|      0|                                 : arena->AllocateAligned(size);
 1706|      0|      memcpy(split, default_split, size);
 1707|      0|    }
 1708|      0|    out = split;
 1709|      0|  }
 1710|     95|  return out;
 1711|     95|}
_ZN6google8protobuf8internal8TcParser12MpVerifyUtf8ENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPKNS1_16TcParseTableBaseERKNS8_10FieldEntryEt:
 2116|      7|                            const FieldEntry& entry, uint16_t xform_val) {
 2117|      7|  if (xform_val == field_layout::kTvUtf8) {
  ------------------
  |  Branch (2117:7): [True: 0, False: 7]
  ------------------
 2118|      0|    if (!utf8_range::IsStructurallyValid(wire_bytes)) {
  ------------------
  |  Branch (2118:9): [True: 0, False: 0]
  ------------------
 2119|      0|      PrintUTF8ErrorLog(MessageName(table), FieldName(table, &entry), "parsing",
 2120|      0|                        false);
 2121|      0|      return false;
 2122|      0|    }
 2123|      0|    return true;
 2124|      0|  }
 2125|       |#ifndef NDEBUG
 2126|       |  if (xform_val == field_layout::kTvUtf8Debug) {
 2127|       |    if (!utf8_range::IsStructurallyValid(wire_bytes)) {
 2128|       |      PrintUTF8ErrorLog(MessageName(table), FieldName(table, &entry), "parsing",
 2129|       |                        false);
 2130|       |    }
 2131|       |  }
 2132|       |#endif  // NDEBUG
 2133|      7|  return true;
 2134|      7|}
_ZN6google8protobuf8internal8TcParser9MiniParseILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  238|    103|    PROTOBUF_TC_PARAM_DECL) {
  239|    103|  TestMiniParseResult* test_out;
  240|    103|  if (export_called_function) {
  ------------------
  |  Branch (240:7): [Folded, False: 103]
  ------------------
  241|      0|    test_out = reinterpret_cast<TestMiniParseResult*>(
  242|      0|        static_cast<uintptr_t>(data.data));
  243|      0|  }
  244|       |
  245|    103|  uint32_t tag;
  246|    103|  ptr = ReadTagInlined(ptr, &tag);
  247|    103|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|    103|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 103]
  |  |  |  Branch (365:54): [Folded, False: 103]
  |  |  |  Branch (365:63): [True: 0, False: 103]
  |  |  ------------------
  ------------------
  248|      0|    if (export_called_function) *test_out = {Error};
  ------------------
  |  Branch (248:9): [Folded, False: 0]
  ------------------
  249|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  250|      0|  }
  251|       |
  252|    103|  auto* entry = FindFieldEntry(table, tag >> 3);
  253|    103|  if (entry == nullptr) {
  ------------------
  |  Branch (253:7): [True: 8, False: 95]
  ------------------
  254|      8|    if (export_called_function) *test_out = {table->fallback, tag};
  ------------------
  |  Branch (254:9): [Folded, False: 8]
  ------------------
  255|      8|    data.data = tag;
  256|      8|    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      8|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      8|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  257|      8|  }
  258|       |
  259|       |  // The handler may need the tag and the entry to resolve fallback logic. Both
  260|       |  // of these are 32 bits, so pack them into (the 64-bit) `data`. Since we can't
  261|       |  // pack the entry pointer itself, just pack its offset from `table`.
  262|     95|  uint64_t entry_offset = reinterpret_cast<const char*>(entry) -
  263|     95|                          reinterpret_cast<const char*>(table);
  264|     95|  data.data = entry_offset << 32 | tag;
  265|       |
  266|     95|  using field_layout::FieldKind;
  267|     95|  auto field_type =
  268|     95|      entry->type_card & (+field_layout::kSplitMask | FieldKind::kFkMask);
  269|       |
  270|     95|  static constexpr TailCallParseFunc kMiniParseTable[] = {
  271|     95|      &MpFallback,             // FieldKind::kFkNone
  272|     95|      &MpVarint<false>,        // FieldKind::kFkVarint
  273|     95|      &MpPackedVarint<false>,  // FieldKind::kFkPackedVarint
  274|     95|      &MpFixed<false>,         // FieldKind::kFkFixed
  275|     95|      &MpPackedFixed<false>,   // FieldKind::kFkPackedFixed
  276|     95|      &MpString<false>,        // FieldKind::kFkString
  277|     95|      &MpMessage<false>,       // FieldKind::kFkMessage
  278|     95|      &MpMap<false>,           // FieldKind::kFkMap
  279|     95|      &Error,                  // kSplitMask | FieldKind::kFkNone
  280|     95|      &MpVarint<true>,         // kSplitMask | FieldKind::kFkVarint
  281|     95|      &MpPackedVarint<true>,   // kSplitMask | FieldKind::kFkPackedVarint
  282|     95|      &MpFixed<true>,          // kSplitMask | FieldKind::kFkFixed
  283|     95|      &MpPackedFixed<true>,    // kSplitMask | FieldKind::kFkPackedFixed
  284|     95|      &MpString<true>,         // kSplitMask | FieldKind::kFkString
  285|     95|      &MpMessage<true>,        // kSplitMask | FieldKind::kFkMessage
  286|     95|      &MpMap<true>,            // kSplitMask | FieldKind::kFkMap
  287|     95|  };
  288|       |  // Just to be sure we got the order right, above.
  289|     95|  static_assert(0 == FieldKind::kFkNone, "Invalid table order");
  290|     95|  static_assert(1 == FieldKind::kFkVarint, "Invalid table order");
  291|     95|  static_assert(2 == FieldKind::kFkPackedVarint, "Invalid table order");
  292|     95|  static_assert(3 == FieldKind::kFkFixed, "Invalid table order");
  293|     95|  static_assert(4 == FieldKind::kFkPackedFixed, "Invalid table order");
  294|     95|  static_assert(5 == FieldKind::kFkString, "Invalid table order");
  295|     95|  static_assert(6 == FieldKind::kFkMessage, "Invalid table order");
  296|     95|  static_assert(7 == FieldKind::kFkMap, "Invalid table order");
  297|       |
  298|     95|  static_assert(8 == (+field_layout::kSplitMask | FieldKind::kFkNone),
  299|     95|    "Invalid table order");
  300|     95|  static_assert(9 == (+field_layout::kSplitMask | FieldKind::kFkVarint),
  301|     95|    "Invalid table order");
  302|     95|  static_assert(10 == (+field_layout::kSplitMask | FieldKind::kFkPackedVarint),
  303|     95|    "Invalid table order");
  304|     95|  static_assert(11 == (+field_layout::kSplitMask | FieldKind::kFkFixed),
  305|     95|    "Invalid table order");
  306|     95|  static_assert(12 == (+field_layout::kSplitMask | FieldKind::kFkPackedFixed),
  307|     95|    "Invalid table order");
  308|     95|  static_assert(13 == (+field_layout::kSplitMask | FieldKind::kFkString),
  309|     95|    "Invalid table order");
  310|     95|  static_assert(14 == (+field_layout::kSplitMask | FieldKind::kFkMessage),
  311|     95|    "Invalid table order");
  312|     95|  static_assert(15 == (+field_layout::kSplitMask | FieldKind::kFkMap),
  313|     95|    "Invalid table order");
  314|       |
  315|     95|  TailCallParseFunc parse_fn = kMiniParseTable[field_type];
  316|     95|  if (export_called_function) *test_out = {parse_fn, tag, entry};
  ------------------
  |  Branch (316:7): [Folded, False: 95]
  ------------------
  317|       |
  318|     95|  PROTOBUF_MUSTTAIL return parse_fn(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|     95|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return parse_fn(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     95|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  319|    103|}
_ZN6google8protobuf8internal8TcParser8MpVarintILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1845|     61|PROTOBUF_NOINLINE const char* TcParser::MpVarint(PROTOBUF_TC_PARAM_DECL) {
 1846|     61|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 1847|     61|  const uint16_t type_card = entry.type_card;
 1848|     61|  const uint16_t card = type_card & field_layout::kFcMask;
 1849|       |
 1850|       |  // Check for repeated parsing:
 1851|     61|  if (card == field_layout::kFcRepeated) {
  ------------------
  |  Branch (1851:7): [True: 27, False: 34]
  ------------------
 1852|     27|    PROTOBUF_MUSTTAIL return MpRepeatedVarint<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|     27|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MpRepeatedVarint<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     27|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1853|     27|  }
 1854|       |  // Check for wire type mismatch:
 1855|     34|  if ((data.tag() & 7) != WireFormatLite::WIRETYPE_VARINT) {
  ------------------
  |  Branch (1855:7): [True: 0, False: 34]
  ------------------
 1856|      0|    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1857|      0|  }
 1858|     34|  const uint16_t xform_val = type_card & field_layout::kTvMask;
 1859|     34|  const bool is_zigzag = xform_val == field_layout::kTvZigZag;
 1860|     34|  const bool is_validated_enum = xform_val & field_layout::kTvEnum;
 1861|       |
 1862|       |  // Parse the value:
 1863|     34|  const char* ptr2 = ptr;  // save for unknown enum case
 1864|     34|  uint64_t tmp;
 1865|     34|  ptr = ParseVarint(ptr, &tmp);
 1866|     34|  if (ptr == nullptr) {
  ------------------
  |  Branch (1866:7): [True: 0, False: 34]
  ------------------
 1867|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1868|      0|  }
 1869|       |
 1870|       |  // Transform and/or validate the value
 1871|     34|  uint16_t rep = type_card & field_layout::kRepMask;
 1872|     34|  if (rep == field_layout::kRep64Bits) {
  ------------------
  |  Branch (1872:7): [True: 0, False: 34]
  ------------------
 1873|      0|    if (is_zigzag) {
  ------------------
  |  Branch (1873:9): [True: 0, False: 0]
  ------------------
 1874|      0|      tmp = WireFormatLite::ZigZagDecode64(tmp);
 1875|      0|    }
 1876|     34|  } else if (rep == field_layout::kRep32Bits) {
  ------------------
  |  Branch (1876:14): [True: 34, False: 0]
  ------------------
 1877|     34|    if (is_validated_enum) {
  ------------------
  |  Branch (1877:9): [True: 34, False: 0]
  ------------------
 1878|     34|      if (!EnumIsValidAux(tmp, xform_val, *table->field_aux(&entry))) {
  ------------------
  |  Branch (1878:11): [True: 0, False: 34]
  ------------------
 1879|      0|        ptr = ptr2;
 1880|      0|        PROTOBUF_MUSTTAIL return MpUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return MpUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1881|      0|      }
 1882|     34|    } else if (is_zigzag) {
  ------------------
  |  Branch (1882:16): [True: 0, False: 0]
  ------------------
 1883|      0|      tmp = WireFormatLite::ZigZagDecode32(static_cast<uint32_t>(tmp));
 1884|      0|    }
 1885|     34|  }
 1886|       |
 1887|       |  // Mark the field as present:
 1888|     34|  const bool is_oneof = card == field_layout::kFcOneof;
 1889|     34|  if (card == field_layout::kFcOptional) {
  ------------------
  |  Branch (1889:7): [True: 34, False: 0]
  ------------------
 1890|     34|    SetHas(entry, msg);
 1891|     34|  } else if (is_oneof) {
  ------------------
  |  Branch (1891:14): [True: 0, False: 0]
  ------------------
 1892|      0|    ChangeOneof(table, entry, data.tag() >> 3, ctx, msg);
 1893|      0|  }
 1894|       |
 1895|     34|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 1896|     34|  if (rep == field_layout::kRep64Bits) {
  ------------------
  |  Branch (1896:7): [True: 0, False: 34]
  ------------------
 1897|      0|    RefAt<uint64_t>(base, entry.offset) = tmp;
 1898|     34|  } else if (rep == field_layout::kRep32Bits) {
  ------------------
  |  Branch (1898:14): [True: 34, False: 0]
  ------------------
 1899|     34|    RefAt<uint32_t>(base, entry.offset) = static_cast<uint32_t>(tmp);
 1900|     34|  } else {
 1901|      0|    ABSL_DCHECK_EQ(rep, static_cast<uint16_t>(field_layout::kRep8Bits));
  ------------------
  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1902|      0|    RefAt<bool>(base, entry.offset) = static_cast<bool>(tmp);
 1903|      0|  }
 1904|       |
 1905|     34|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     34|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     34|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1906|     34|}
_ZN6google8protobuf8internal8TcParser16MpRepeatedVarintILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1958|     27|    PROTOBUF_TC_PARAM_DECL) {
 1959|     27|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 1960|     27|  const auto type_card = entry.type_card;
 1961|     27|  const uint32_t decoded_tag = data.tag();
 1962|     27|  const auto decoded_wiretype = decoded_tag & 7;
 1963|       |
 1964|       |  // Check for packed repeated fallback:
 1965|     27|  if (decoded_wiretype == WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
  ------------------
  |  Branch (1965:7): [True: 0, False: 27]
  ------------------
 1966|      0|    PROTOBUF_MUSTTAIL return MpPackedVarint<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MpPackedVarint<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1967|      0|  }
 1968|       |  // Check for wire type mismatch:
 1969|     27|  if (decoded_wiretype != WireFormatLite::WIRETYPE_VARINT) {
  ------------------
  |  Branch (1969:7): [True: 0, False: 27]
  ------------------
 1970|      0|    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1971|      0|  }
 1972|       |  // For split we avoid the duplicate code and have the impl reload the value.
 1973|       |  // Less code bloat for uncommon paths.
 1974|     27|  const uint16_t xform_val = (type_card & field_layout::kTvMask);
 1975|     27|  const uint16_t rep = type_card & field_layout::kRepMask;
 1976|     27|  switch (rep >> field_layout::kRepShift) {
 1977|      0|    case field_layout::kRep64Bits >> field_layout::kRepShift:
  ------------------
  |  Branch (1977:5): [True: 0, False: 27]
  ------------------
 1978|      0|      if (xform_val == 0) {
  ------------------
  |  Branch (1978:11): [True: 0, False: 0]
  ------------------
 1979|      0|        PROTOBUF_MUSTTAIL return MpRepeatedVarintT<is_split, uint64_t, 0>(
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1980|      0|            PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1981|      0|      } else {
 1982|      0|        ABSL_DCHECK_EQ(xform_val, +field_layout::kTvZigZag);
  ------------------
  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1983|      0|        PROTOBUF_MUSTTAIL return MpRepeatedVarintT<
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1984|      0|            is_split, uint64_t, (is_split ? 0 : field_layout::kTvZigZag)>(
 1985|      0|            PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1986|      0|      }
 1987|     27|    case field_layout::kRep32Bits >> field_layout::kRepShift:
  ------------------
  |  Branch (1987:5): [True: 27, False: 0]
  ------------------
 1988|     27|      switch (xform_val >> field_layout::kTvShift) {
 1989|      0|        case 0:
  ------------------
  |  Branch (1989:9): [True: 0, False: 27]
  ------------------
 1990|      0|          PROTOBUF_MUSTTAIL return MpRepeatedVarintT<is_split, uint32_t, 0>(
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1991|      0|              PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1992|      0|        case field_layout::kTvZigZag >> field_layout::kTvShift:
  ------------------
  |  Branch (1992:9): [True: 0, False: 27]
  ------------------
 1993|      0|          PROTOBUF_MUSTTAIL return MpRepeatedVarintT<
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1994|      0|              is_split, uint32_t, (is_split ? 0 : field_layout::kTvZigZag)>(
 1995|      0|              PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1996|      0|        case field_layout::kTvEnum >> field_layout::kTvShift:
  ------------------
  |  Branch (1996:9): [True: 0, False: 27]
  ------------------
 1997|      0|          PROTOBUF_MUSTTAIL return MpRepeatedVarintT<
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 1998|      0|              is_split, uint32_t, (is_split ? 0 : field_layout::kTvEnum)>(
 1999|      0|              PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2000|     27|        case field_layout::kTvRange >> field_layout::kTvShift:
  ------------------
  |  Branch (2000:9): [True: 27, False: 0]
  ------------------
 2001|     27|          PROTOBUF_MUSTTAIL return MpRepeatedVarintT<
  ------------------
  |  |  236|     27|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 2002|     27|              is_split, uint32_t, (is_split ? 0 : field_layout::kTvRange)>(
 2003|     27|              PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|     27|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2004|      0|        default:
  ------------------
  |  Branch (2004:9): [True: 0, False: 27]
  ------------------
 2005|      0|          Unreachable();
 2006|     27|      }
 2007|      0|    case field_layout::kRep8Bits >> field_layout::kRepShift:
  ------------------
  |  Branch (2007:5): [True: 0, False: 27]
  ------------------
 2008|      0|      PROTOBUF_MUSTTAIL return MpRepeatedVarintT<is_split, bool, 0>(
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 2009|      0|          PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2010|       |
 2011|      0|    default:
  ------------------
  |  Branch (2011:5): [True: 0, False: 27]
  ------------------
 2012|      0|      Unreachable();
 2013|      0|      return nullptr;  // To silence -Werror=return-type in some toolchains
 2014|     27|  }
 2015|     27|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_116PrefetchEnumDataEtNS1_16TcParseTableBase8FieldAuxE:
  725|    120|    uint16_t xform_val, TcParseTableBase::FieldAux aux) {
  726|    120|}
_ZN6google8protobuf8internal8TcParser17MpRepeatedVarintTILb0EjLt1536EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1909|     27|const char* TcParser::MpRepeatedVarintT(PROTOBUF_TC_PARAM_DECL) {
 1910|     27|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 1911|     27|  const uint32_t decoded_tag = data.tag();
 1912|       |  // For is_split we ignore the incoming xform_val and read it from entry to
 1913|       |  // reduce duplication for the uncommon paths.
 1914|     27|  const uint16_t xform_val =
 1915|     27|      is_split ? (entry.type_card & field_layout::kTvMask) : xform_val_in;
  ------------------
  |  Branch (1915:7): [Folded, False: 27]
  ------------------
 1916|     27|  const bool is_zigzag = xform_val == field_layout::kTvZigZag;
 1917|     27|  const bool is_validated_enum = xform_val & field_layout::kTvEnum;
 1918|       |
 1919|     27|  const char* ptr2 = ptr;
 1920|     27|  uint32_t next_tag;
 1921|     27|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 1922|     27|  auto& field = MaybeCreateRepeatedFieldRefAt<FieldType, is_split>(
 1923|     27|      base, entry.offset, msg);
 1924|       |
 1925|     27|  TcParseTableBase::FieldAux aux;
 1926|     27|  if (is_validated_enum) {
  ------------------
  |  Branch (1926:7): [True: 27, Folded]
  ------------------
 1927|     27|    aux = *table->field_aux(&entry);
 1928|     27|    PrefetchEnumData(xform_val, aux);
 1929|     27|  }
 1930|       |
 1931|     57|  do {
 1932|     57|    uint64_t tmp;
 1933|     57|    ptr = ParseVarint(ptr2, &tmp);
 1934|     57|    if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) goto error;
  ------------------
  |  |  365|     57|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 57]
  |  |  |  Branch (365:54): [Folded, False: 57]
  |  |  |  Branch (365:63): [True: 0, False: 57]
  |  |  ------------------
  ------------------
 1935|     57|    if (is_validated_enum) {
  ------------------
  |  Branch (1935:9): [True: 57, Folded]
  ------------------
 1936|     57|      if (!EnumIsValidAux(static_cast<int32_t>(tmp), xform_val, aux)) {
  ------------------
  |  Branch (1936:11): [True: 0, False: 57]
  ------------------
 1937|      0|        ptr = ptr2;
 1938|      0|        PROTOBUF_MUSTTAIL return MpUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return MpUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1939|      0|      }
 1940|     57|    } else if (is_zigzag) {
  ------------------
  |  Branch (1940:16): [Folded, False: 0]
  ------------------
 1941|      0|      tmp = sizeof(FieldType) == 8 ? WireFormatLite::ZigZagDecode64(tmp)
  ------------------
  |  Branch (1941:13): [Folded, False: 0]
  ------------------
 1942|      0|                                   : WireFormatLite::ZigZagDecode32(tmp);
 1943|      0|    }
 1944|     57|    field.Add(static_cast<FieldType>(tmp));
 1945|     57|    if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  365|     57|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 57]
  |  |  |  Branch (365:54): [Folded, False: 57]
  |  |  |  Branch (365:63): [True: 0, False: 57]
  |  |  ------------------
  ------------------
 1946|     57|    ptr2 = ReadTag(ptr, &next_tag);
 1947|     57|    if (PROTOBUF_PREDICT_FALSE(ptr2 == nullptr)) goto error;
  ------------------
  |  |  365|     57|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 57]
  |  |  |  Branch (365:54): [Folded, False: 57]
  |  |  |  Branch (365:63): [True: 0, False: 57]
  |  |  ------------------
  ------------------
 1948|     57|  } while (next_tag == decoded_tag);
  ------------------
  |  Branch (1948:12): [True: 30, False: 27]
  ------------------
 1949|       |
 1950|     27|parse_loop:
 1951|     27|  PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     27|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     27|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1952|      0|error:
 1953|      0|  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1954|     27|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_114EnumIsValidAuxEitNS1_16TcParseTableBase8FieldAuxE:
  737|    184|    int32_t val, uint16_t xform_val, TcParseTableBase::FieldAux aux) {
  738|    184|  if (xform_val == field_layout::kTvRange) {
  ------------------
  |  Branch (738:7): [True: 90, False: 94]
  ------------------
  739|     90|    auto lo = aux.enum_range.start;
  740|     90|    return lo <= val && val < (lo + aux.enum_range.length);
  ------------------
  |  Branch (740:12): [True: 90, False: 0]
  |  Branch (740:25): [True: 90, False: 0]
  ------------------
  741|     90|  }
  742|     94|  if (PROTOBUF_BUILTIN_CONSTANT_P(xform_val)) {
  ------------------
  |  |  636|     94|#define PROTOBUF_BUILTIN_CONSTANT_P(x) __builtin_constant_p(x)
  |  |  ------------------
  |  |  |  Branch (636:40): [True: 93, False: 1]
  |  |  ------------------
  ------------------
  743|     93|    return internal::ValidateEnumInlined(val, aux.enum_data);
  744|     93|  } else {
  745|      1|    return internal::ValidateEnum(val, aux.enum_data);
  746|      1|  }
  747|     94|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_16SetHasERKNS1_16TcParseTableBase10FieldEntryEPNS0_11MessageLiteE:
 1607|     68|inline void SetHas(const FieldEntry& entry, MessageLite* msg) {
 1608|     68|  auto has_idx = static_cast<uint32_t>(entry.has_idx);
 1609|     68|#if defined(__x86_64__) && defined(__GNUC__)
 1610|     68|  asm("bts %1, %0\n" : "+m"(*reinterpret_cast<char*>(msg)) : "r"(has_idx));
 1611|       |#else
 1612|       |  auto& hasblock = TcParser::RefAt<uint32_t>(msg, has_idx / 32 * 4);
 1613|       |  hasblock |= uint32_t{1} << (has_idx % 32);
 1614|       |#endif
 1615|     68|}
_ZN6google8protobuf8internal8TcParser8MpStringILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 2146|      7|PROTOBUF_NOINLINE const char* TcParser::MpString(PROTOBUF_TC_PARAM_DECL) {
 2147|      7|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 2148|      7|  const uint16_t type_card = entry.type_card;
 2149|      7|  const uint16_t card = type_card & field_layout::kFcMask;
 2150|      7|  const uint32_t decoded_wiretype = data.tag() & 7;
 2151|       |
 2152|      7|  if (decoded_wiretype != WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
  ------------------
  |  Branch (2152:7): [True: 0, False: 7]
  ------------------
 2153|      0|    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2154|      0|  }
 2155|      7|  if (card == field_layout::kFcRepeated) {
  ------------------
  |  Branch (2155:7): [True: 0, False: 7]
  ------------------
 2156|      0|    PROTOBUF_MUSTTAIL return MpRepeatedString<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MpRepeatedString<is_split>(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2157|      0|  }
 2158|      7|  const uint16_t xform_val = type_card & field_layout::kTvMask;
 2159|      7|  const uint16_t rep = type_card & field_layout::kRepMask;
 2160|       |
 2161|       |  // Mark the field as present:
 2162|      7|  const bool is_oneof = card == field_layout::kFcOneof;
 2163|      7|  bool need_init = false;
 2164|      7|  if (card == field_layout::kFcOptional) {
  ------------------
  |  Branch (2164:7): [True: 7, False: 0]
  ------------------
 2165|      7|    SetHas(entry, msg);
 2166|      7|  } else if (is_oneof) {
  ------------------
  |  Branch (2166:14): [True: 0, False: 0]
  ------------------
 2167|      0|    need_init = ChangeOneof(table, entry, data.tag() >> 3, ctx, msg);
 2168|      0|  }
 2169|       |
 2170|      7|  bool is_valid = false;
 2171|      7|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 2172|      7|  switch (rep) {
 2173|      7|    case field_layout::kRepAString: {
  ------------------
  |  Branch (2173:5): [True: 7, False: 0]
  ------------------
 2174|      7|      auto& field = RefAt<ArenaStringPtr>(base, entry.offset);
 2175|      7|      if (need_init) field.InitDefault();
  ------------------
  |  Branch (2175:11): [True: 0, False: 7]
  ------------------
 2176|      7|      Arena* arena = msg->GetArena();
 2177|      7|      if (arena) {
  ------------------
  |  Branch (2177:11): [True: 2, False: 5]
  ------------------
 2178|      2|        ptr = ctx->ReadArenaString(ptr, &field, arena);
 2179|      5|      } else {
 2180|      5|        std::string* str = field.MutableNoCopy(nullptr);
 2181|      5|        ptr = InlineGreedyStringParser(str, ptr, ctx);
 2182|      5|      }
 2183|      7|      if (!ptr) break;
  ------------------
  |  Branch (2183:11): [True: 0, False: 7]
  ------------------
 2184|      7|      is_valid = MpVerifyUtf8(field.Get(), table, entry, xform_val);
 2185|      7|      break;
 2186|      7|    }
 2187|       |
 2188|       |
 2189|      0|    case field_layout::kRepCord: {
  ------------------
  |  Branch (2189:5): [True: 0, False: 7]
  ------------------
 2190|      0|      absl::Cord* field;
 2191|      0|      if (is_oneof) {
  ------------------
  |  Branch (2191:11): [True: 0, False: 0]
  ------------------
 2192|      0|        if (need_init) {
  ------------------
  |  Branch (2192:13): [True: 0, False: 0]
  ------------------
 2193|      0|          field = Arena::Create<absl::Cord>(msg->GetArena());
 2194|      0|          RefAt<absl::Cord*>(msg, entry.offset) = field;
 2195|      0|        } else {
 2196|      0|          field = RefAt<absl::Cord*>(msg, entry.offset);
 2197|      0|        }
 2198|      0|      } else {
 2199|      0|        field = &RefAt<absl::Cord>(base, entry.offset);
 2200|      0|      }
 2201|      0|      ptr = InlineCordParser(field, ptr, ctx);
 2202|      0|      if (!ptr) break;
  ------------------
  |  Branch (2202:11): [True: 0, False: 0]
  ------------------
 2203|      0|      is_valid = MpVerifyUtf8(*field, table, entry, xform_val);
 2204|      0|      break;
 2205|      0|    }
 2206|       |
 2207|      0|    default:
  ------------------
  |  Branch (2207:5): [True: 0, False: 7]
  ------------------
 2208|      0|      Unreachable();
 2209|      7|  }
 2210|       |
 2211|      7|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr || !is_valid)) {
  ------------------
  |  |  365|     14|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 7]
  |  |  |  Branch (365:54): [Folded, False: 7]
  |  |  |  Branch (365:64): [True: 0, False: 7]
  |  |  |  Branch (365:64): [True: 0, False: 7]
  |  |  ------------------
  ------------------
 2212|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2213|      0|  }
 2214|      7|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      7|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      7|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 2215|      7|}
_ZN6google8protobuf8internal8TcParser23ParseRepeatedStringOnceEPKcPNS1_11SerialArenaEPNS1_12ParseContextERNS0_16RepeatedPtrFieldINSt3__112basic_stringIcNSA_11char_traitsIcEENSA_9allocatorIcEEEEEE:
 2219|      3|    RepeatedPtrField<std::string>& field) {
 2220|      3|  int size = ReadSize(&ptr);
 2221|      3|  if (PROTOBUF_PREDICT_FALSE(!ptr)) return {};
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 0, False: 3]
  |  |  ------------------
  ------------------
 2222|      3|  auto* str = new (serial_arena->AllocateFromStringBlock()) std::string();
 2223|      3|  field.AddAllocatedForParse(str);
 2224|      3|  ptr = ctx->ReadString(ptr, size, str);
 2225|      3|  if (PROTOBUF_PREDICT_FALSE(!ptr)) return {};
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 0, False: 3]
  |  |  ------------------
  ------------------
 2226|      3|  PROTOBUF_ASSUME(ptr != nullptr);
  ------------------
  |  |  941|      3|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
 2227|      3|  return ptr;
 2228|      3|}
_ZN6google8protobuf8internal8TcParser9MpMessageILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 2314|     27|PROTOBUF_NOINLINE const char* TcParser::MpMessage(PROTOBUF_TC_PARAM_DECL) {
 2315|     27|  const auto& entry = RefAt<FieldEntry>(table, data.entry_offset());
 2316|     27|  const uint16_t type_card = entry.type_card;
 2317|     27|  const uint16_t card = type_card & field_layout::kFcMask;
 2318|       |
 2319|       |  // Check for repeated parsing:
 2320|     27|  if (card == field_layout::kFcRepeated) {
  ------------------
  |  Branch (2320:7): [True: 0, False: 27]
  ------------------
 2321|      0|    const uint16_t rep = type_card & field_layout::kRepMask;
 2322|      0|    switch (rep) {
 2323|      0|      case field_layout::kRepMessage:
  ------------------
  |  Branch (2323:7): [True: 0, False: 0]
  ------------------
 2324|      0|        PROTOBUF_MUSTTAIL return MpRepeatedMessageOrGroup<is_split, false>(
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 2325|      0|            PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2326|      0|      case field_layout::kRepGroup:
  ------------------
  |  Branch (2326:7): [True: 0, False: 0]
  ------------------
 2327|      0|        PROTOBUF_MUSTTAIL return MpRepeatedMessageOrGroup<is_split, true>(
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
 2328|      0|            PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2329|      0|      default:
  ------------------
  |  Branch (2329:7): [True: 0, False: 0]
  ------------------
 2330|      0|        PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2331|      0|    }
 2332|      0|  }
 2333|       |
 2334|     27|  const uint32_t decoded_tag = data.tag();
 2335|     27|  const uint32_t decoded_wiretype = decoded_tag & 7;
 2336|     27|  const uint16_t rep = type_card & field_layout::kRepMask;
 2337|     27|  const bool is_group = rep == field_layout::kRepGroup;
 2338|       |
 2339|       |  // Validate wiretype:
 2340|     27|  switch (rep) {
 2341|     27|    case field_layout::kRepMessage:
  ------------------
  |  Branch (2341:5): [True: 27, False: 0]
  ------------------
 2342|     27|      if (decoded_wiretype != WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
  ------------------
  |  Branch (2342:11): [True: 0, False: 27]
  ------------------
 2343|      0|        goto fallback;
 2344|      0|      }
 2345|     27|      break;
 2346|     27|    case field_layout::kRepGroup:
  ------------------
  |  Branch (2346:5): [True: 0, False: 27]
  ------------------
 2347|      0|      if (decoded_wiretype != WireFormatLite::WIRETYPE_START_GROUP) {
  ------------------
  |  Branch (2347:11): [True: 0, False: 0]
  ------------------
 2348|      0|        goto fallback;
 2349|      0|      }
 2350|      0|      break;
 2351|      0|    default: {
  ------------------
  |  Branch (2351:5): [True: 0, False: 27]
  ------------------
 2352|      0|    fallback:
 2353|      0|      PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return table->fallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 2354|      0|    }
 2355|     27|  }
 2356|       |
 2357|     27|  const bool is_oneof = card == field_layout::kFcOneof;
 2358|     27|  bool need_init = false;
 2359|     27|  if (card == field_layout::kFcOptional) {
  ------------------
  |  Branch (2359:7): [True: 27, False: 0]
  ------------------
 2360|     27|    SetHas(entry, msg);
 2361|     27|  } else if (is_oneof) {
  ------------------
  |  Branch (2361:14): [True: 0, False: 0]
  ------------------
 2362|      0|    need_init = ChangeOneof(table, entry, data.tag() >> 3, ctx, msg);
 2363|      0|  }
 2364|       |
 2365|     27|  void* const base = MaybeGetSplitBase(msg, is_split, table);
 2366|     27|  SyncHasbits(msg, hasbits, table);
 2367|     27|  MessageLite*& field = RefAt<MessageLite*>(base, entry.offset);
 2368|       |
 2369|     27|  const TcParseTableBase* inner_table =
 2370|     27|      GetTableFromAux(type_card, *table->field_aux(&entry));
 2371|     27|  if (need_init || field == nullptr) {
  ------------------
  |  Branch (2371:7): [True: 0, False: 27]
  |  Branch (2371:20): [True: 27, False: 0]
  ------------------
 2372|     27|    field = NewMessage(inner_table, msg->GetArena());
 2373|     27|  }
 2374|     27|  const auto inner_loop = [&](const char* ptr) {
 2375|     27|    return ParseLoopPreserveNone(field, ptr, ctx, inner_table);
 2376|     27|  };
 2377|     27|  return is_group ? ctx->ParseGroupInlined(ptr, decoded_tag, inner_loop)
  ------------------
  |  Branch (2377:10): [True: 0, False: 27]
  ------------------
 2378|     27|                  : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
 2379|     27|}
_ZN6google8protobuf8internal8TcParser15GetTableFromAuxEtNS1_16TcParseTableBase8FieldAuxE:
 2301|     27|    uint16_t type_card, TcParseTableBase::FieldAux aux) {
 2302|     27|  uint16_t tv = type_card & field_layout::kTvMask;
 2303|     27|  if (ABSL_PREDICT_TRUE(tv == field_layout::kTvTable)) {
  ------------------
  |  |  179|     27|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 27, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 27]
  |  |  |  Branch (179:57): [True: 27, False: 0]
  |  |  ------------------
  ------------------
 2304|     27|    return aux.table;
 2305|     27|  }
 2306|      0|  ABSL_DCHECK(tv == field_layout::kTvDefault || tv == field_layout::kTvWeakPtr);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     27|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2307|      0|  const MessageLite* prototype = tv == field_layout::kTvDefault
  ------------------
  |  Branch (2307:34): [True: 0, False: 0]
  ------------------
 2308|      0|                                     ? aux.message_default()
 2309|      0|                                     : aux.message_default_weak();
 2310|      0|  return prototype->GetTcParseTable();
 2311|      0|}
_ZN6google8protobuf8internal8TcParser10NewMessageEPKNS1_16TcParseTableBaseEPNS0_5ArenaE:
  359|    949|    const TcParseTableBase* table, Arena* arena) {
  360|    949|  return table->class_data->New(arena);
  361|    949|}
_ZZN6google8protobuf8internal8TcParser9MpMessageILb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlS5_E_clES5_:
 2374|     27|  const auto inner_loop = [&](const char* ptr) {
 2375|     27|    return ParseLoopPreserveNone(field, ptr, ctx, inner_table);
 2376|     27|  };
generated_message_tctable_lite.cc:_ZZN6google8protobuf8internal8TcParser10AddMessageEPKNS1_16TcParseTableBaseERNS1_20RepeatedPtrFieldBaseEENK3$_0clEPNS0_5ArenaE:
  366|    875|      [table](Arena* arena) { return NewMessage(table, arena); }));
_ZN6google8protobuf8internal8TcParser27SingularParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  371|     47|    PROTOBUF_TC_PARAM_DECL) {
  372|     47|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 192);
  ------------------
  |  |  670|     47|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  373|     47|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 256);
  ------------------
  |  |  670|     47|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  374|     47|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|     47|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 47]
  |  |  |  Branch (365:54): [Folded, False: 47]
  |  |  |  Branch (365:63): [True: 0, False: 47]
  |  |  ------------------
  ------------------
  375|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  376|      0|  }
  377|     47|  auto saved_tag = UnalignedLoad<TagType>(ptr);
  378|     47|  ptr += sizeof(TagType);
  379|     47|  hasbits |= (uint64_t{1} << data.hasbit_idx());
  380|     47|  SyncHasbits(msg, hasbits, table);
  381|     47|  auto& field = RefAt<MessageLite*>(msg, data.offset());
  382|     47|  const auto aux = *table->field_aux(data.aux_idx());
  383|     47|  const auto* inner_table =
  384|     47|      aux_is_table ? aux.table : aux.message_default()->GetTcParseTable();
  ------------------
  |  Branch (384:7): [True: 47, Folded]
  ------------------
  385|       |
  386|     47|  if (field == nullptr) {
  ------------------
  |  Branch (386:7): [True: 47, False: 0]
  ------------------
  387|     47|    field = NewMessage(inner_table, msg->GetArena());
  388|     47|  }
  389|     47|  const auto inner_loop = [&](const char* ptr) {
  390|     47|    return ParseLoop(field, ptr, ctx, inner_table);
  391|     47|  };
  392|     47|  return group_coding
  ------------------
  |  Branch (392:10): [Folded, False: 47]
  ------------------
  393|     47|             ? ctx->ParseGroupInlined(ptr, FastDecodeTag(saved_tag), inner_loop)
  394|     47|             : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
  395|     47|}
_ZZN6google8protobuf8internal8TcParser27SingularParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlS5_E_clES5_:
  389|     47|  const auto inner_loop = [&](const char* ptr) {
  390|     47|    return ParseLoop(field, ptr, ctx, inner_table);
  391|     47|  };
_ZN6google8protobuf8internal8TcParser27RepeatedParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  453|    231|    PROTOBUF_TC_PARAM_DECL) {
  454|    231|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|    231|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 1, False: 230]
  |  |  |  Branch (365:54): [Folded, False: 231]
  |  |  |  Branch (365:63): [True: 1, False: 230]
  |  |  ------------------
  ------------------
  455|      1|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      1|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      1|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  456|      1|  }
  457|    230|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 256);
  ------------------
  |  |  670|    230|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  458|    230|  const auto expected_tag = UnalignedLoad<TagType>(ptr);
  459|    230|  const auto aux = *table->field_aux(data.aux_idx());
  460|    230|  auto& field = RefAt<RepeatedPtrFieldBase>(msg, data.offset());
  461|    230|  const TcParseTableBase* inner_table =
  462|    230|      aux_is_table ? aux.table : aux.message_default()->GetTcParseTable();
  ------------------
  |  Branch (462:7): [True: 230, Folded]
  ------------------
  463|    821|  do {
  464|    821|    ptr += sizeof(TagType);
  465|    821|    MessageLite* submsg = AddMessage(inner_table, field);
  466|    821|    const auto inner_loop = [&](const char* ptr) {
  467|    821|      return ParseLoop(submsg, ptr, ctx, inner_table);
  468|    821|    };
  469|    821|    ptr = group_coding ? ctx->ParseGroupInlined(
  ------------------
  |  Branch (469:11): [Folded, False: 821]
  ------------------
  470|      0|                             ptr, FastDecodeTag(expected_tag), inner_loop)
  471|    821|                       : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
  472|    821|    if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|    821|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 821]
  |  |  |  Branch (365:54): [Folded, False: 821]
  |  |  |  Branch (365:63): [True: 0, False: 821]
  |  |  ------------------
  ------------------
  473|      0|      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  474|      0|    }
  475|    821|    if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) {
  ------------------
  |  |  365|    821|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 138, False: 683]
  |  |  |  Branch (365:54): [Folded, False: 821]
  |  |  |  Branch (365:63): [True: 138, False: 683]
  |  |  ------------------
  ------------------
  476|    138|      PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|    138|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|    138|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  477|    138|    }
  478|    821|  } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (478:12): [True: 591, False: 92]
  ------------------
  479|       |
  480|     92|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     92|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     92|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  481|    230|}
_ZZN6google8protobuf8internal8TcParser27RepeatedParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlS5_E_clES5_:
  466|    821|    const auto inner_loop = [&](const char* ptr) {
  467|    821|      return ParseLoop(submsg, ptr, ctx, inner_table);
  468|    821|    };
_ZN6google8protobuf8internal8TcParser27RepeatedParseMessageAuxImplItLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  453|     27|    PROTOBUF_TC_PARAM_DECL) {
  454|     27|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|     27|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 27]
  |  |  |  Branch (365:54): [Folded, False: 27]
  |  |  |  Branch (365:63): [True: 0, False: 27]
  |  |  ------------------
  ------------------
  455|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  456|      0|  }
  457|     27|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 256);
  ------------------
  |  |  670|     27|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  458|     27|  const auto expected_tag = UnalignedLoad<TagType>(ptr);
  459|     27|  const auto aux = *table->field_aux(data.aux_idx());
  460|     27|  auto& field = RefAt<RepeatedPtrFieldBase>(msg, data.offset());
  461|     27|  const TcParseTableBase* inner_table =
  462|     27|      aux_is_table ? aux.table : aux.message_default()->GetTcParseTable();
  ------------------
  |  Branch (462:7): [True: 27, Folded]
  ------------------
  463|     54|  do {
  464|     54|    ptr += sizeof(TagType);
  465|     54|    MessageLite* submsg = AddMessage(inner_table, field);
  466|     54|    const auto inner_loop = [&](const char* ptr) {
  467|     54|      return ParseLoop(submsg, ptr, ctx, inner_table);
  468|     54|    };
  469|     54|    ptr = group_coding ? ctx->ParseGroupInlined(
  ------------------
  |  Branch (469:11): [Folded, False: 54]
  ------------------
  470|      0|                             ptr, FastDecodeTag(expected_tag), inner_loop)
  471|     54|                       : ctx->ParseLengthDelimitedInlined(ptr, inner_loop);
  472|     54|    if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|     54|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 54]
  |  |  |  Branch (365:54): [Folded, False: 54]
  |  |  |  Branch (365:63): [True: 0, False: 54]
  |  |  ------------------
  ------------------
  473|      0|      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  474|      0|    }
  475|     54|    if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) {
  ------------------
  |  |  365|     54|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 54]
  |  |  |  Branch (365:54): [Folded, False: 54]
  |  |  |  Branch (365:63): [True: 0, False: 54]
  |  |  ------------------
  ------------------
  476|      0|      PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                    PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  477|      0|    }
  478|     54|  } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (478:12): [True: 27, False: 27]
  ------------------
  479|       |
  480|     27|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     27|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     27|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  481|     27|}
_ZZN6google8protobuf8internal8TcParser27RepeatedParseMessageAuxImplItLb0ELb1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlS5_E_clES5_:
  466|     54|    const auto inner_loop = [&](const char* ptr) {
  467|     54|      return ParseLoop(submsg, ptr, ctx, inner_table);
  468|     54|    };
_ZN6google8protobuf8internal8TcParser14SingularVarintIbtLb0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  753|     10|    PROTOBUF_TC_PARAM_DECL) {
  754|     10|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|     10|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 7, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 10]
  |  |  |  Branch (365:63): [True: 7, False: 3]
  |  |  ------------------
  ------------------
  755|      7|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      7|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      7|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  756|      7|  }
  757|      3|  ptr += sizeof(TagType);  // Consume tag
  758|      3|  hasbits |= (uint64_t{1} << data.hasbit_idx());
  759|       |
  760|       |  // clang isn't smart enough to be able to only conditionally save
  761|       |  // registers to the stack, so we turn the integer-greater-than-128
  762|       |  // case into a separate routine.
  763|      3|  if (PROTOBUF_PREDICT_FALSE(static_cast<int8_t>(*ptr) < 0)) {
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 0, False: 3]
  |  |  ------------------
  ------------------
  764|      0|    PROTOBUF_MUSTTAIL return SingularVarBigint<FieldType, TagType, zigzag>(
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
  765|      0|        PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
  766|      0|  }
  767|       |
  768|      3|  RefAt<FieldType>(msg, data.offset()) =
  769|      3|      ZigZagDecodeHelper<FieldType, zigzag>(static_cast<uint8_t>(*ptr++));
  770|      3|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      3|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      3|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  771|      3|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_118ZigZagDecodeHelperIbLb0EEET_S4_:
  708|      3|inline FieldType ZigZagDecodeHelper(FieldType value) {
  709|      3|  return static_cast<FieldType>(value);
  710|      3|}
_ZN6google8protobuf8internal8TcParser12FastVarintS1IjEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
  814|    753|    PROTOBUF_TC_PARAM_DECL) {
  815|    753|  using TagType = uint8_t;
  816|    753|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|    753|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 753]
  |  |  |  Branch (365:54): [Folded, False: 753]
  |  |  |  Branch (365:63): [True: 0, False: 753]
  |  |  ------------------
  ------------------
  817|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  818|      0|  }
  819|    753|  int64_t res;
  820|    753|  ptr = ShiftMixParseVarint<FieldType>(ptr + sizeof(TagType), res);
  821|    753|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|    753|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 753]
  |  |  |  Branch (365:54): [Folded, False: 753]
  |  |  |  Branch (365:63): [True: 0, False: 753]
  |  |  ------------------
  ------------------
  822|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  823|      0|  }
  824|    753|  hasbits |= (uint64_t{1} << data.hasbit_idx());
  825|    753|  RefAt<FieldType>(msg, data.offset()) = res;
  826|    753|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|    753|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|    753|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
  827|    753|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_111ParseVarintImEEPKcS5_PT_:
  634|    184|                                                      Type* value) {
  635|    184|  static_assert(sizeof(Type) == 4 || sizeof(Type) == 8,
  636|    184|                "Only [u]int32_t and [u]int64_t please");
  637|       |#ifdef __aarch64__
  638|       |  // The VarintParse parser has a faster implementation on ARM.
  639|       |  absl::conditional_t<sizeof(Type) == 4, uint32_t, uint64_t> tmp;
  640|       |  p = VarintParse(p, &tmp);
  641|       |  if (p != nullptr) {
  642|       |    *value = tmp;
  643|       |  }
  644|       |  return p;
  645|       |#endif
  646|    184|  int64_t res;
  647|    184|  p = ShiftMixParseVarint<Type>(p, res);
  648|    184|  *value = res;
  649|    184|  return p;
  650|    184|}
_ZN6google8protobuf8internal8TcParser12SingularEnumIhLt1024EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1064|     93|    PROTOBUF_TC_PARAM_DECL) {
 1065|     93|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|     93|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 93]
  |  |  |  Branch (365:54): [Folded, False: 93]
  |  |  |  Branch (365:63): [True: 0, False: 93]
  |  |  ------------------
  ------------------
 1066|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1067|      0|  }
 1068|     93|  const TcParseTableBase::FieldAux aux = *table->field_aux(data.aux_idx());
 1069|     93|  PrefetchEnumData(xform_val, aux);
 1070|     93|  const char* ptr2 = ptr;  // Save for unknown enum case
 1071|     93|  ptr += sizeof(TagType);  // Consume tag
 1072|     93|  uint64_t tmp;
 1073|     93|  ptr = ParseVarint(ptr, &tmp);
 1074|     93|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|     93|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 93]
  |  |  |  Branch (365:54): [Folded, False: 93]
  |  |  |  Branch (365:63): [True: 0, False: 93]
  |  |  ------------------
  ------------------
 1075|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1076|      0|  }
 1077|     93|  if (PROTOBUF_PREDICT_FALSE(
  ------------------
  |  |  365|     93|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 93]
  |  |  |  Branch (365:54): [Folded, False: 93]
  |  |  |  Branch (365:63): [True: 0, False: 93]
  |  |  ------------------
  ------------------
 1078|     93|          !EnumIsValidAux(static_cast<int32_t>(tmp), xform_val, aux))) {
 1079|      0|    ptr = ptr2;
 1080|      0|    PROTOBUF_MUSTTAIL return FastUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return FastUnknownEnumFallback(PROTOBUF_TC_PARAM_PASS);
  ------------------
  |  |  600|      0|#define PROTOBUF_TC_PARAM_PASS msg, ptr, ctx, data, table, hasbits
  ------------------
 1081|      0|  }
 1082|     93|  hasbits |= (uint64_t{1} << data.hasbit_idx());
 1083|     93|  RefAt<int32_t>(msg, data.offset()) = tmp;
 1084|     93|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     93|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     93|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1085|     93|}
_ZN6google8protobuf8internal8TcParser22SingularEnumSmallRangeIhLh0EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1215|     84|    PROTOBUF_TC_PARAM_DECL) {
 1216|     84|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|     84|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 60, False: 24]
  |  |  |  Branch (365:54): [Folded, False: 84]
  |  |  |  Branch (365:63): [True: 60, False: 24]
  |  |  ------------------
  ------------------
 1217|     60|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     60|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     60|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1218|     60|  }
 1219|       |
 1220|     24|  uint8_t v = ptr[sizeof(TagType)];
 1221|     24|  if (PROTOBUF_PREDICT_FALSE(min > v || v > data.aux_idx())) {
  ------------------
  |  |  365|     48|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 24]
  |  |  |  Branch (365:54): [Folded, False: 24]
  |  |  |  Branch (365:64): [True: 0, False: 24]
  |  |  |  Branch (365:64): [True: 0, False: 24]
  |  |  ------------------
  ------------------
 1222|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1223|      0|  }
 1224|       |
 1225|     24|  RefAt<int32_t>(msg, data.offset()) = v;
 1226|     24|  ptr += sizeof(TagType) + 1;
 1227|     24|  hasbits |= (uint64_t{1} << data.hasbit_idx());
 1228|     24|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|     24|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|     24|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1229|     24|}
_ZN6google8protobuf8internal8TcParser22SingularEnumSmallRangeIhLh1EEEPKcPNS0_11MessageLiteES5_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1215|    891|    PROTOBUF_TC_PARAM_DECL) {
 1216|    891|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|    891|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 891]
  |  |  |  Branch (365:54): [Folded, False: 891]
  |  |  |  Branch (365:63): [True: 0, False: 891]
  |  |  ------------------
  ------------------
 1217|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1218|      0|  }
 1219|       |
 1220|    891|  uint8_t v = ptr[sizeof(TagType)];
 1221|    891|  if (PROTOBUF_PREDICT_FALSE(min > v || v > data.aux_idx())) {
  ------------------
  |  |  365|  1.78k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 891]
  |  |  |  Branch (365:54): [Folded, False: 891]
  |  |  |  Branch (365:64): [True: 0, False: 891]
  |  |  |  Branch (365:64): [True: 0, False: 891]
  |  |  ------------------
  ------------------
 1222|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1223|      0|  }
 1224|       |
 1225|    891|  RefAt<int32_t>(msg, data.offset()) = v;
 1226|    891|  ptr += sizeof(TagType) + 1;
 1227|    891|  hasbits |= (uint64_t{1} << data.hasbit_idx());
 1228|    891|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|    891|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|    891|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1229|    891|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_119ReadStringIntoArenaEPNS0_11MessageLiteEPKcPNS1_12ParseContextEjPKNS1_16TcParseTableBaseERNS1_14ArenaStringPtrEPNS0_5ArenaE:
 1387|    513|    ArenaStringPtr& field, Arena* arena) {
 1388|    513|  return ctx->ReadArenaString(ptr, &field, arena);
 1389|    513|}
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal12_GLOBAL__N_117ReadStringNoArenaEPNS0_11MessageLiteEPKcPNS1_12ParseContextEjPKNS1_16TcParseTableBaseERNS1_14ArenaStringPtrE:
 1395|    607|                              ArenaStringPtr& field) {
 1396|    607|  int size = ReadSize(&ptr);
 1397|    607|  if (!ptr) return nullptr;
  ------------------
  |  Branch (1397:7): [True: 0, False: 607]
  ------------------
 1398|    607|  return ctx->ReadString(ptr, size, field.MutableNoCopy(nullptr));
 1399|    607|}
_ZN6google8protobuf8internal8TcParser14SingularStringIhNS1_14ArenaStringPtrELNS2_8Utf8TypeE2EEEPKcPNS0_11MessageLiteES7_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1410|  1.11k|    PROTOBUF_TC_PARAM_DECL) {
 1411|  1.11k|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|  1.11k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.11k]
  |  |  |  Branch (365:54): [Folded, False: 1.11k]
  |  |  |  Branch (365:63): [True: 0, False: 1.11k]
  |  |  ------------------
  ------------------
 1412|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1413|      0|  }
 1414|  1.11k|  auto saved_tag = UnalignedLoad<TagType>(ptr);
 1415|  1.11k|  ptr += sizeof(TagType);
 1416|  1.11k|  hasbits |= (uint64_t{1} << data.hasbit_idx());
 1417|  1.11k|  auto& field = RefAt<FieldType>(msg, data.offset());
 1418|  1.11k|  auto arena = msg->GetArena();
 1419|  1.11k|  if (arena) {
  ------------------
  |  Branch (1419:7): [True: 511, False: 602]
  ------------------
 1420|    511|    ptr =
 1421|    511|        ReadStringIntoArena(msg, ptr, ctx, data.aux_idx(), table, field, arena);
 1422|    602|  } else {
 1423|    602|    ptr = ReadStringNoArena(msg, ptr, ctx, data.aux_idx(), table, field);
 1424|    602|  }
 1425|  1.11k|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|  1.11k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.11k]
  |  |  |  Branch (365:54): [Folded, False: 1.11k]
  |  |  |  Branch (365:63): [True: 0, False: 1.11k]
  |  |  ------------------
  ------------------
 1426|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1427|      0|  }
 1428|  1.11k|  switch (utf8) {
 1429|      0|    case kNoUtf8:
  ------------------
  |  Branch (1429:5): [True: 0, False: 1.11k]
  ------------------
 1430|      0|#ifdef NDEBUG
 1431|  1.11k|    case kUtf8ValidateOnly:
  ------------------
  |  Branch (1431:5): [True: 1.11k, False: 0]
  ------------------
 1432|  1.11k|#endif
 1433|  1.11k|      break;
 1434|      0|    default:
  ------------------
  |  Branch (1434:5): [True: 0, False: 1.11k]
  ------------------
 1435|      0|      if (PROTOBUF_PREDICT_TRUE(IsValidUTF8(field))) {
  ------------------
  |  |  364|      0|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 0]
  |  |  |  Branch (364:62): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1436|      0|        break;
 1437|      0|      }
 1438|      0|      ReportFastUtf8Error(FastDecodeTag(saved_tag), table);
 1439|      0|      if (utf8 == kUtf8) {
  ------------------
  |  Branch (1439:11): [Folded, False: 0]
  ------------------
 1440|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1441|      0|      }
 1442|      0|      break;
 1443|  1.11k|  }
 1444|       |
 1445|  1.11k|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|  1.11k|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|  1.11k|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1446|  1.11k|}
_ZN6google8protobuf8internal8TcParser14SingularStringItNS1_14ArenaStringPtrELNS2_8Utf8TypeE2EEEPKcPNS0_11MessageLiteES7_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1410|      7|    PROTOBUF_TC_PARAM_DECL) {
 1411|      7|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|      7|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 7]
  |  |  |  Branch (365:54): [Folded, False: 7]
  |  |  |  Branch (365:63): [True: 0, False: 7]
  |  |  ------------------
  ------------------
 1412|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1413|      0|  }
 1414|      7|  auto saved_tag = UnalignedLoad<TagType>(ptr);
 1415|      7|  ptr += sizeof(TagType);
 1416|      7|  hasbits |= (uint64_t{1} << data.hasbit_idx());
 1417|      7|  auto& field = RefAt<FieldType>(msg, data.offset());
 1418|      7|  auto arena = msg->GetArena();
 1419|      7|  if (arena) {
  ------------------
  |  Branch (1419:7): [True: 2, False: 5]
  ------------------
 1420|      2|    ptr =
 1421|      2|        ReadStringIntoArena(msg, ptr, ctx, data.aux_idx(), table, field, arena);
 1422|      5|  } else {
 1423|      5|    ptr = ReadStringNoArena(msg, ptr, ctx, data.aux_idx(), table, field);
 1424|      5|  }
 1425|      7|  if (PROTOBUF_PREDICT_FALSE(ptr == nullptr)) {
  ------------------
  |  |  365|      7|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 7]
  |  |  |  Branch (365:54): [Folded, False: 7]
  |  |  |  Branch (365:63): [True: 0, False: 7]
  |  |  ------------------
  ------------------
 1426|      0|    PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1427|      0|  }
 1428|      7|  switch (utf8) {
 1429|      0|    case kNoUtf8:
  ------------------
  |  Branch (1429:5): [True: 0, False: 7]
  ------------------
 1430|      0|#ifdef NDEBUG
 1431|      7|    case kUtf8ValidateOnly:
  ------------------
  |  Branch (1431:5): [True: 7, False: 0]
  ------------------
 1432|      7|#endif
 1433|      7|      break;
 1434|      0|    default:
  ------------------
  |  Branch (1434:5): [True: 0, False: 7]
  ------------------
 1435|      0|      if (PROTOBUF_PREDICT_TRUE(IsValidUTF8(field))) {
  ------------------
  |  |  364|      0|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 0]
  |  |  |  Branch (364:62): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1436|      0|        break;
 1437|      0|      }
 1438|      0|      ReportFastUtf8Error(FastDecodeTag(saved_tag), table);
 1439|      0|      if (utf8 == kUtf8) {
  ------------------
  |  Branch (1439:11): [Folded, False: 0]
  ------------------
 1440|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1441|      0|      }
 1442|      0|      break;
 1443|      7|  }
 1444|       |
 1445|      7|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      7|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      7|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1446|      7|}
_ZN6google8protobuf8internal8TcParser14RepeatedStringIhNS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEELNS2_8Utf8TypeE2EEEPKcPNS0_11MessageLiteESF_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEm:
 1518|      6|    PROTOBUF_TC_PARAM_DECL) {
 1519|      6|  if (PROTOBUF_PREDICT_FALSE(data.coded_tag<TagType>() != 0)) {
  ------------------
  |  |  365|      6|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 6]
  |  |  |  Branch (365:54): [Folded, False: 6]
  |  |  |  Branch (365:63): [True: 0, False: 6]
  |  |  ------------------
  ------------------
 1520|      0|    PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                  PROTOBUF_MUSTTAIL return MiniParse(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1521|      0|  }
 1522|      6|  const auto expected_tag = UnalignedLoad<TagType>(ptr);
 1523|      6|  auto& field = RefAt<FieldType>(msg, data.offset());
 1524|       |
 1525|      6|  const auto validate_last_string = [expected_tag, table, &field] {
 1526|      6|    switch (utf8) {
 1527|      6|      case kNoUtf8:
 1528|      6|#ifdef NDEBUG
 1529|      6|      case kUtf8ValidateOnly:
 1530|      6|#endif
 1531|      6|        return true;
 1532|      6|      default:
 1533|      6|        if (PROTOBUF_PREDICT_TRUE(
 1534|      6|                utf8_range::IsStructurallyValid(field[field.size() - 1]))) {
 1535|      6|          return true;
 1536|      6|        }
 1537|      6|        ReportFastUtf8Error(FastDecodeTag(expected_tag), table);
 1538|      6|        if (utf8 == kUtf8) return false;
 1539|      6|        return true;
 1540|      6|    }
 1541|      6|  };
 1542|       |
 1543|      6|  auto* arena = field.GetArena();
 1544|      6|  SerialArena* serial_arena;
 1545|      6|  if (PROTOBUF_PREDICT_TRUE(arena != nullptr &&
  ------------------
  |  |  364|     18|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 3, False: 3]
  |  |  |  Branch (364:53): [Folded, False: 6]
  |  |  |  Branch (364:63): [True: 3, False: 3]
  |  |  |  Branch (364:63): [True: 3, False: 0]
  |  |  |  Branch (364:63): [True: 3, False: 0]
  |  |  ------------------
  ------------------
 1546|      6|                            arena->impl_.GetSerialArenaFast(&serial_arena) &&
 1547|      6|                            field.PrepareForParse())) {
 1548|      3|    do {
 1549|      3|      ptr += sizeof(TagType);
 1550|      3|      ptr = ParseRepeatedStringOnce(ptr, serial_arena, ctx, field);
 1551|       |
 1552|      3|      if (PROTOBUF_PREDICT_FALSE(ptr == nullptr || !validate_last_string())) {
  ------------------
  |  |  365|      6|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:64): [True: 0, False: 3]
  |  |  |  Branch (365:64): [Folded, False: 3]
  |  |  ------------------
  ------------------
 1553|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1554|      0|      }
 1555|      3|      if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 2, False: 1]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 2, False: 1]
  |  |  ------------------
  ------------------
 1556|      3|    } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (1556:14): [True: 0, False: 1]
  ------------------
 1557|      3|  } else {
 1558|      3|    do {
 1559|      3|      ptr += sizeof(TagType);
 1560|      3|      std::string* str = field.Add();
 1561|      3|      ptr = InlineGreedyStringParser(str, ptr, ctx);
 1562|      3|      if (PROTOBUF_PREDICT_FALSE(ptr == nullptr || !validate_last_string())) {
  ------------------
  |  |  365|      6|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:64): [True: 0, False: 3]
  |  |  |  Branch (365:64): [Folded, False: 3]
  |  |  ------------------
  ------------------
 1563|      0|        PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      0|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                      PROTOBUF_MUSTTAIL return Error(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      0|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1564|      0|      }
 1565|      3|      if (PROTOBUF_PREDICT_FALSE(!ctx->DataAvailable(ptr))) goto parse_loop;
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 2, False: 1]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 2, False: 1]
  |  |  ------------------
  ------------------
 1566|      3|    } while (UnalignedLoad<TagType>(ptr) == expected_tag);
  ------------------
  |  Branch (1566:14): [True: 0, False: 1]
  ------------------
 1567|      3|  }
 1568|      2|  PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      2|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToTagDispatch(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      2|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1569|      4|parse_loop:
 1570|      4|  PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  236|      4|#define PROTOBUF_MUSTTAIL [[clang::musttail]]
  ------------------
                PROTOBUF_MUSTTAIL return ToParseLoop(PROTOBUF_TC_PARAM_NO_DATA_PASS);
  ------------------
  |  |  613|      4|  msg, ptr, ctx, ::google::protobuf::internal::TcFieldData::DefaultInit(), table, hasbits
  ------------------
 1571|      6|}
_ZZN6google8protobuf8internal8TcParser14RepeatedStringIhNS0_16RepeatedPtrFieldINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEELNS2_8Utf8TypeE2EEEPKcPNS0_11MessageLiteESF_PNS1_12ParseContextENS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmENKUlvE_clEv:
 1525|      6|  const auto validate_last_string = [expected_tag, table, &field] {
 1526|      6|    switch (utf8) {
 1527|      0|      case kNoUtf8:
  ------------------
  |  Branch (1527:7): [True: 0, False: 6]
  ------------------
 1528|      0|#ifdef NDEBUG
 1529|      6|      case kUtf8ValidateOnly:
  ------------------
  |  Branch (1529:7): [True: 6, False: 0]
  ------------------
 1530|      6|#endif
 1531|      6|        return true;
 1532|      0|      default:
  ------------------
  |  Branch (1532:7): [True: 0, False: 6]
  ------------------
 1533|      0|        if (PROTOBUF_PREDICT_TRUE(
  ------------------
  |  |  364|      0|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 0]
  |  |  |  Branch (364:62): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1534|      0|                utf8_range::IsStructurallyValid(field[field.size() - 1]))) {
 1535|      0|          return true;
 1536|      0|        }
 1537|      0|        ReportFastUtf8Error(FastDecodeTag(expected_tag), table);
 1538|      0|        if (utf8 == kUtf8) return false;
  ------------------
  |  Branch (1538:13): [Folded, False: 0]
  ------------------
 1539|      0|        return true;
 1540|      6|    }
 1541|      6|  };

_ZN6google8protobuf8internal24InitProtobufDefaultsSlowEv:
  101|      2|void InitProtobufDefaultsSlow() {
  102|      2|  static bool is_inited = InitProtobufDefaultsImpl();
  103|      2|  (void)is_inited;
  104|      2|}
generated_message_util.cc:_ZN6google8protobuf8internalL24InitProtobufDefaultsImplEv:
   91|      2|static bool InitProtobufDefaultsImpl() {
   92|      2|  fixed_address_empty_string.DefaultConstruct();
   93|      2|  OnShutdownDestroyString(fixed_address_empty_string.get_mutable());
   94|      2|  InitWeakDefaults();
   95|       |
   96|       |
   97|      2|  init_protobuf_defaults_state.store(true, std::memory_order_release);
   98|      2|  return true;
   99|      2|}
generated_message_util.cc:_ZN6google8protobuf8internalL16InitWeakDefaultsEv:
   71|      2|static void InitWeakDefaults() {
   72|       |  // force link the dummy entry.
   73|      2|  StrongPointer<DummyWeakDefault*, &dummy_weak_default>();
   74|       |  // We don't know the size of each object, but we know the layout of the tail.
   75|       |  // It contains a WeakDescriptorDefaultTail object.
   76|       |  // As such, we iterate the section backwards.
   77|      2|  const char* start = &__start_pb_defaults;
   78|      2|  const char* end = &__stop_pb_defaults;
   79|      4|  while (start != end) {
  ------------------
  |  Branch (79:10): [True: 2, False: 2]
  ------------------
   80|      2|    auto* tail = reinterpret_cast<const WeakDescriptorDefaultTail*>(end) - 1;
   81|      2|    end -= tail->size;
   82|      2|    const Message* instance = reinterpret_cast<const Message*>(end);
   83|      2|    *tail->target = instance;
   84|      2|  }
   85|      2|}

_ZN6google8protobuf8internal20InitProtobufDefaultsEv:
   71|     63|PROTOBUF_EXPORT inline void InitProtobufDefaults() {
   72|     63|  if (PROTOBUF_PREDICT_FALSE(
  ------------------
  |  |  365|     63|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 63]
  |  |  |  Branch (365:54): [Folded, False: 63]
  |  |  |  Branch (365:63): [True: 0, False: 63]
  |  |  ------------------
  ------------------
   73|     63|          !init_protobuf_defaults_state.load(std::memory_order_acquire))) {
   74|      0|    InitProtobufDefaultsSlow();
   75|      0|  }
   76|     63|}
_ZN6google8protobuf8internal14GetEmptyStringEv:
   79|     57|PROTOBUF_EXPORT inline const std::string& GetEmptyString() {
   80|     57|  InitProtobufDefaults();
   81|     57|  return GetEmptyStringAlreadyInited();
   82|     57|}
_ZN6google8protobuf8internal23OnShutdownDestroyStringEPKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  182|      2|inline void OnShutdownDestroyString(const std::string* ptr) {
  183|      2|  OnShutdownRun(DestroyString, ptr);
  184|      2|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_15DescriptorProtoEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|    111|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|    212|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 101, False: 111]
  ------------------
  105|    101|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 101]
  ------------------
  106|    101|  }
  107|    111|  return true;
  108|    111|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_19EnumDescriptorProtoEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|    111|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|    147|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 36, False: 111]
  ------------------
  105|     36|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 36]
  ------------------
  106|     36|  }
  107|    111|  return true;
  108|    111|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_22ServiceDescriptorProtoEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|     10|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|     10|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 0, False: 10]
  ------------------
  105|      0|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 0]
  ------------------
  106|      0|  }
  107|     10|  return true;
  108|     10|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_20FieldDescriptorProtoEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|    212|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|    656|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 444, False: 212]
  ------------------
  105|    444|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 444]
  ------------------
  106|    444|  }
  107|    212|  return true;
  108|    212|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_30DescriptorProto_ExtensionRangeEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|    101|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|    129|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 28, False: 101]
  ------------------
  105|     28|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 28]
  ------------------
  106|     28|  }
  107|    101|  return true;
  108|    101|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_20OneofDescriptorProtoEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|    101|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|    107|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 6, False: 101]
  ------------------
  105|      6|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 6]
  ------------------
  106|      6|  }
  107|    101|  return true;
  108|    101|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_19UninterpretedOptionEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|     77|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|     77|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 0, False: 77]
  ------------------
  105|      0|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 0]
  ------------------
  106|      0|  }
  107|     77|  return true;
  108|     77|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_24EnumValueDescriptorProtoEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|     36|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|    208|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 172, False: 36]
  ------------------
  105|    172|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 172]
  ------------------
  106|    172|  }
  107|     36|  return true;
  108|     36|}
_ZN6google8protobuf8internal17AllAreInitializedINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEEbRKNS0_16RepeatedPtrFieldIT_EE:
  103|      1|bool AllAreInitialized(const RepeatedPtrField<Msg>& t) {
  104|      5|  for (int i = t.size(); --i >= 0;) {
  ------------------
  |  Branch (104:26): [True: 4, False: 1]
  ------------------
  105|      4|    if (!t.Get(i).IsInitialized()) return false;
  ------------------
  |  Branch (105:9): [True: 0, False: 4]
  ------------------
  106|      4|  }
  107|      1|  return true;
  108|      1|}

_ZN6google8protobuf2io19EpsCopyOutputStream30WriteStringMaybeAliasedOutlineEjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPh:
  990|      1|                                                           uint8_t* ptr) {
  991|      1|  ptr = EnsureSpace(ptr);
  992|      1|  uint32_t size = s.size();
  993|      1|  ptr = WriteLengthDelim(num, size, ptr);
  994|      1|  return WriteRawMaybeAliased(s.data(), size, ptr);
  995|      1|}

_ZN6google8protobuf2io16CodedInputStream24GetDefaultRecursionLimitEv:
  387|     30|  static int GetDefaultRecursionLimit() { return default_recursion_limit_; }
_ZN6google8protobuf2io19EpsCopyOutputStreamC2EPvib:
  643|    229|      : end_(static_cast<uint8_t*>(data) + size),
  644|    229|        buffer_end_(nullptr),
  645|    229|        stream_(nullptr),
  646|    229|        is_serialization_deterministic_(deterministic) {}
_ZN6google8protobuf2io19EpsCopyOutputStream8WriteRawEPKviPh:
  669|      1|  uint8_t* WriteRaw(const void* data, int size, uint8_t* ptr) {
  670|      1|    if (PROTOBUF_PREDICT_FALSE(end_ - ptr < size)) {
  ------------------
  |  |  365|      1|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1]
  |  |  |  Branch (365:54): [Folded, False: 1]
  |  |  |  Branch (365:63): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  671|      0|      return WriteRawFallback(data, size, ptr);
  672|      0|    }
  673|      1|    std::memcpy(ptr, data, static_cast<unsigned int>(size));
  674|      1|    return ptr + size;
  675|      1|  }
_ZN6google8protobuf2io19EpsCopyOutputStream20WriteRawMaybeAliasedEPKviPh:
  683|      1|  uint8_t* WriteRawMaybeAliased(const void* data, int size, uint8_t* ptr) {
  684|      1|    if (aliasing_enabled_) {
  ------------------
  |  Branch (684:9): [True: 0, False: 1]
  ------------------
  685|      0|      return WriteAliasedRaw(data, size, ptr);
  686|      1|    } else {
  687|      1|      return WriteRaw(data, size, ptr);
  688|      1|    }
  689|      1|  }
_ZN6google8protobuf2io19EpsCopyOutputStream8WriteTagEjjPh:
  852|      1|                                           uint8_t* ptr) {
  853|      1|    ABSL_DCHECK(ptr < end_);  // NOLINT
  ------------------
  |  |   47|      1|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      1|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      2|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      1|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      2|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      2|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      1|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      1|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      2|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      2|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  854|      1|    return UnsafeVarint((num << 3) | wt, ptr);
  855|      1|  }
_ZN6google8protobuf2io19EpsCopyOutputStream16WriteLengthDelimEijPh:
  858|      1|                                                   uint8_t* ptr) {
  859|      1|    ptr = WriteTag(num, 2, ptr);
  860|      1|    return UnsafeWriteSize(size, ptr);
  861|      1|  }
_ZN6google8protobuf2io19EpsCopyOutputStream15UnsafeWriteSizeEjPh:
  911|      1|                                                         uint8_t* ptr) {
  912|      2|    while (PROTOBUF_PREDICT_FALSE(value >= 0x80)) {
  ------------------
  |  |  365|      2|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 1, False: 1]
  |  |  |  Branch (365:54): [Folded, False: 2]
  |  |  |  Branch (365:63): [True: 1, False: 1]
  |  |  ------------------
  ------------------
  913|      1|      *ptr = static_cast<uint8_t>(value | 0x80);
  914|      1|      value >>= 7;
  915|      1|      ++ptr;
  916|      1|    }
  917|      1|    *ptr++ = static_cast<uint8_t>(value);
  918|      1|    return ptr;
  919|      1|  }
_ZN6google8protobuf2io17CodedOutputStream35IsDefaultSerializationDeterministicEv:
 1258|    229|  static bool IsDefaultSerializationDeterministic() {
 1259|    229|    return default_serialization_deterministic_.load(
 1260|    229|               std::memory_order_relaxed) != 0;
 1261|    229|  }
_ZN6google8protobuf2io17CodedOutputStream20WriteVarint64ToArrayEmPh:
 1646|  1.52k|                                                        uint8_t* target) {
 1647|  1.52k|  return EpsCopyOutputStream::UnsafeVarint(value, target);
 1648|  1.52k|}
_ZN6google8protobuf2io17CodedOutputStream32WriteVarint32SignExtendedToArrayEiPh:
 1655|  1.52k|    int32_t value, uint8_t* target) {
 1656|  1.52k|  return WriteVarint64ToArray(static_cast<uint64_t>(value), target);
 1657|  1.52k|}
_ZN6google8protobuf2io17CodedOutputStream12VarintSize64Em:
 1757|  1.53k|inline size_t CodedOutputStream::VarintSize64(uint64_t value) {
 1758|  1.53k|#if PROTOBUF_CODED_STREAM_H_PREFER_BSR
 1759|       |  // Explicit OR 0x1 to avoid calling absl::countl_zero(0), which
 1760|       |  // requires a branch to check for on platforms without a clz instruction.
 1761|  1.53k|  uint32_t log2value = (std::numeric_limits<uint64_t>::digits - 1) -
 1762|  1.53k|                       absl::countl_zero(value | 0x1);
 1763|  1.53k|  return static_cast<size_t>((log2value * 9 + (64 + 9)) / 64);
 1764|       |#else
 1765|       |  uint32_t clz = absl::countl_zero(value);
 1766|       |  return static_cast<size_t>(
 1767|       |      ((std::numeric_limits<uint64_t>::digits * 9 + 64) - (clz * 9)) / 64);
 1768|       |#endif
 1769|  1.53k|}
_ZN6google8protobuf2io17CodedOutputStream24VarintSize32SignExtendedEi:
 1784|  1.53k|inline size_t CodedOutputStream::VarintSize32SignExtended(int32_t value) {
 1785|  1.53k|  return VarintSize64(static_cast<uint64_t>(int64_t{value}));
 1786|  1.53k|}
_ZN6google8protobuf2io19EpsCopyOutputStream12UnsafeVarintImEEPhT_S4_:
  898|  1.52k|  PROTOBUF_ALWAYS_INLINE static uint8_t* UnsafeVarint(T value, uint8_t* ptr) {
  899|  1.52k|    static_assert(std::is_unsigned<T>::value,
  900|  1.52k|                  "Varint serialization must be unsigned");
  901|  1.55k|    while (PROTOBUF_PREDICT_FALSE(value >= 0x80)) {
  ------------------
  |  |  365|  1.55k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 28, False: 1.52k]
  |  |  |  Branch (365:54): [Folded, False: 1.55k]
  |  |  |  Branch (365:63): [True: 28, False: 1.52k]
  |  |  ------------------
  ------------------
  902|     28|      *ptr = static_cast<uint8_t>(value | 0x80);
  903|     28|      value >>= 7;
  904|     28|      ++ptr;
  905|     28|    }
  906|  1.52k|    *ptr++ = static_cast<uint8_t>(value);
  907|  1.52k|    return ptr;
  908|  1.52k|  }

_ZN6google8protobuf2io14ErrorCollectorD2Ev:
  191|  12.0k|ErrorCollector::~ErrorCollector() {}
_ZN6google8protobuf2io9TokenizerC2EPNS1_19ZeroCopyInputStreamEPNS1_14ErrorCollectorE:
  197|  12.0k|    : input_(input),
  198|  12.0k|      error_collector_(error_collector),
  199|  12.0k|      buffer_(nullptr),
  200|  12.0k|      buffer_size_(0),
  201|  12.0k|      buffer_pos_(0),
  202|  12.0k|      read_error_(false),
  203|  12.0k|      line_(0),
  204|  12.0k|      column_(0),
  205|  12.0k|      record_target_(nullptr),
  206|  12.0k|      record_start_(-1),
  207|  12.0k|      allow_f_after_float_(false),
  208|  12.0k|      comment_style_(CPP_COMMENT_STYLE),
  209|  12.0k|      require_space_after_number_(true),
  210|  12.0k|      allow_multiline_strings_(false) {
  211|  12.0k|  current_.line = 0;
  212|  12.0k|  current_.column = 0;
  213|  12.0k|  current_.end_column = 0;
  214|  12.0k|  current_.type = TYPE_START;
  215|  12.0k|  previous_ = current_;
  216|       |
  217|  12.0k|  Refresh();
  218|  12.0k|}
_ZN6google8protobuf2io9TokenizerD2Ev:
  220|  12.0k|Tokenizer::~Tokenizer() {
  221|       |  // If we had any buffer left unread, return it to the underlying stream
  222|       |  // so that someone else can read it.
  223|  12.0k|  if (buffer_size_ > buffer_pos_) {
  ------------------
  |  Branch (223:7): [True: 9, False: 12.0k]
  ------------------
  224|      9|    input_->BackUp(buffer_size_ - buffer_pos_);
  225|      9|  }
  226|  12.0k|}
_ZN6google8protobuf2io9Tokenizer21set_report_whitespaceEb:
  230|   254k|void Tokenizer::set_report_whitespace(bool report) {
  231|   254k|  report_whitespace_ = report;
  232|   254k|  report_newlines_ &= report;
  233|   254k|}
_ZN6google8protobuf2io9Tokenizer8NextCharEv:
  246|  2.14M|void Tokenizer::NextChar() {
  247|       |  // Update our line and column counters based on the character being
  248|       |  // consumed.
  249|  2.14M|  if (current_char_ == '\n') {
  ------------------
  |  Branch (249:7): [True: 92.9k, False: 2.05M]
  ------------------
  250|  92.9k|    ++line_;
  251|  92.9k|    column_ = 0;
  252|  2.05M|  } else if (current_char_ == '\t') {
  ------------------
  |  Branch (252:14): [True: 488, False: 2.05M]
  ------------------
  253|    488|    column_ += kTabWidth - column_ % kTabWidth;
  254|  2.05M|  } else {
  255|  2.05M|    ++column_;
  256|  2.05M|  }
  257|       |
  258|       |  // Advance to the next character.
  259|  2.14M|  ++buffer_pos_;
  260|  2.14M|  if (buffer_pos_ < buffer_size_) {
  ------------------
  |  Branch (260:7): [True: 2.13M, False: 12.0k]
  ------------------
  261|  2.13M|    current_char_ = buffer_[buffer_pos_];
  262|  2.13M|  } else {
  263|  12.0k|    Refresh();
  264|  12.0k|  }
  265|  2.14M|}
_ZN6google8protobuf2io9Tokenizer7RefreshEv:
  267|  24.1k|void Tokenizer::Refresh() {
  268|  24.1k|  if (read_error_) {
  ------------------
  |  Branch (268:7): [True: 0, False: 24.1k]
  ------------------
  269|      0|    current_char_ = '\0';
  270|      0|    return;
  271|      0|  }
  272|       |
  273|       |  // If we're in a token, append the rest of the buffer to it.
  274|  24.1k|  if (record_target_ != nullptr && record_start_ < buffer_size_) {
  ------------------
  |  Branch (274:7): [True: 12.0k, False: 12.0k]
  |  Branch (274:36): [True: 12.0k, False: 0]
  ------------------
  275|  12.0k|    record_target_->append(buffer_ + record_start_,
  276|  12.0k|                           buffer_size_ - record_start_);
  277|  12.0k|    record_start_ = 0;
  278|  12.0k|  }
  279|       |
  280|  24.1k|  const void* data = NULL;
  281|  24.1k|  buffer_ = NULL;
  282|  24.1k|  buffer_pos_ = 0;
  283|  24.1k|  do {
  284|  24.1k|    if (!input_->Next(&data, &buffer_size_)) {
  ------------------
  |  Branch (284:9): [True: 12.0k, False: 12.0k]
  ------------------
  285|       |      // end of stream (or read error)
  286|  12.0k|      buffer_size_ = 0;
  287|  12.0k|      read_error_ = true;
  288|  12.0k|      current_char_ = '\0';
  289|  12.0k|      return;
  290|  12.0k|    }
  291|  24.1k|  } while (buffer_size_ == 0);
  ------------------
  |  Branch (291:12): [True: 0, False: 12.0k]
  ------------------
  292|       |
  293|  12.0k|  buffer_ = static_cast<const char*>(data);
  294|       |
  295|  12.0k|  current_char_ = buffer_[0];
  296|  12.0k|}
_ZN6google8protobuf2io9Tokenizer13ConsumeStringEc:
  378|  17.9k|void Tokenizer::ConsumeString(char delimiter) {
  379|  1.12M|  while (true) {
  ------------------
  |  Branch (379:10): [True: 1.12M, Folded]
  ------------------
  380|  1.12M|    switch (current_char_) {
  381|      0|      case '\0':
  ------------------
  |  Branch (381:7): [True: 0, False: 1.12M]
  ------------------
  382|      0|        AddError("Unexpected end of string.");
  383|      0|        return;
  384|       |
  385|      0|      case '\n': {
  ------------------
  |  Branch (385:7): [True: 0, False: 1.12M]
  ------------------
  386|      0|        if (!allow_multiline_strings_) {
  ------------------
  |  Branch (386:13): [True: 0, False: 0]
  ------------------
  387|      0|          AddError("Multiline strings are not allowed. Did you miss a \"?.");
  388|      0|          return;
  389|      0|        }
  390|      0|        NextChar();
  391|      0|        break;
  392|      0|      }
  393|       |
  394|   123k|      case '\\': {
  ------------------
  |  Branch (394:7): [True: 123k, False: 1.00M]
  ------------------
  395|       |        // An escape sequence.
  396|   123k|        NextChar();
  397|   123k|        if (TryConsumeOne<Escape>()) {
  ------------------
  |  Branch (397:13): [True: 49.7k, False: 74.1k]
  ------------------
  398|       |          // Valid escape sequence.
  399|  74.1k|        } else if (TryConsumeOne<OctalDigit>()) {
  ------------------
  |  Branch (399:20): [True: 74.1k, False: 58]
  ------------------
  400|       |          // Possibly followed by two more octal digits, but these will
  401|       |          // just be consumed by the main loop anyway so we don't need
  402|       |          // to do so explicitly here.
  403|  74.1k|        } else if (TryConsume('x') || TryConsume('X')) {
  ------------------
  |  Branch (403:20): [True: 39, False: 19]
  |  Branch (403:39): [True: 7, False: 12]
  ------------------
  404|     46|          if (!TryConsumeOne<HexDigit>()) {
  ------------------
  |  Branch (404:15): [True: 0, False: 46]
  ------------------
  405|      0|            AddError("Expected hex digits for escape sequence.");
  406|      0|          }
  407|       |          // Possibly followed by another hex digit, but again we don't care.
  408|     46|        } else if (TryConsume('u')) {
  ------------------
  |  Branch (408:20): [True: 12, False: 0]
  ------------------
  409|     12|          if (!TryConsumeOne<HexDigit>() || !TryConsumeOne<HexDigit>() ||
  ------------------
  |  Branch (409:15): [True: 0, False: 12]
  |  Branch (409:45): [True: 0, False: 12]
  ------------------
  410|     12|              !TryConsumeOne<HexDigit>() || !TryConsumeOne<HexDigit>()) {
  ------------------
  |  Branch (410:15): [True: 0, False: 12]
  |  Branch (410:45): [True: 0, False: 12]
  ------------------
  411|      0|            AddError("Expected four hex digits for \\u escape sequence.");
  412|      0|          }
  413|     12|        } else if (TryConsume('U')) {
  ------------------
  |  Branch (413:20): [True: 0, False: 0]
  ------------------
  414|       |          // We expect 8 hex digits; but only the range up to 0x10ffff is
  415|       |          // legal.
  416|      0|          if (!TryConsume('0') || !TryConsume('0') ||
  ------------------
  |  Branch (416:15): [True: 0, False: 0]
  |  Branch (416:35): [True: 0, False: 0]
  ------------------
  417|      0|              !(TryConsume('0') || TryConsume('1')) ||
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  |  Branch (417:36): [True: 0, False: 0]
  ------------------
  418|      0|              !TryConsumeOne<HexDigit>() || !TryConsumeOne<HexDigit>() ||
  ------------------
  |  Branch (418:15): [True: 0, False: 0]
  |  Branch (418:45): [True: 0, False: 0]
  ------------------
  419|      0|              !TryConsumeOne<HexDigit>() || !TryConsumeOne<HexDigit>() ||
  ------------------
  |  Branch (419:15): [True: 0, False: 0]
  |  Branch (419:45): [True: 0, False: 0]
  ------------------
  420|      0|              !TryConsumeOne<HexDigit>()) {
  ------------------
  |  Branch (420:15): [True: 0, False: 0]
  ------------------
  421|      0|            AddError(
  422|      0|                "Expected eight hex digits up to 10ffff for \\U escape "
  423|      0|                "sequence");
  424|      0|          }
  425|      0|        } else {
  426|      0|          AddError("Invalid escape sequence in string literal.");
  427|      0|        }
  428|   123k|        break;
  429|      0|      }
  430|       |
  431|  1.00M|      default: {
  ------------------
  |  Branch (431:7): [True: 1.00M, False: 123k]
  ------------------
  432|  1.00M|        if (current_char_ == delimiter) {
  ------------------
  |  Branch (432:13): [True: 17.9k, False: 986k]
  ------------------
  433|  17.9k|          NextChar();
  434|  17.9k|          return;
  435|  17.9k|        }
  436|   986k|        NextChar();
  437|   986k|        break;
  438|  1.00M|      }
  439|  1.12M|    }
  440|  1.12M|  }
  441|  17.9k|}
_ZN6google8protobuf2io9Tokenizer13ConsumeNumberEbb:
  444|  8.43k|                                              bool started_with_dot) {
  445|  8.43k|  bool is_float = false;
  446|       |
  447|  8.43k|  if (started_with_zero && (TryConsume('x') || TryConsume('X'))) {
  ------------------
  |  Branch (447:7): [True: 5, False: 8.43k]
  |  Branch (447:29): [True: 0, False: 5]
  |  Branch (447:48): [True: 0, False: 5]
  ------------------
  448|       |    // A hex number (started with "0x").
  449|      0|    ConsumeOneOrMore<HexDigit>("\"0x\" must be followed by hex digits.");
  450|       |
  451|  8.43k|  } else if (started_with_zero && LookingAt<Digit>()) {
  ------------------
  |  Branch (451:14): [True: 5, False: 8.43k]
  |  Branch (451:35): [True: 5, False: 0]
  ------------------
  452|       |    // An octal number (had a leading zero).
  453|      5|    ConsumeZeroOrMore<OctalDigit>();
  454|      5|    if (LookingAt<Digit>()) {
  ------------------
  |  Branch (454:9): [True: 0, False: 5]
  ------------------
  455|      0|      AddError("Numbers starting with leading zero must be in octal.");
  456|      0|      ConsumeZeroOrMore<Digit>();
  457|      0|    }
  458|       |
  459|  8.43k|  } else {
  460|       |    // A decimal number.
  461|  8.43k|    if (started_with_dot) {
  ------------------
  |  Branch (461:9): [True: 0, False: 8.43k]
  ------------------
  462|      0|      is_float = true;
  463|      0|      ConsumeZeroOrMore<Digit>();
  464|  8.43k|    } else {
  465|  8.43k|      ConsumeZeroOrMore<Digit>();
  466|       |
  467|  8.43k|      if (TryConsume('.')) {
  ------------------
  |  Branch (467:11): [True: 0, False: 8.43k]
  ------------------
  468|      0|        is_float = true;
  469|      0|        ConsumeZeroOrMore<Digit>();
  470|      0|      }
  471|  8.43k|    }
  472|       |
  473|  8.43k|    if (TryConsume('e') || TryConsume('E')) {
  ------------------
  |  Branch (473:9): [True: 0, False: 8.43k]
  |  Branch (473:28): [True: 0, False: 8.43k]
  ------------------
  474|      0|      is_float = true;
  475|      0|      TryConsume('-') || TryConsume('+');
  ------------------
  |  Branch (475:7): [True: 0, False: 0]
  |  Branch (475:26): [True: 0, False: 0]
  ------------------
  476|      0|      ConsumeOneOrMore<Digit>("\"e\" must be followed by exponent.");
  477|      0|    }
  478|       |
  479|  8.43k|    if (allow_f_after_float_ && (TryConsume('f') || TryConsume('F'))) {
  ------------------
  |  Branch (479:9): [True: 8.43k, False: 0]
  |  Branch (479:34): [True: 0, False: 8.43k]
  |  Branch (479:53): [True: 0, False: 8.43k]
  ------------------
  480|      0|      is_float = true;
  481|      0|    }
  482|  8.43k|  }
  483|       |
  484|  8.43k|  if (LookingAt<Letter>() && require_space_after_number_) {
  ------------------
  |  Branch (484:7): [True: 0, False: 8.43k]
  |  Branch (484:30): [True: 0, False: 0]
  ------------------
  485|      0|    AddError("Need space between number and identifier.");
  486|  8.43k|  } else if (current_char_ == '.') {
  ------------------
  |  Branch (486:14): [True: 0, False: 8.43k]
  ------------------
  487|      0|    if (is_float) {
  ------------------
  |  Branch (487:9): [True: 0, False: 0]
  ------------------
  488|      0|      AddError(
  489|      0|          "Already saw decimal point or exponent; can't have another one.");
  490|      0|    } else {
  491|      0|      AddError("Hex and octal numbers must be integers.");
  492|      0|    }
  493|      0|  }
  494|       |
  495|  8.43k|  return is_float ? TYPE_FLOAT : TYPE_INTEGER;
  ------------------
  |  Branch (495:10): [True: 0, False: 8.43k]
  ------------------
  496|  8.43k|}
_ZN6google8protobuf2io9Tokenizer22TryConsumeCommentStartEv:
  557|   201k|Tokenizer::NextCommentStatus Tokenizer::TryConsumeCommentStart() {
  558|   201k|  if (comment_style_ == CPP_COMMENT_STYLE && TryConsume('/')) {
  ------------------
  |  Branch (558:7): [True: 0, False: 201k]
  |  Branch (558:46): [True: 0, False: 0]
  ------------------
  559|      0|    if (TryConsume('/')) {
  ------------------
  |  Branch (559:9): [True: 0, False: 0]
  ------------------
  560|      0|      return LINE_COMMENT;
  561|      0|    } else if (TryConsume('*')) {
  ------------------
  |  Branch (561:16): [True: 0, False: 0]
  ------------------
  562|      0|      return BLOCK_COMMENT;
  563|      0|    } else {
  564|       |      // Oops, it was just a slash.  Return it.
  565|      0|      current_.type = TYPE_SYMBOL;
  566|      0|      current_.text = "/";
  567|      0|      current_.line = line_;
  568|      0|      current_.column = column_ - 1;
  569|      0|      current_.end_column = column_;
  570|      0|      return SLASH_NOT_COMMENT;
  571|      0|    }
  572|   201k|  } else if (comment_style_ == SH_COMMENT_STYLE && TryConsume('#')) {
  ------------------
  |  Branch (572:14): [True: 201k, False: 0]
  |  Branch (572:52): [True: 0, False: 201k]
  ------------------
  573|      0|    return LINE_COMMENT;
  574|   201k|  } else {
  575|   201k|    return NO_COMMENT;
  576|   201k|  }
  577|   201k|}
_ZN6google8protobuf2io9Tokenizer20TryConsumeWhitespaceEv:
  579|   263k|bool Tokenizer::TryConsumeWhitespace() {
  580|   263k|  if (report_newlines_) {
  ------------------
  |  Branch (580:7): [True: 0, False: 263k]
  ------------------
  581|      0|    if (TryConsumeOne<WhitespaceNoNewline>()) {
  ------------------
  |  Branch (581:9): [True: 0, False: 0]
  ------------------
  582|      0|      ConsumeZeroOrMore<WhitespaceNoNewline>();
  583|      0|      current_.type = TYPE_WHITESPACE;
  584|      0|      return true;
  585|      0|    }
  586|      0|    return false;
  587|      0|  }
  588|   263k|  if (TryConsumeOne<Whitespace>()) {
  ------------------
  |  Branch (588:7): [True: 157k, False: 106k]
  ------------------
  589|   157k|    ConsumeZeroOrMore<Whitespace>();
  590|   157k|    current_.type = TYPE_WHITESPACE;
  591|   157k|    return report_whitespace_;
  592|   157k|  }
  593|   106k|  return false;
  594|   263k|}
_ZN6google8protobuf2io9Tokenizer17TryConsumeNewlineEv:
  596|   201k|bool Tokenizer::TryConsumeNewline() {
  597|   201k|  if (!report_whitespace_ || !report_newlines_) {
  ------------------
  |  Branch (597:7): [True: 173k, False: 27.7k]
  |  Branch (597:30): [True: 27.7k, False: 0]
  ------------------
  598|   201k|    return false;
  599|   201k|  }
  600|      0|  if (TryConsume('\n')) {
  ------------------
  |  Branch (600:7): [True: 0, False: 0]
  ------------------
  601|      0|    current_.type = TYPE_NEWLINE;
  602|      0|    return true;
  603|      0|  }
  604|      0|  return false;
  605|      0|}
_ZN6google8protobuf2io9Tokenizer4NextEv:
  609|   264k|bool Tokenizer::Next() {
  610|   264k|  previous_ = current_;
  611|       |
  612|   264k|  while (!read_error_) {
  ------------------
  |  Branch (612:10): [True: 263k, False: 1.44k]
  ------------------
  613|   263k|    StartToken();
  614|   263k|    bool report_token = TryConsumeWhitespace() || TryConsumeNewline();
  ------------------
  |  Branch (614:25): [True: 62.1k, False: 201k]
  |  Branch (614:51): [True: 0, False: 201k]
  ------------------
  615|   263k|    EndToken();
  616|   263k|    if (report_token) {
  ------------------
  |  Branch (616:9): [True: 62.1k, False: 201k]
  ------------------
  617|  62.1k|      return true;
  618|  62.1k|    }
  619|       |
  620|   201k|    switch (TryConsumeCommentStart()) {
  ------------------
  |  Branch (620:13): [True: 201k, False: 0]
  ------------------
  621|      0|      case LINE_COMMENT:
  ------------------
  |  Branch (621:7): [True: 0, False: 201k]
  ------------------
  622|      0|        ConsumeLineComment(NULL);
  623|      0|        continue;
  624|      0|      case BLOCK_COMMENT:
  ------------------
  |  Branch (624:7): [True: 0, False: 201k]
  ------------------
  625|      0|        ConsumeBlockComment(NULL);
  626|      0|        continue;
  627|      0|      case SLASH_NOT_COMMENT:
  ------------------
  |  Branch (627:7): [True: 0, False: 201k]
  ------------------
  628|      0|        return true;
  629|   201k|      case NO_COMMENT:
  ------------------
  |  Branch (629:7): [True: 201k, False: 0]
  ------------------
  630|   201k|        break;
  631|   201k|    }
  632|       |
  633|       |    // Check for EOF before continuing.
  634|   201k|    if (read_error_) break;
  ------------------
  |  Branch (634:9): [True: 10.6k, False: 190k]
  ------------------
  635|       |
  636|   190k|    if (LookingAt<Unprintable>() || current_char_ == '\0') {
  ------------------
  |  Branch (636:9): [True: 5, False: 190k]
  |  Branch (636:37): [True: 2, False: 190k]
  ------------------
  637|      7|      AddError("Invalid control characters encountered in text.");
  638|      7|      NextChar();
  639|       |      // Skip more unprintable characters, too.  But, remember that '\0' is
  640|       |      // also what current_char_ is set to after EOF / read error.  We have
  641|       |      // to be careful not to go into an infinite loop of trying to consume
  642|       |      // it, so make sure to check read_error_ explicitly before consuming
  643|       |      // '\0'.
  644|     11|      while (TryConsumeOne<Unprintable>() ||
  ------------------
  |  Branch (644:14): [True: 2, False: 9]
  ------------------
  645|      9|             (!read_error_ && TryConsume('\0'))) {
  ------------------
  |  Branch (645:15): [True: 7, False: 2]
  |  Branch (645:31): [True: 2, False: 5]
  ------------------
  646|       |        // Ignore.
  647|      4|      }
  648|       |
  649|   190k|    } else {
  650|       |      // Reading some sort of token.
  651|   190k|      StartToken();
  652|       |
  653|   190k|      if (TryConsumeOne<Letter>()) {
  ------------------
  |  Branch (653:11): [True: 63.5k, False: 127k]
  ------------------
  654|  63.5k|        ConsumeZeroOrMore<Alphanumeric>();
  655|  63.5k|        current_.type = TYPE_IDENTIFIER;
  656|   127k|      } else if (TryConsume('0')) {
  ------------------
  |  Branch (656:18): [True: 5, False: 127k]
  ------------------
  657|      5|        current_.type = ConsumeNumber(true, false);
  658|   127k|      } else if (TryConsume('.')) {
  ------------------
  |  Branch (658:18): [True: 0, False: 127k]
  ------------------
  659|       |        // This could be the beginning of a floating-point number, or it could
  660|       |        // just be a '.' symbol.
  661|       |
  662|      0|        if (TryConsumeOne<Digit>()) {
  ------------------
  |  Branch (662:13): [True: 0, False: 0]
  ------------------
  663|       |          // It's a floating-point number.
  664|      0|          if (previous_.type == TYPE_IDENTIFIER &&
  ------------------
  |  Branch (664:15): [True: 0, False: 0]
  ------------------
  665|      0|              current_.line == previous_.line &&
  ------------------
  |  Branch (665:15): [True: 0, False: 0]
  ------------------
  666|      0|              current_.column == previous_.end_column) {
  ------------------
  |  Branch (666:15): [True: 0, False: 0]
  ------------------
  667|       |            // We don't accept syntax like "blah.123".
  668|      0|            error_collector_->RecordError(
  669|      0|                line_, column_ - 2,
  670|      0|                "Need space between identifier and decimal point.");
  671|      0|          }
  672|      0|          current_.type = ConsumeNumber(false, true);
  673|      0|        } else {
  674|      0|          current_.type = TYPE_SYMBOL;
  675|      0|        }
  676|   127k|      } else if (TryConsumeOne<Digit>()) {
  ------------------
  |  Branch (676:18): [True: 8.43k, False: 118k]
  ------------------
  677|  8.43k|        current_.type = ConsumeNumber(false, false);
  678|   118k|      } else if (TryConsume('\"')) {
  ------------------
  |  Branch (678:18): [True: 17.9k, False: 100k]
  ------------------
  679|  17.9k|        ConsumeString('\"');
  680|  17.9k|        current_.type = TYPE_STRING;
  681|   100k|      } else if (TryConsume('\'')) {
  ------------------
  |  Branch (681:18): [True: 0, False: 100k]
  ------------------
  682|      0|        ConsumeString('\'');
  683|      0|        current_.type = TYPE_STRING;
  684|   100k|      } else {
  685|       |        // Check if the high order bit is set.
  686|   100k|        if (current_char_ & 0x80) {
  ------------------
  |  Branch (686:13): [True: 0, False: 100k]
  ------------------
  687|      0|          error_collector_->RecordError(
  688|      0|              line_, column_,
  689|      0|              absl::StrFormat("Interpreting non ascii codepoint %d.",
  690|      0|                              static_cast<unsigned char>(current_char_)));
  691|      0|        }
  692|   100k|        NextChar();
  693|   100k|        current_.type = TYPE_SYMBOL;
  694|   100k|      }
  695|       |
  696|   190k|      EndToken();
  697|   190k|      return true;
  698|   190k|    }
  699|   190k|  }
  700|       |
  701|       |  // EOF
  702|  12.0k|  current_.type = TYPE_END;
  703|  12.0k|  current_.text.clear();
  704|  12.0k|  current_.line = line_;
  705|  12.0k|  current_.column = column_;
  706|  12.0k|  current_.end_column = column_;
  707|  12.0k|  return false;
  708|   264k|}
_ZN6google8protobuf2io9Tokenizer12ParseIntegerERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEmPm:
  946|  8.42k|                             uint64_t* output) {
  947|       |  // We can't just use strtoull() because (a) it accepts negative numbers,
  948|       |  // (b) We want additional range checks, (c) it reports overflows via errno.
  949|       |
  950|       |#if 0
  951|       |  const char *str_begin = text.c_str();
  952|       |  if (*str_begin == '-') return false;
  953|       |  char *str_end = nullptr;
  954|       |  errno = 0;
  955|       |  *output = std::strtoull(str_begin, &str_end, 0);
  956|       |  return (errno == 0 && str_end && *str_end == '\0' && *output <= max_value);
  957|       |#endif
  958|       |
  959|  8.42k|  const char* ptr = text.c_str();
  960|  8.42k|  int base = 10;
  961|  8.42k|  uint64_t overflow_if_mul_base = (kuint64max / 10) + 1;
  962|  8.42k|  if (ptr[0] == '0') {
  ------------------
  |  Branch (962:7): [True: 5, False: 8.41k]
  ------------------
  963|      5|    if (ptr[1] == 'x' || ptr[1] == 'X') {
  ------------------
  |  Branch (963:9): [True: 0, False: 5]
  |  Branch (963:26): [True: 0, False: 5]
  ------------------
  964|       |      // This is hex.
  965|      0|      base = 16;
  966|      0|      overflow_if_mul_base = (kuint64max / 16) + 1;
  967|      0|      ptr += 2;
  968|      5|    } else {
  969|       |      // This is octal.
  970|      5|      base = 8;
  971|      5|      overflow_if_mul_base = (kuint64max / 8) + 1;
  972|      5|    }
  973|      5|  }
  974|       |
  975|  8.42k|  uint64_t result = 0;
  976|       |  // For all the leading '0's, and also the first non-zero character, we
  977|       |  // don't need to multiply.
  978|  8.43k|  while (*ptr != '\0') {
  ------------------
  |  Branch (978:10): [True: 8.43k, False: 0]
  ------------------
  979|  8.43k|    int digit = DigitValue(*ptr++);
  980|  8.43k|    if (digit >= base) {
  ------------------
  |  Branch (980:9): [True: 0, False: 8.43k]
  ------------------
  981|       |      // The token provided by Tokenizer is invalid. i.e., 099 is an invalid
  982|       |      // token, but Tokenizer still think it's integer.
  983|      0|      return false;
  984|      0|    }
  985|  8.43k|    if (digit != 0) {
  ------------------
  |  Branch (985:9): [True: 8.42k, False: 6]
  ------------------
  986|  8.42k|      result = digit;
  987|  8.42k|      break;
  988|  8.42k|    }
  989|  8.43k|  }
  990|  8.58k|  for (; *ptr != '\0'; ptr++) {
  ------------------
  |  Branch (990:10): [True: 161, False: 8.42k]
  ------------------
  991|    161|    int digit = DigitValue(*ptr);
  992|    161|    if (digit < 0 || digit >= base) {
  ------------------
  |  Branch (992:9): [True: 0, False: 161]
  |  Branch (992:22): [True: 0, False: 161]
  ------------------
  993|       |      // The token provided by Tokenizer is invalid. i.e., 099 is an invalid
  994|       |      // token, but Tokenizer still think it's integer.
  995|      0|      return false;
  996|      0|    }
  997|    161|    if (result >= overflow_if_mul_base) {
  ------------------
  |  Branch (997:9): [True: 0, False: 161]
  ------------------
  998|       |      // We know the multiply we're about to do will overflow, so exit now.
  999|      0|      return false;
 1000|      0|    }
 1001|       |    // We know that result * base won't overflow, but adding digit might...
 1002|    161|    result = result * base + digit;
 1003|       |    // C++ guarantees defined "wrap" semantics when unsigned integer
 1004|       |    // operations overflow, making this a fast way to check if adding
 1005|       |    // digit made result overflow, and thus, wrap around.
 1006|    161|    if (result < static_cast<uint64_t>(base)) return false;
  ------------------
  |  Branch (1006:9): [True: 0, False: 161]
  ------------------
 1007|    161|  }
 1008|  8.42k|  if (result > max_value) return false;
  ------------------
  |  Branch (1008:7): [True: 0, False: 8.42k]
  ------------------
 1009|       |
 1010|  8.42k|  *output = result;
 1011|  8.42k|  return true;
 1012|  8.42k|}
_ZN6google8protobuf2io9Tokenizer17ParseStringAppendERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEPS9_:
 1157|  17.9k|                                  std::string* output) {
 1158|       |  // Reminder: text[0] is always a quote character.  (If text is
 1159|       |  // empty, it's invalid, so we'll just return).
 1160|  17.9k|  const size_t text_size = text.size();
 1161|  17.9k|  if (text_size == 0) {
  ------------------
  |  Branch (1161:7): [True: 0, False: 17.9k]
  ------------------
 1162|      0|    ABSL_DLOG(FATAL)
  ------------------
  |  |   40|      0|#define ABSL_DLOG(severity) ABSL_LOG_INTERNAL_DLOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   41|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, false) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   42|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1163|      0|        << " Tokenizer::ParseStringAppend() passed text that could not"
 1164|      0|           " have been tokenized as a string: "
 1165|      0|        << absl::CEscape(text);
 1166|      0|    return;
 1167|      0|  }
 1168|       |
 1169|       |  // Reserve room for new string. The branch is necessary because if
 1170|       |  // there is already space available the reserve() call might
 1171|       |  // downsize the output.
 1172|  17.9k|  const size_t new_len = text_size + output->size();
 1173|  17.9k|  if (new_len > output->capacity()) {
  ------------------
  |  Branch (1173:7): [True: 10.9k, False: 6.98k]
  ------------------
 1174|  10.9k|    output->reserve(new_len);
 1175|  10.9k|  }
 1176|       |
 1177|       |  // Loop through the string copying characters to "output" and
 1178|       |  // interpreting escape sequences.  Note that any invalid escape
 1179|       |  // sequences or other errors were already reported while tokenizing.
 1180|       |  // In this case we do not need to produce valid results.
 1181|  1.00M|  for (const char* ptr = text.c_str() + 1; *ptr != '\0'; ptr++) {
  ------------------
  |  Branch (1181:44): [True: 991k, False: 17.9k]
  ------------------
 1182|   991k|    if (*ptr == '\\' && ptr[1] != '\0') {
  ------------------
  |  Branch (1182:9): [True: 123k, False: 867k]
  |  Branch (1182:25): [True: 123k, False: 0]
  ------------------
 1183|       |      // An escape sequence.
 1184|   123k|      ++ptr;
 1185|       |
 1186|   123k|      if (OctalDigit::InClass(*ptr)) {
  ------------------
  |  Branch (1186:11): [True: 74.1k, False: 49.7k]
  ------------------
 1187|       |        // An octal escape.  May one, two, or three digits.
 1188|  74.1k|        int code = DigitValue(*ptr);
 1189|  74.1k|        if (OctalDigit::InClass(ptr[1])) {
  ------------------
  |  Branch (1189:13): [True: 68.8k, False: 5.23k]
  ------------------
 1190|  68.8k|          ++ptr;
 1191|  68.8k|          code = code * 8 + DigitValue(*ptr);
 1192|  68.8k|        }
 1193|  74.1k|        if (OctalDigit::InClass(ptr[1])) {
  ------------------
  |  Branch (1193:13): [True: 68.1k, False: 5.92k]
  ------------------
 1194|  68.1k|          ++ptr;
 1195|  68.1k|          code = code * 8 + DigitValue(*ptr);
 1196|  68.1k|        }
 1197|  74.1k|        output->push_back(static_cast<char>(code));
 1198|       |
 1199|  74.1k|      } else if (*ptr == 'x' || *ptr == 'X') {
  ------------------
  |  Branch (1199:18): [True: 39, False: 49.7k]
  |  Branch (1199:33): [True: 7, False: 49.7k]
  ------------------
 1200|       |        // A hex escape.  May zero, one, or two digits.  (The zero case
 1201|       |        // will have been caught as an error earlier.)
 1202|     46|        int code = 0;
 1203|     46|        if (HexDigit::InClass(ptr[1])) {
  ------------------
  |  Branch (1203:13): [True: 46, False: 0]
  ------------------
 1204|     46|          ++ptr;
 1205|     46|          code = DigitValue(*ptr);
 1206|     46|        }
 1207|     46|        if (HexDigit::InClass(ptr[1])) {
  ------------------
  |  Branch (1207:13): [True: 40, False: 6]
  ------------------
 1208|     40|          ++ptr;
 1209|     40|          code = code * 16 + DigitValue(*ptr);
 1210|     40|        }
 1211|     46|        output->push_back(static_cast<char>(code));
 1212|       |
 1213|  49.7k|      } else if (*ptr == 'u' || *ptr == 'U') {
  ------------------
  |  Branch (1213:18): [True: 12, False: 49.7k]
  |  Branch (1213:33): [True: 0, False: 49.7k]
  ------------------
 1214|     12|        uint32_t unicode;
 1215|     12|        const char* end = FetchUnicodePoint(ptr, &unicode);
 1216|     12|        if (end == ptr) {
  ------------------
  |  Branch (1216:13): [True: 0, False: 12]
  ------------------
 1217|       |          // Failure: Just dump out what we saw, don't try to parse it.
 1218|      0|          output->push_back(*ptr);
 1219|     12|        } else {
 1220|     12|          AppendUTF8(unicode, output);
 1221|     12|          ptr = end - 1;  // Because we're about to ++ptr.
 1222|     12|        }
 1223|  49.7k|      } else {
 1224|       |        // Some other escape code.
 1225|  49.7k|        output->push_back(TranslateEscape(*ptr));
 1226|  49.7k|      }
 1227|       |
 1228|   867k|    } else if (*ptr == text[0] && ptr[1] == '\0') {
  ------------------
  |  Branch (1228:16): [True: 17.9k, False: 849k]
  |  Branch (1228:35): [True: 17.9k, False: 0]
  ------------------
 1229|       |      // Ignore final quote matching the starting quote.
 1230|   849k|    } else {
 1231|   849k|      output->push_back(*ptr);
 1232|   849k|    }
 1233|   991k|  }
 1234|  17.9k|}
_ZN6google8protobuf2io9Tokenizer12IsIdentifierERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
 1244|      5|bool Tokenizer::IsIdentifier(const std::string& text) {
 1245|       |  // Mirrors IDENTIFIER definition in Tokenizer::Next() above.
 1246|      5|  if (text.size() == 0) return false;
  ------------------
  |  Branch (1246:7): [True: 0, False: 5]
  ------------------
 1247|      5|  if (!Letter::InClass(text.at(0))) return false;
  ------------------
  |  Branch (1247:7): [True: 0, False: 5]
  ------------------
 1248|      5|  if (!AllInClass<Alphanumeric>(text.substr(1))) return false;
  ------------------
  |  Branch (1248:7): [True: 0, False: 5]
  ------------------
 1249|      5|  return true;
 1250|      5|}
_ZN6google8protobuf2io9Tokenizer10TryConsumeEc:
  347|   717k|inline bool Tokenizer::TryConsume(char c) {
  348|   717k|  if (current_char_ == c) {
  ------------------
  |  Branch (348:7): [True: 18.0k, False: 699k]
  ------------------
  349|  18.0k|    NextChar();
  350|  18.0k|    return true;
  351|   699k|  } else {
  352|   699k|    return false;
  353|   699k|  }
  354|   717k|}
_ZN6google8protobuf2io9Tokenizer8RecordToEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  298|   454k|inline void Tokenizer::RecordTo(std::string* target) {
  299|   454k|  record_target_ = target;
  300|   454k|  record_start_ = buffer_pos_;
  301|   454k|}
_ZN6google8protobuf2io9Tokenizer13StopRecordingEv:
  303|   454k|inline void Tokenizer::StopRecording() {
  304|       |  // Note:  The if() is necessary because some STL implementations crash when
  305|       |  //   you call string::append(NULL, 0), presumably because they are trying to
  306|       |  //   be helpful by detecting the NULL pointer, even though there's nothing
  307|       |  //   wrong with reading zero bytes from NULL.
  308|   454k|  if (buffer_pos_ != record_start_) {
  ------------------
  |  Branch (308:7): [True: 335k, False: 118k]
  ------------------
  309|   335k|    record_target_->append(buffer_ + record_start_,
  310|   335k|                           buffer_pos_ - record_start_);
  311|   335k|  }
  312|       |  record_target_ = NULL;
  313|   454k|  record_start_ = -1;
  314|   454k|}
_ZN6google8protobuf2io9Tokenizer10StartTokenEv:
  316|   454k|inline void Tokenizer::StartToken() {
  317|   454k|  current_.type = TYPE_START;  // Just for the sake of initializing it.
  318|   454k|  current_.text.clear();
  319|   454k|  current_.line = line_;
  320|   454k|  current_.column = column_;
  321|   454k|  RecordTo(&current_.text);
  322|   454k|}
_ZN6google8protobuf2io9Tokenizer8EndTokenEv:
  324|   454k|inline void Tokenizer::EndToken() {
  325|   454k|  StopRecording();
  326|   454k|  current_.end_column = column_;
  327|   454k|}
tokenizer.cc:_ZN6google8protobuf2io12_GLOBAL__N_110DigitValueEc:
  155|   219k|inline int DigitValue(char digit) { return kAsciiToInt[digit & 0xFF]; }
tokenizer.cc:_ZN6google8protobuf2io12_GLOBAL__N_110OctalDigit7InClassEc:
  100|   649k|    static inline bool InClass(char c) { return EXPRESSION; } \
  ------------------
  |  Branch (100:49): [True: 303k, False: 43.1k]
  |  Branch (100:49): [True: 285k, False: 17.8k]
  ------------------
tokenizer.cc:_ZN6google8protobuf2io12_GLOBAL__N_18HexDigit7InClassEc:
  100|  1.42k|    static inline bool InClass(char c) { return EXPRESSION; } \
  ------------------
  |  Branch (100:49): [True: 186, False: 0]
  |  Branch (100:49): [True: 10, False: 176]
  |  Branch (100:49): [True: 105, False: 71]
  |  Branch (100:49): [True: 103, False: 2]
  |  Branch (100:49): [True: 73, False: 0]
  |  Branch (100:49): [True: 67, False: 6]
  ------------------
tokenizer.cc:_ZN6google8protobuf2ioL17FetchUnicodePointEPKcPj:
 1129|     12|static const char* FetchUnicodePoint(const char* ptr, uint32_t* code_point) {
 1130|     12|  const char* p = ptr;
 1131|       |  // Fetch the code point.
 1132|     12|  const int len = UnicodeLength(*p++);
 1133|     12|  if (!ReadHexDigits(p, len, code_point)) return ptr;
  ------------------
  |  Branch (1133:7): [True: 0, False: 12]
  ------------------
 1134|     12|  p += len;
 1135|       |
 1136|       |  // Check if the code point we read is a "head surrogate." If so, then we
 1137|       |  // expect it to be immediately followed by another code point which is a valid
 1138|       |  // "trail surrogate," and together they form a UTF-16 pair which decodes into
 1139|       |  // a single Unicode point. Trail surrogates may only use \u, not \U.
 1140|     12|  if (IsHeadSurrogate(*code_point) && *p == '\\' && *(p + 1) == 'u') {
  ------------------
  |  Branch (1140:7): [True: 0, False: 12]
  |  Branch (1140:39): [True: 0, False: 0]
  |  Branch (1140:53): [True: 0, False: 0]
  ------------------
 1141|      0|    uint32_t trail_surrogate;
 1142|      0|    if (ReadHexDigits(p + 2, 4, &trail_surrogate) &&
  ------------------
  |  Branch (1142:9): [True: 0, False: 0]
  ------------------
 1143|      0|        IsTrailSurrogate(trail_surrogate)) {
  ------------------
  |  Branch (1143:9): [True: 0, False: 0]
  ------------------
 1144|      0|      *code_point = AssembleUTF16(*code_point, trail_surrogate);
 1145|      0|      p += 6;
 1146|      0|    }
 1147|       |    // If this failed, then we just emit the head surrogate as a code point.
 1148|       |    // It's bogus, but so is the string.
 1149|      0|  }
 1150|       |
 1151|     12|  return p;
 1152|     12|}
tokenizer.cc:_ZN6google8protobuf2ioL13UnicodeLengthEc:
 1119|     12|static inline int UnicodeLength(char key) {
 1120|     12|  if (key == 'u') return 4;
  ------------------
  |  Branch (1120:7): [True: 12, False: 0]
  ------------------
 1121|      0|  if (key == 'U') return 8;
  ------------------
  |  Branch (1121:7): [True: 0, False: 0]
  ------------------
 1122|      0|  return 0;
 1123|      0|}
tokenizer.cc:_ZN6google8protobuf2ioL13ReadHexDigitsEPKciPj:
 1080|     12|static bool ReadHexDigits(const char* ptr, int len, uint32_t* result) {
 1081|     12|  *result = 0;
 1082|     12|  if (len == 0) return false;
  ------------------
  |  Branch (1082:7): [True: 0, False: 12]
  ------------------
 1083|     60|  for (const char* end = ptr + len; ptr < end; ++ptr) {
  ------------------
  |  Branch (1083:37): [True: 48, False: 12]
  ------------------
 1084|     48|    if (*ptr == '\0') return false;
  ------------------
  |  Branch (1084:9): [True: 0, False: 48]
  ------------------
 1085|     48|    *result = (*result << 4) + DigitValue(*ptr);
 1086|     48|  }
 1087|     12|  return true;
 1088|     12|}
tokenizer.cc:_ZN6google8protobuf2ioL15IsHeadSurrogateEj:
 1100|     12|static inline bool IsHeadSurrogate(uint32_t code_point) {
 1101|     12|  return (code_point >= kMinHeadSurrogate) && (code_point < kMaxHeadSurrogate);
  ------------------
  |  Branch (1101:10): [True: 4, False: 8]
  |  Branch (1101:47): [True: 0, False: 4]
  ------------------
 1102|     12|}
tokenizer.cc:_ZN6google8protobuf2ioL10AppendUTF8EjPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1049|     12|static void AppendUTF8(uint32_t code_point, std::string* output) {
 1050|     12|  uint32_t tmp = 0;
 1051|     12|  int len = 0;
 1052|     12|  if (code_point <= 0x7f) {
  ------------------
  |  Branch (1052:7): [True: 0, False: 12]
  ------------------
 1053|      0|    tmp = code_point;
 1054|      0|    len = 1;
 1055|     12|  } else if (code_point <= 0x07ff) {
  ------------------
  |  Branch (1055:14): [True: 0, False: 12]
  ------------------
 1056|      0|    tmp = 0x0000c080 | ((code_point & 0x07c0) << 2) | (code_point & 0x003f);
 1057|      0|    len = 2;
 1058|     12|  } else if (code_point <= 0xffff) {
  ------------------
  |  Branch (1058:14): [True: 12, False: 0]
  ------------------
 1059|     12|    tmp = 0x00e08080 | ((code_point & 0xf000) << 4) |
 1060|     12|          ((code_point & 0x0fc0) << 2) | (code_point & 0x003f);
 1061|     12|    len = 3;
 1062|     12|  } else if (code_point <= 0x10ffff) {
  ------------------
  |  Branch (1062:14): [True: 0, False: 0]
  ------------------
 1063|      0|    tmp = 0xf0808080 | ((code_point & 0x1c0000) << 6) |
 1064|      0|          ((code_point & 0x03f000) << 4) | ((code_point & 0x000fc0) << 2) |
 1065|      0|          (code_point & 0x003f);
 1066|      0|    len = 4;
 1067|      0|  } else {
 1068|       |    // Unicode code points end at 0x10FFFF, so this is out-of-range.
 1069|       |    // ConsumeString permits hex values up to 0x1FFFFF, and FetchUnicodePoint
 1070|       |    // doesn't perform a range check.
 1071|      0|    absl::StrAppendFormat(output, "\\U%08x", code_point);
 1072|      0|    return;
 1073|      0|  }
 1074|     12|  tmp = ghtonl(tmp);
 1075|     12|  output->append(reinterpret_cast<const char*>(&tmp) + sizeof(tmp) - len, len);
 1076|     12|}
tokenizer.cc:_ZN6google8protobuf2io12_GLOBAL__N_115TranslateEscapeEc:
  158|  49.7k|inline char TranslateEscape(char c) {
  159|  49.7k|  switch (c) {
  160|      1|    case 'a':
  ------------------
  |  Branch (160:5): [True: 1, False: 49.7k]
  ------------------
  161|      1|      return '\a';
  162|      1|    case 'b':
  ------------------
  |  Branch (162:5): [True: 1, False: 49.7k]
  ------------------
  163|      1|      return '\b';
  164|      5|    case 'f':
  ------------------
  |  Branch (164:5): [True: 5, False: 49.7k]
  ------------------
  165|      5|      return '\f';
  166|  5.62k|    case 'n':
  ------------------
  |  Branch (166:5): [True: 5.62k, False: 44.0k]
  ------------------
  167|  5.62k|      return '\n';
  168|  6.45k|    case 'r':
  ------------------
  |  Branch (168:5): [True: 6.45k, False: 43.2k]
  ------------------
  169|  6.45k|      return '\r';
  170|     84|    case 't':
  ------------------
  |  Branch (170:5): [True: 84, False: 49.6k]
  ------------------
  171|     84|      return '\t';
  172|      6|    case 'v':
  ------------------
  |  Branch (172:5): [True: 6, False: 49.7k]
  ------------------
  173|      6|      return '\v';
  174|     43|    case '\\':
  ------------------
  |  Branch (174:5): [True: 43, False: 49.6k]
  ------------------
  175|     43|      return '\\';
  176|      5|    case '?':
  ------------------
  |  Branch (176:5): [True: 5, False: 49.7k]
  ------------------
  177|      5|      return '\?';  // Trigraphs = :(
  178|  18.5k|    case '\'':
  ------------------
  |  Branch (178:5): [True: 18.5k, False: 31.1k]
  ------------------
  179|  18.5k|      return '\'';
  180|  18.9k|    case '"':
  ------------------
  |  Branch (180:5): [True: 18.9k, False: 30.7k]
  ------------------
  181|  18.9k|      return '\"';
  182|       |
  183|       |    // We expect escape sequences to have been validated separately.
  184|      0|    default:
  ------------------
  |  Branch (184:5): [True: 0, False: 49.7k]
  ------------------
  185|      0|      return '?';
  186|  49.7k|  }
  187|  49.7k|}
tokenizer.cc:_ZN6google8protobuf2io12_GLOBAL__N_16Letter7InClassEc:
  100|  1.21M|    static inline bool InClass(char c) { return EXPRESSION; } \
  ------------------
  |  Branch (100:49): [True: 137k, False: 61.3k]
  |  Branch (100:49): [True: 63.5k, False: 74.2k]
  |  Branch (100:49): [True: 74.2k, False: 61.3k]
  |  Branch (100:49): [True: 22, False: 74.2k]
  |  Branch (100:49): [True: 0, False: 135k]
  ------------------
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer13TryConsumeOneINS1_12_GLOBAL__N_16EscapeEEEbv:
  338|   123k|inline bool Tokenizer::TryConsumeOne() {
  339|   123k|  if (CharacterClass::InClass(current_char_)) {
  ------------------
  |  Branch (339:7): [True: 49.7k, False: 74.1k]
  ------------------
  340|  49.7k|    NextChar();
  341|  49.7k|    return true;
  342|  74.1k|  } else {
  343|  74.1k|    return false;
  344|  74.1k|  }
  345|   123k|}
tokenizer.cc:_ZN6google8protobuf2io12_GLOBAL__N_16Escape7InClassEc:
  100|  2.38M|    static inline bool InClass(char c) { return EXPRESSION; } \
  ------------------
  |  Branch (100:49): [True: 1, False: 123k]
  |  Branch (100:49): [True: 1, False: 123k]
  |  Branch (100:49): [True: 5, False: 123k]
  |  Branch (100:49): [True: 5.62k, False: 118k]
  |  Branch (100:49): [True: 6.45k, False: 111k]
  |  Branch (100:49): [True: 84, False: 111k]
  |  Branch (100:49): [True: 6, False: 111k]
  |  Branch (100:49): [True: 43, False: 111k]
  |  Branch (100:49): [True: 5, False: 111k]
  |  Branch (100:49): [True: 18.5k, False: 93.1k]
  |  Branch (100:49): [True: 18.9k, False: 74.1k]
  ------------------
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer13TryConsumeOneINS1_12_GLOBAL__N_110OctalDigitEEEbv:
  338|  74.1k|inline bool Tokenizer::TryConsumeOne() {
  339|  74.1k|  if (CharacterClass::InClass(current_char_)) {
  ------------------
  |  Branch (339:7): [True: 74.1k, False: 58]
  ------------------
  340|  74.1k|    NextChar();
  341|  74.1k|    return true;
  342|  74.1k|  } else {
  343|     58|    return false;
  344|     58|  }
  345|  74.1k|}
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer13TryConsumeOneINS1_12_GLOBAL__N_18HexDigitEEEbv:
  338|     94|inline bool Tokenizer::TryConsumeOne() {
  339|     94|  if (CharacterClass::InClass(current_char_)) {
  ------------------
  |  Branch (339:7): [True: 94, False: 0]
  ------------------
  340|     94|    NextChar();
  341|     94|    return true;
  342|     94|  } else {
  343|      0|    return false;
  344|      0|  }
  345|     94|}
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer9LookingAtINS1_12_GLOBAL__N_15DigitEEEbv:
  333|     10|inline bool Tokenizer::LookingAt() {
  334|     10|  return CharacterClass::InClass(current_char_);
  335|     10|}
tokenizer.cc:_ZN6google8protobuf2io12_GLOBAL__N_15Digit7InClassEc:
  100|   244k|    static inline bool InClass(char c) { return EXPRESSION; } \
  ------------------
  |  Branch (100:49): [True: 109k, False: 26.4k]
  |  Branch (100:49): [True: 8.60k, False: 100k]
  ------------------
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer17ConsumeZeroOrMoreINS1_12_GLOBAL__N_110OctalDigitEEEvv:
  357|      5|inline void Tokenizer::ConsumeZeroOrMore() {
  358|     11|  while (CharacterClass::InClass(current_char_)) {
  ------------------
  |  Branch (358:10): [True: 6, False: 5]
  ------------------
  359|      6|    NextChar();
  360|      6|  }
  361|      5|}
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer17ConsumeZeroOrMoreINS1_12_GLOBAL__N_15DigitEEEvv:
  357|  8.43k|inline void Tokenizer::ConsumeZeroOrMore() {
  358|  8.60k|  while (CharacterClass::InClass(current_char_)) {
  ------------------
  |  Branch (358:10): [True: 171, False: 8.43k]
  ------------------
  359|    171|    NextChar();
  360|    171|  }
  361|  8.43k|}
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer9LookingAtINS1_12_GLOBAL__N_16LetterEEEbv:
  333|  8.43k|inline bool Tokenizer::LookingAt() {
  334|  8.43k|  return CharacterClass::InClass(current_char_);
  335|  8.43k|}
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer13TryConsumeOneINS1_12_GLOBAL__N_110WhitespaceEEEbv:
  338|   263k|inline bool Tokenizer::TryConsumeOne() {
  339|   263k|  if (CharacterClass::InClass(current_char_)) {
  ------------------
  |  Branch (339:7): [True: 157k, False: 106k]
  ------------------
  340|   157k|    NextChar();
  341|   157k|    return true;
  342|   157k|  } else {
  343|   106k|    return false;
  344|   106k|  }
  345|   263k|}
tokenizer.cc:_ZN6google8protobuf2io12_GLOBAL__N_110Whitespace7InClassEc:
  100|  4.60M|    static inline bool InClass(char c) { return EXPRESSION; } \
  ------------------
  |  Branch (100:49): [True: 282k, False: 357k]
  |  Branch (100:49): [True: 92.9k, False: 264k]
  |  Branch (100:49): [True: 231, False: 263k]
  |  Branch (100:49): [True: 171, False: 263k]
  |  Branch (100:49): [True: 241, False: 263k]
  |  Branch (100:49): [True: 73, False: 263k]
  ------------------
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer17ConsumeZeroOrMoreINS1_12_GLOBAL__N_110WhitespaceEEEvv:
  357|   157k|inline void Tokenizer::ConsumeZeroOrMore() {
  358|   375k|  while (CharacterClass::InClass(current_char_)) {
  ------------------
  |  Branch (358:10): [True: 218k, False: 157k]
  ------------------
  359|   218k|    NextChar();
  360|   218k|  }
  361|   157k|}
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer9LookingAtINS1_12_GLOBAL__N_111UnprintableEEEbv:
  333|   190k|inline bool Tokenizer::LookingAt() {
  334|   190k|  return CharacterClass::InClass(current_char_);
  335|   190k|}
tokenizer.cc:_ZN6google8protobuf2io12_GLOBAL__N_111Unprintable7InClassEc:
  100|   190k|    static inline bool InClass(char c) { return EXPRESSION; } \
  ------------------
  |  Branch (100:49): [True: 13, False: 190k]
  |  Branch (100:49): [True: 7, False: 6]
  ------------------
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer13TryConsumeOneINS1_12_GLOBAL__N_111UnprintableEEEbv:
  338|     11|inline bool Tokenizer::TryConsumeOne() {
  339|     11|  if (CharacterClass::InClass(current_char_)) {
  ------------------
  |  Branch (339:7): [True: 2, False: 9]
  ------------------
  340|      2|    NextChar();
  341|      2|    return true;
  342|      9|  } else {
  343|      9|    return false;
  344|      9|  }
  345|     11|}
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer13TryConsumeOneINS1_12_GLOBAL__N_16LetterEEEbv:
  338|   190k|inline bool Tokenizer::TryConsumeOne() {
  339|   190k|  if (CharacterClass::InClass(current_char_)) {
  ------------------
  |  Branch (339:7): [True: 63.5k, False: 127k]
  ------------------
  340|  63.5k|    NextChar();
  341|  63.5k|    return true;
  342|   127k|  } else {
  343|   127k|    return false;
  344|   127k|  }
  345|   190k|}
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer17ConsumeZeroOrMoreINS1_12_GLOBAL__N_112AlphanumericEEEvv:
  357|  63.5k|inline void Tokenizer::ConsumeZeroOrMore() {
  358|   393k|  while (CharacterClass::InClass(current_char_)) {
  ------------------
  |  Branch (358:10): [True: 329k, False: 63.5k]
  ------------------
  359|   329k|    NextChar();
  360|   329k|  }
  361|  63.5k|}
tokenizer.cc:_ZN6google8protobuf2io12_GLOBAL__N_112Alphanumeric7InClassEc:
  100|  2.26M|    static inline bool InClass(char c) { return EXPRESSION; } \
  ------------------
  |  Branch (100:49): [True: 327k, False: 65.9k]
  |  Branch (100:49): [True: 326k, False: 731]
  |  Branch (100:49): [True: 3.41k, False: 63.2k]
  |  Branch (100:49): [True: 81, False: 3.32k]
  |  Branch (100:49): [True: 30.1k, False: 36.3k]
  |  Branch (100:49): [True: 423, False: 29.7k]
  |  Branch (100:49): [True: 2.59k, False: 63.5k]
  ------------------
tokenizer.cc:_ZN6google8protobuf2io9Tokenizer13TryConsumeOneINS1_12_GLOBAL__N_15DigitEEEbv:
  338|   127k|inline bool Tokenizer::TryConsumeOne() {
  339|   127k|  if (CharacterClass::InClass(current_char_)) {
  ------------------
  |  Branch (339:7): [True: 8.43k, False: 118k]
  ------------------
  340|  8.43k|    NextChar();
  341|  8.43k|    return true;
  342|   118k|  } else {
  343|   118k|    return false;
  344|   118k|  }
  345|   127k|}
tokenizer.cc:_ZN6google8protobuf2ioL10AllInClassINS1_12_GLOBAL__N_112AlphanumericEEEbRKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
 1237|      5|static bool AllInClass(const std::string& s) {
 1238|     44|  for (const char character : s) {
  ------------------
  |  Branch (1238:29): [True: 44, False: 5]
  ------------------
 1239|     44|    if (!CharacterClass::InClass(character)) return false;
  ------------------
  |  Branch (1239:9): [True: 0, False: 44]
  ------------------
 1240|     44|  }
 1241|      5|  return true;
 1242|      5|}

_ZN6google8protobuf2io14ErrorCollectorC2Ev:
   49|  12.0k|  inline ErrorCollector() {}
_ZN6google8protobuf2io9Tokenizer23set_allow_f_after_floatEb:
  224|  12.0k|  void set_allow_f_after_float(bool value) { allow_f_after_float_ = value; }
_ZN6google8protobuf2io9Tokenizer17set_comment_styleENS2_12CommentStyleE:
  236|  12.0k|  void set_comment_style(CommentStyle style) { comment_style_ = style; }
_ZN6google8protobuf2io9Tokenizer8AddErrorERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  322|      7|  void AddError(const std::string& message) {
  323|      7|    error_collector_->RecordError(line_, column_, message);
  324|      7|  }
_ZNK6google8protobuf2io9Tokenizer7currentEv:
  410|  1.05M|inline const Tokenizer::Token& Tokenizer::current() const { return current_; }

_ZN6google8protobuf2io19ZeroCopyInputStreamC2Ev:
  103|  12.0k|  ZeroCopyInputStream() = default;
_ZN6google8protobuf2io19ZeroCopyInputStreamD2Ev:
  104|  12.0k|  virtual ~ZeroCopyInputStream() = default;

_ZN6google8protobuf2io16ArrayInputStreamC2EPKvii:
   41|  12.0k|    : data_(reinterpret_cast<const uint8_t*>(data)),
   42|  12.0k|      size_(size),
   43|  12.0k|      block_size_(block_size > 0 ? block_size : size),
  ------------------
  |  Branch (43:19): [True: 0, False: 12.0k]
  ------------------
   44|  12.0k|      position_(0),
   45|  12.0k|      last_returned_size_(0) {}
_ZN6google8protobuf2io16ArrayInputStream4NextEPPKvPi:
   47|  24.1k|bool ArrayInputStream::Next(const void** data, int* size) {
   48|  24.1k|  if (position_ < size_) {
  ------------------
  |  Branch (48:7): [True: 12.0k, False: 12.0k]
  ------------------
   49|  12.0k|    last_returned_size_ = std::min(block_size_, size_ - position_);
   50|  12.0k|    *data = data_ + position_;
   51|  12.0k|    *size = last_returned_size_;
   52|  12.0k|    position_ += last_returned_size_;
   53|  12.0k|    return true;
   54|  12.0k|  } else {
   55|       |    // We're at the end of the array.
   56|  12.0k|    last_returned_size_ = 0;  // Don't let caller back up.
   57|  12.0k|    return false;
   58|  12.0k|  }
   59|  24.1k|}
_ZN6google8protobuf2io16ArrayInputStream6BackUpEi:
   61|      9|void ArrayInputStream::BackUp(int count) {
   62|      9|  ABSL_CHECK_GT(last_returned_size_, 0)
  ------------------
  |  |   60|      0|  ABSL_LOG_INTERNAL_CHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   58|      9|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GT, >, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      9|  while (                                                                      \
  |  |  |  |  |  |   62|      9|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 9]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      9|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      9|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      9|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      9|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      9|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      9|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      9|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      9|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   63|      0|      << "BackUp() can only be called after a successful Next().";
   64|      9|  ABSL_CHECK_LE(count, last_returned_size_);
  ------------------
  |  |   54|      9|  ABSL_LOG_INTERNAL_CHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   52|      9|  ABSL_LOG_INTERNAL_CHECK_OP(Check_LE, <=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      9|  while (                                                                      \
  |  |  |  |  |  |   62|      9|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 9]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      9|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      9|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      9|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      9|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      9|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      9|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   65|      9|  ABSL_CHECK_GE(count, 0);
  ------------------
  |  |   58|      9|  ABSL_LOG_INTERNAL_CHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   56|      9|  ABSL_LOG_INTERNAL_CHECK_OP(Check_GE, >=, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|      9|  while (                                                                      \
  |  |  |  |  |  |   62|      9|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 9]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|      9|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|      9|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|      9|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|      9|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|      9|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|      9|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|      0|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   66|      9|  position_ -= count;
   67|      9|  last_returned_size_ = 0;  // Don't let caller back up further.
   68|      9|}

_ZN6google8protobuf2io19mutable_string_dataEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  499|    229|inline char* mutable_string_data(std::string* s) {
  500|    229|  return &(*s)[0];
  501|    229|}

_ZNK6google8protobuf7Message11GetMetadataEv:
  155|   497k|Metadata Message::GetMetadata() const {
  156|   497k|  return GetMetadataImpl(GetClassData()->full());
  157|   497k|}
_ZN6google8protobuf7Message15GetMetadataImplERKNS0_8internal13ClassDataFullE:
  159|   595k|Metadata Message::GetMetadataImpl(const internal::ClassDataFull& data) {
  160|   595k|  auto* table = data.descriptor_table;
  161|       |  // Only codegen types provide a table. DynamicMessage does not provide a table
  162|       |  // and instead eagerly initializes the descriptor/reflection members.
  163|   595k|  if (ABSL_PREDICT_TRUE(table != nullptr)) {
  ------------------
  |  |  179|   595k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 595k, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 595k]
  |  |  |  Branch (179:57): [True: 595k, False: 0]
  |  |  ------------------
  ------------------
  164|   595k|    if (ABSL_PREDICT_FALSE(data.get_metadata_tracker != nullptr)) {
  ------------------
  |  |  178|   595k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 595k]
  |  |  |  Branch (178:49): [Folded, False: 595k]
  |  |  |  Branch (178:58): [True: 0, False: 595k]
  |  |  ------------------
  ------------------
  165|      0|      data.get_metadata_tracker();
  166|      0|    }
  167|   595k|    absl::call_once(*table->once, [table] {
  168|   595k|      internal::AssignDescriptorsOnceInnerCall(table);
  169|   595k|    });
  170|   595k|  }
  171|   595k|  return {data.descriptor, data.reflection};
  172|   595k|}
_ZNK6google8protobuf7Message29MaybeComputeUnknownFieldsSizeEmPKNS0_8internal10CachedSizeE:
  197|  1.04k|    size_t total_size, const internal::CachedSize* cached_size) const {
  198|  1.04k|  if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) {
  ------------------
  |  |  365|  1.04k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 1.04k]
  |  |  |  Branch (365:54): [Folded, False: 1.04k]
  |  |  |  Branch (365:63): [True: 0, False: 1.04k]
  |  |  ------------------
  ------------------
  199|      0|    return ComputeUnknownFieldsSize(total_size, cached_size);
  200|      0|  }
  201|  1.04k|  cached_size->Set(internal::ToCachedSize(total_size));
  202|  1.04k|  return total_size;
  203|  1.04k|}
_ZN6google8protobuf14MessageFactoryD2Ev:
  253|      4|MessageFactory::~MessageFactory() = default;
_ZN6google8protobuf14MessageFactory17generated_factoryEv:
  440|  32.7k|MessageFactory* MessageFactory::generated_factory() {
  441|  32.7k|  return GeneratedMessageFactory::singleton();
  442|  32.7k|}
_ZN6google8protobuf14MessageFactory29InternalRegisterGeneratedFileEPKNS0_8internal15DescriptorTableE:
  445|      6|    const google::protobuf::internal::DescriptorTable* table) {
  446|      6|  GeneratedMessageFactory::singleton()->RegisterFile(table);
  447|      6|}
_ZN6google8protobuf14MessageFactory32InternalRegisterGeneratedMessageEPKNS0_10DescriptorEPKNS0_7MessageE:
  450|     10|    const Descriptor* descriptor, const Message* prototype) {
  451|     10|  GeneratedMessageFactory::singleton()->RegisterType(descriptor, prototype);
  452|     10|}
message.cc:_ZN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory9singletonEv:
  339|  32.7k|GeneratedMessageFactory* GeneratedMessageFactory::singleton() {
  340|  32.7k|  static auto instance =
  341|  32.7k|      internal::OnShutdownDelete(new GeneratedMessageFactory);
  342|  32.7k|  return instance;
  343|  32.7k|}
message.cc:_ZN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactoryC2Ev:
  270|      2|  GeneratedMessageFactory() {
  271|      2|    dropped_defaults_factory_.SetDelegateToGeneratedFactory(true);
  272|      2|  }
message.cc:_ZN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory12GetPrototypeEPKNS0_10DescriptorE:
  369|  3.98k|const Message* GeneratedMessageFactory::GetPrototype(const Descriptor* type) {
  370|  3.98k|  const Message* result = TryGetPrototype(type);
  371|  3.98k|  if (result == nullptr &&
  ------------------
  |  Branch (371:7): [True: 0, False: 3.98k]
  ------------------
  372|      0|      type->file()->pool() == DescriptorPool::generated_pool()) {
  ------------------
  |  Branch (372:7): [True: 0, False: 0]
  ------------------
  373|       |    // We registered this descriptor with a null pointer.
  374|       |    // In this case we need to create the prototype from the dynamic factory.
  375|       |    // We _must_ do this outside the lock because the dynamic factory will call
  376|       |    // back into the generated factory for cross linking.
  377|      0|    result = dropped_defaults_factory_.GetPrototype(type);
  378|       |
  379|      0|    {
  380|      0|      absl::WriterMutexLock lock(&mutex_);
  381|       |      // And update the main map to make the next lookup faster.
  382|       |      // We don't need to recheck here. Even if someone raced us here the result
  383|       |      // is the same, so we can just write it.
  384|      0|      type_map_[type].set(result);
  385|      0|    }
  386|      0|  }
  387|       |
  388|  3.98k|  return result;
  389|  3.98k|}
message.cc:_ZN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory15TryGetPrototypeEPKNS0_10DescriptorE:
  392|  3.98k|    const Descriptor* type) {
  393|  3.98k|  absl::optional<const Message*> result;
  394|  3.98k|  {
  395|  3.98k|    absl::ReaderMutexLock lock(&mutex_);
  396|  3.98k|    result = FindInTypeMap(type);
  397|  3.98k|    if (result.has_value() && *result != nullptr) {
  ------------------
  |  Branch (397:9): [True: 3.98k, False: 1]
  |  Branch (397:31): [True: 3.98k, False: 0]
  ------------------
  398|  3.98k|      return *result;
  399|  3.98k|    }
  400|  3.98k|  }
  401|       |
  402|       |  // If the type is not in the generated pool, then we can't possibly handle
  403|       |  // it.
  404|      1|  if (type->file()->pool() != DescriptorPool::generated_pool()) return nullptr;
  ------------------
  |  Branch (404:7): [True: 0, False: 1]
  ------------------
  405|       |
  406|       |  // Apparently the file hasn't been registered yet.  Let's do that now.
  407|      1|  const internal::DescriptorTable* registration_data =
  408|      1|      FindInFileMap(type->file()->name());
  409|      1|  if (registration_data == nullptr) {
  ------------------
  |  Branch (409:7): [True: 0, False: 1]
  ------------------
  410|      0|    ABSL_DLOG(FATAL) << "File appears to be in generated pool but wasn't "
  ------------------
  |  |   40|      0|#define ABSL_DLOG(severity) ABSL_LOG_INTERNAL_DLOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   41|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, false) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   42|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  411|      0|                        "registered: "
  412|      0|                     << type->file()->name();
  413|      0|    return nullptr;
  414|      0|  }
  415|       |
  416|      1|  {
  417|      1|    absl::WriterMutexLock lock(&mutex_);
  418|       |
  419|       |    // Check if another thread preempted us.
  420|      1|    result = FindInTypeMap(type);
  421|      1|    if (!result.has_value()) {
  ------------------
  |  Branch (421:9): [True: 1, False: 0]
  ------------------
  422|       |      // Nope.  OK, register everything.
  423|      1|      internal::RegisterFileLevelMetadata(registration_data);
  424|       |      // Should be here now.
  425|      1|      result = FindInTypeMap(type);
  426|      1|      ABSL_DCHECK(result.has_value());
  ------------------
  |  |   47|      1|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      1|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      2|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      1|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      2|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      2|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      1|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      1|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      2|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      2|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  427|      1|    }
  428|      1|  }
  429|       |
  430|      1|  return *result;
  431|      1|}
message.cc:_ZN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory13FindInTypeMapEPKNS0_10DescriptorE:
  276|  3.99k|  {
  277|  3.99k|    auto it = type_map_.find(type);
  278|  3.99k|    if (it == type_map_.end()) return absl::nullopt;
  ------------------
  |  Branch (278:9): [True: 2, False: 3.98k]
  ------------------
  279|  3.98k|    return it->second.get();
  280|  3.99k|  }
message.cc:_ZNK6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory10MessagePtr3getEv:
  329|  3.98k|    const Message* get() const { return value_; }
message.cc:_ZN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory13FindInFileMapENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
  283|      1|      absl::string_view name) {
  284|      1|    auto it = files_.find(name);
  285|      1|    if (it == files_.end()) return nullptr;
  ------------------
  |  Branch (285:9): [True: 0, False: 1]
  ------------------
  286|      1|    return *it;
  287|      1|  }
message.cc:_ZNK6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory18DescriptorByNameEqclEPKNS0_8internal15DescriptorTableENSt3__117basic_string_viewIcNS8_11char_traitsIcEEEE:
  310|      1|                    absl::string_view rhs) const {
  311|      1|      return (*this)(lhs->filename, rhs);
  312|      1|    }
message.cc:_ZNK6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory18DescriptorByNameEqclENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEES8_:
  313|      1|    bool operator()(absl::string_view lhs, absl::string_view rhs) const {
  314|      1|      return lhs == rhs;
  315|      1|    }
message.cc:_ZNK6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashclENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEE:
  295|      1|    size_t operator()(absl::string_view name) const {
  296|      1|      return absl::HashOf(name);
  297|      1|    }
message.cc:_ZN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory12RegisterFileEPKNS0_8internal15DescriptorTableE:
  346|      6|    const google::protobuf::internal::DescriptorTable* table) {
  347|      6|  if (!files_.insert(table).second) {
  ------------------
  |  Branch (347:7): [True: 0, False: 6]
  ------------------
  348|      0|    ABSL_LOG(FATAL) << "File is already registered: " << table->filename;
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  349|      0|  }
  350|      6|}
message.cc:_ZNK6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashclEPKNS0_8internal15DescriptorTableE:
  291|      6|    size_t operator()(const google::protobuf::internal::DescriptorTable* t) const {
  292|      6|      return absl::HashOf(absl::string_view{t->filename});
  293|      6|    }
message.cc:_ZN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory12RegisterTypeEPKNS0_10DescriptorEPKNS0_7MessageE:
  353|     10|                                           const Message* prototype) {
  354|     10|  ABSL_DCHECK_EQ(descriptor->file()->pool(), DescriptorPool::generated_pool())
  ------------------
  |  |   74|      0|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     10|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     10|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 10]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  355|      0|      << "Tried to register a non-generated type with the generated "
  356|      0|         "type registry.";
  357|       |
  358|       |  // This should only be called as a result of calling a file registration
  359|       |  // function during GetPrototype(), in which case we already have locked
  360|       |  // the mutex.
  361|     10|  mutex_.AssertHeld();
  362|     10|  if (!type_map_.try_emplace(descriptor, prototype).second) {
  ------------------
  |  Branch (362:7): [True: 0, False: 10]
  ------------------
  363|      0|    ABSL_DLOG(FATAL) << "Type is already registered: "
  ------------------
  |  |   40|      0|#define ABSL_DLOG(severity) ABSL_LOG_INTERNAL_DLOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   41|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, false) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   42|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  364|      0|                     << descriptor->full_name();
  365|      0|  }
  366|     10|}
message.cc:_ZN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrC2EPKNS0_7MessageE:
  328|     10|    explicit MessagePtr(const Message* msg) : value_(msg) {}
message.cc:_ZZN6google8protobuf7Message15GetMetadataImplERKNS0_8internal13ClassDataFullEENK3$_0clEv:
  167|      4|    absl::call_once(*table->once, [table] {
  168|      4|      internal::AssignDescriptorsOnceInnerCall(table);
  169|      4|    });

_ZNK6google8protobuf10Reflection9IsInlinedEPKNS0_15FieldDescriptorE:
 1233|  17.9k|  inline bool IsInlined(const FieldDescriptor* field) const {
 1234|  17.9k|    return schema_.IsFieldInlined(field);
 1235|  17.9k|  }
_ZNK6google8protobuf10Reflection13HasOneofFieldERKNS0_7MessageEPKNS0_15FieldDescriptorE:
 1552|  25.9k|                               const FieldDescriptor* field) const {
 1553|  25.9k|  return (GetOneofCase(message, field->containing_oneof()) ==
 1554|  25.9k|          static_cast<uint32_t>(field->number()));
 1555|  25.9k|}
_ZN6google8protobuf14MessageFactoryC2Ev:
 1365|      8|  inline MessageFactory() = default;
_ZN6google8protobuf8internal18GetPointerAtOffsetIjEEPT_Pvj:
  214|  92.4k|inline To* GetPointerAtOffset(void* message, uint32_t offset) {
  215|  92.4k|  return reinterpret_cast<To*>(reinterpret_cast<char*>(message) + offset);
  216|  92.4k|}
_ZNK6google8protobuf10Reflection6GetRawINS0_8internal20RepeatedPtrFieldBaseEEERKT_RKNS0_7MessageEPKNS0_15FieldDescriptorE:
 1624|  93.7k|                               const FieldDescriptor* field) const {
 1625|   187k|  ABSL_DCHECK(!schema_.InRealOneof(field) || HasOneofField(message, field))
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  93.7k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  93.7k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|   187k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|   187k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 93.7k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  93.7k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 93.7k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  93.7k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 93.7k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  93.7k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|  93.7k|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1626|   187k|      << "Field = " << field->full_name();
 1627|       |
 1628|  93.7k|  if (PROTOBUF_PREDICT_TRUE(!schema_.InRealOneof(field))) {
  ------------------
  |  |  364|  93.7k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 93.7k, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 93.7k]
  |  |  |  Branch (364:62): [True: 93.7k, False: 0]
  |  |  ------------------
  ------------------
 1629|  93.7k|    return GetRawNonOneof<Type>(message, field);
 1630|  93.7k|  }
 1631|       |
 1632|       |  // Oneof fields are not split.
 1633|      0|  ABSL_DCHECK(!schema_.IsSplit(field));
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  93.7k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1634|       |
 1635|      0|  const uint32_t field_offset = schema_.GetFieldOffset(field);
 1636|      0|  return internal::GetConstRefAtOffset<Type>(message, field_offset);
 1637|      0|}
_ZNK6google8protobuf10Reflection14GetRawNonOneofINS0_8internal20RepeatedPtrFieldBaseEEERKT_RKNS0_7MessageEPKNS0_15FieldDescriptorE:
 1614|  93.7k|                                       const FieldDescriptor* field) const {
 1615|  93.7k|  if (PROTOBUF_PREDICT_FALSE(schema_.IsSplit(field))) {
  ------------------
  |  |  365|  93.7k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 93.7k]
  |  |  |  Branch (365:54): [Folded, False: 93.7k]
  |  |  |  Branch (365:63): [True: 0, False: 93.7k]
  |  |  ------------------
  ------------------
 1616|      0|    return GetRawSplit<Type>(message, field);
 1617|      0|  }
 1618|  93.7k|  const uint32_t field_offset = schema_.GetFieldOffsetNonOneof(field);
 1619|  93.7k|  return internal::GetConstRefAtOffset<Type>(message, field_offset);
 1620|  93.7k|}
_ZN6google8protobuf8internal23GetConstPointerAtOffsetINS1_20RepeatedPtrFieldBaseEEEPKT_PKvj:
  219|  93.7k|const To* GetConstPointerAtOffset(const void* message, uint32_t offset) {
  220|  93.7k|  return reinterpret_cast<const To*>(reinterpret_cast<const char*>(message) +
  221|  93.7k|                                     offset);
  222|  93.7k|}
_ZN6google8protobuf8internal19GetConstRefAtOffsetINS1_20RepeatedPtrFieldBaseEEERKT_RKNS0_7MessageEj:
  225|  93.7k|const To& GetConstRefAtOffset(const Message& message, uint32_t offset) {
  226|  93.7k|  return *GetConstPointerAtOffset<To>(&message, offset);
  227|  93.7k|}
_ZNK6google8protobuf10Reflection6GetRawIPKNS0_7MessageEEERKT_RS4_PKNS0_15FieldDescriptorE:
 1624|  32.7k|                               const FieldDescriptor* field) const {
 1625|  65.4k|  ABSL_DCHECK(!schema_.InRealOneof(field) || HasOneofField(message, field))
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  32.7k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  32.7k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  65.4k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  65.4k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 32.7k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  32.7k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 32.7k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  32.7k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 32.7k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  32.7k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|  32.7k|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1626|  65.4k|      << "Field = " << field->full_name();
 1627|       |
 1628|  32.7k|  if (PROTOBUF_PREDICT_TRUE(!schema_.InRealOneof(field))) {
  ------------------
  |  |  364|  32.7k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 32.3k, False: 425]
  |  |  |  Branch (364:53): [Folded, False: 32.7k]
  |  |  |  Branch (364:62): [True: 32.3k, False: 425]
  |  |  ------------------
  ------------------
 1629|  32.3k|    return GetRawNonOneof<Type>(message, field);
 1630|  32.3k|  }
 1631|       |
 1632|       |  // Oneof fields are not split.
 1633|    425|  ABSL_DCHECK(!schema_.IsSplit(field));
  ------------------
  |  |   47|    425|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  32.7k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.27k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    425|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    850|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    850|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 425, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    425|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 425]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    425|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 425, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.27k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.27k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1634|       |
 1635|    425|  const uint32_t field_offset = schema_.GetFieldOffset(field);
 1636|    425|  return internal::GetConstRefAtOffset<Type>(message, field_offset);
 1637|    425|}
_ZNK6google8protobuf10Reflection14GetRawNonOneofIPKNS0_7MessageEEERKT_RS4_PKNS0_15FieldDescriptorE:
 1614|  32.3k|                                       const FieldDescriptor* field) const {
 1615|  32.3k|  if (PROTOBUF_PREDICT_FALSE(schema_.IsSplit(field))) {
  ------------------
  |  |  365|  32.3k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 32.3k]
  |  |  |  Branch (365:54): [Folded, False: 32.3k]
  |  |  |  Branch (365:63): [True: 0, False: 32.3k]
  |  |  ------------------
  ------------------
 1616|      0|    return GetRawSplit<Type>(message, field);
 1617|      0|  }
 1618|  32.3k|  const uint32_t field_offset = schema_.GetFieldOffsetNonOneof(field);
 1619|  32.3k|  return internal::GetConstRefAtOffset<Type>(message, field_offset);
 1620|  32.3k|}
_ZN6google8protobuf8internal23GetConstPointerAtOffsetIPKNS0_7MessageEEEPKT_PKvj:
  219|  32.7k|const To* GetConstPointerAtOffset(const void* message, uint32_t offset) {
  220|  32.7k|  return reinterpret_cast<const To*>(reinterpret_cast<const char*>(message) +
  221|  32.7k|                                     offset);
  222|  32.7k|}
_ZN6google8protobuf8internal19GetConstRefAtOffsetIPKNS0_7MessageEEERKT_RS4_j:
  225|  32.7k|const To& GetConstRefAtOffset(const Message& message, uint32_t offset) {
  226|  32.7k|  return *GetConstPointerAtOffset<To>(&message, offset);
  227|  32.7k|}
_ZNK6google8protobuf10Reflection10MutableRawIPNS0_7MessageEEEPT_S4_PKNS0_15FieldDescriptorE:
 1207|  65.8k|  Type* MutableRaw(Message* message, const FieldDescriptor* field) const {
 1208|  65.8k|    return reinterpret_cast<Type*>(MutableRawImpl(message, field));
 1209|  65.8k|  }
_ZNK6google8protobuf10Reflection10MutableRawIjEEPT_PNS0_7MessageEPKNS0_15FieldDescriptorE:
 1207|  8.42k|  Type* MutableRaw(Message* message, const FieldDescriptor* field) const {
 1208|  8.42k|    return reinterpret_cast<Type*>(MutableRawImpl(message, field));
 1209|  8.42k|  }
_ZNK6google8protobuf10Reflection10MutableRawIbEEPT_PNS0_7MessageEPKNS0_15FieldDescriptorE:
 1207|      3|  Type* MutableRaw(Message* message, const FieldDescriptor* field) const {
 1208|      3|    return reinterpret_cast<Type*>(MutableRawImpl(message, field));
 1209|      3|  }
_ZNK6google8protobuf10Reflection10MutableRawINS0_8internal14ArenaStringPtrEEEPT_PNS0_7MessageEPKNS0_15FieldDescriptorE:
 1207|  18.9k|  Type* MutableRaw(Message* message, const FieldDescriptor* field) const {
 1208|  18.9k|    return reinterpret_cast<Type*>(MutableRawImpl(message, field));
 1209|  18.9k|  }
_ZNK6google8protobuf10Reflection10MutableRawINS0_8internal20RepeatedPtrFieldBaseEEEPT_PNS0_7MessageEPKNS0_15FieldDescriptorE:
 1207|  8.72k|  Type* MutableRaw(Message* message, const FieldDescriptor* field) const {
 1208|  8.72k|    return reinterpret_cast<Type*>(MutableRawImpl(message, field));
 1209|  8.72k|  }
_ZN6google8protobuf8internal23GetConstPointerAtOffsetIjEEPKT_PKvj:
  219|   172k|const To* GetConstPointerAtOffset(const void* message, uint32_t offset) {
  220|   172k|  return reinterpret_cast<const To*>(reinterpret_cast<const char*>(message) +
  221|   172k|                                     offset);
  222|   172k|}
_ZN6google8protobuf8internal18GetPointerAtOffsetIvEEPT_Pvj:
  214|   102k|inline To* GetPointerAtOffset(void* message, uint32_t offset) {
  215|   102k|  return reinterpret_cast<To*>(reinterpret_cast<char*>(message) + offset);
  216|   102k|}
_ZN6google8protobuf8internal19GetConstRefAtOffsetIjEERKT_RKNS0_7MessageEj:
  225|   172k|const To& GetConstRefAtOffset(const Message& message, uint32_t offset) {
  226|   172k|  return *GetConstPointerAtOffset<To>(&message, offset);
  227|   172k|}

_ZN6google8protobuf8internal13MergeFromImplILb0EEEbNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPNS0_11MessageLiteEPKNS1_16TcParseTableBaseENS8_10ParseFlagsE:
  214|      6|                   MessageLite::ParseFlags parse_flags) {
  215|      6|  const char* ptr;
  216|      6|  internal::ParseContext ctx(io::CodedInputStream::GetDefaultRecursionLimit(),
  217|      6|                             aliasing, &ptr, input);
  218|      6|  ptr = internal::TcParser::ParseLoop(msg, ptr, &ctx, tc_table);
  219|       |  // ctx has an explicit limit set (length of string_view).
  220|      6|  if (PROTOBUF_PREDICT_TRUE(ptr && ctx.EndedAtLimit())) {
  ------------------
  |  |  364|     12|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 6, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 6]
  |  |  |  Branch (364:63): [True: 6, False: 0]
  |  |  |  Branch (364:63): [True: 6, False: 0]
  |  |  ------------------
  ------------------
  221|      6|    return CheckFieldPresence(ctx, *msg, parse_flags);
  222|      6|  }
  223|      0|  return false;
  224|      6|}
_ZN6google8protobuf11MessageLite21CheckTypeAndMergeFromERKS1_:
   67|    662|void MessageLite::CheckTypeAndMergeFrom(const MessageLite& other) {
   68|    662|  auto* data = GetClassData();
   69|    662|  auto* other_data = other.GetClassData();
   70|       |
   71|    662|  ABSL_CHECK_EQ(data, other_data)
  ------------------
  |  |   50|      0|  ABSL_LOG_INTERNAL_CHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   48|    662|  ABSL_LOG_INTERNAL_CHECK_OP(Check_EQ, ==, val1, val1_text, val2, val2_text)
  |  |  |  |  ------------------
  |  |  |  |  |  |   61|    662|  while (                                                                      \
  |  |  |  |  |  |   62|    662|      ::std::string* absl_log_internal_check_op_result ABSL_ATTRIBUTE_UNUSED = \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (62:22): [True: 0, False: 662]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   63|    662|          ::absl::log_internal::name##Impl(                                    \
  |  |  |  |  |  |   64|    662|              ::absl::log_internal::GetReferenceableValue(val1),               \
  |  |  |  |  |  |   65|    662|              ::absl::log_internal::GetReferenceableValue(val2),               \
  |  |  |  |  |  |   66|    662|              ABSL_LOG_INTERNAL_STRIP_STRING_LITERAL(val1_text                 \
  |  |  |  |  |  |   67|    662|                                                     " " #op " " val2_text)))  \
  |  |  |  |  |  |   68|    662|    ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS, true)                         \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   69|    662|  ABSL_LOG_INTERNAL_CHECK(*absl_log_internal_check_op_result).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|    662|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   72|      0|      << "Invalid call to CheckTypeAndMergeFrom between types " << GetTypeName()
   73|      0|      << " and " << other.GetTypeName();
   74|    662|  data->merge_to_from(*this, other);
   75|    662|}
_ZNK6google8protobuf11MessageLite3NewEPNS0_5ArenaE:
   77|  37.5k|MessageLite* MessageLite::New(Arena* arena) const {
   78|  37.5k|  auto* data = GetClassData();
   79|       |  // The `instance->New()` expression requires using the actual instance
   80|       |  // instead of the prototype for the inner function call.
   81|       |  // Certain custom instances have special per-instance state that needs to be
   82|       |  // copied.
   83|  37.5k|  return data->message_creator.New(this, data->prototype, arena);
   84|  37.5k|}
_ZNK6google8protobuf11MessageLite13IsInitializedEv:
   86|     38|bool MessageLite::IsInitialized() const {
   87|     38|  auto* data = GetClassData();
   88|     38|  return data->is_initialized != nullptr ? data->is_initialized(*this) : true;
  ------------------
  |  Branch (88:10): [True: 30, False: 8]
  ------------------
   89|     38|}
_ZN6google8protobuf11MessageLite14_InternalParseEPKcPNS0_8internal12ParseContextE:
   92|     32|                                        internal::ParseContext* ctx) {
   93|     32|  return internal::TcParser::ParseLoop(this, ptr, ctx, GetTcParseTable());
   94|     32|}
_ZNK6google8protobuf11MessageLite13GetCachedSizeEv:
  143|    210|int MessageLite::GetCachedSize() const { return AccessCachedSize().Get(); }
_ZN6google8protobuf11MessageLite14ParseFromArrayEPKvi:
  408|      6|bool MessageLite::ParseFromArray(const void* data, int size) {
  409|      6|  return ParseFrom<kParse>(as_string_view(data, size));
  410|      6|}
_ZNK6google8protobuf11MessageLite14AppendToStringEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  572|    229|bool MessageLite::AppendToString(std::string* output) const {
  573|    458|  ABSL_DCHECK(IsInitialized())
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    229|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    229|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    458|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    458|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 229, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    229|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 229]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    229|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 229, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    229|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|    229|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  574|    458|      << InitializationErrorMessage("serialize", *this);
  575|    229|  return AppendPartialToString(output);
  576|    229|}
_ZNK6google8protobuf11MessageLite21AppendPartialToStringEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  578|    229|bool MessageLite::AppendPartialToString(std::string* output) const {
  579|    229|  size_t old_size = output->size();
  580|    229|  size_t byte_size = ByteSizeLong();
  581|    229|  if (byte_size > INT_MAX) {
  ------------------
  |  Branch (581:7): [True: 0, False: 229]
  ------------------
  582|      0|    ABSL_LOG(ERROR) << GetTypeName()
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  583|      0|                    << " exceeded maximum protobuf size of 2GB: " << byte_size;
  584|      0|    return false;
  585|      0|  }
  586|       |
  587|    229|  absl::strings_internal::STLStringResizeUninitializedAmortized(
  588|    229|      output, old_size + byte_size);
  589|    229|  uint8_t* start =
  590|    229|      reinterpret_cast<uint8_t*>(io::mutable_string_data(output) + old_size);
  591|    229|  SerializeToArrayImpl(*this, start, byte_size);
  592|    229|  return true;
  593|    229|}
_ZNK6google8protobuf11MessageLite17SerializeAsStringEv:
  624|    229|std::string MessageLite::SerializeAsString() const {
  625|       |  // If the compiler implements the (Named) Return Value Optimization,
  626|       |  // the local variable 'output' will not actually reside on the stack
  627|       |  // of this function, but will be overlaid with the object that the
  628|       |  // caller supplied for the return value to be constructed in.
  629|    229|  std::string output;
  630|    229|  if (!AppendToString(&output)) output.clear();
  ------------------
  |  Branch (630:7): [True: 0, False: 229]
  ------------------
  631|    229|  return output;
  632|    229|}
_ZN6google8protobuf8internal13OnShutdownRunEPFvPKvES3_:
  783|     55|void OnShutdownRun(void (*f)(const void*), const void* arg) {
  784|     55|  auto shutdown_data = ShutdownData::get();
  785|     55|  absl::MutexLock lock(&shutdown_data->mutex);
  786|     55|  shutdown_data->functions.push_back(std::make_pair(f, arg));
  787|     55|}
message_lite.cc:_ZN6google8protobuf12_GLOBAL__N_118CheckFieldPresenceERKNS0_8internal12ParseContextERKNS0_11MessageLiteENS6_10ParseFlagsE:
  184|      6|                               MessageLite::ParseFlags parse_flags) {
  185|      6|  (void)ctx;  // Parameter is used by Google-internal code.
  186|      6|  if (PROTOBUF_PREDICT_FALSE((parse_flags & MessageLite::kMergePartial) != 0)) {
  ------------------
  |  |  365|      6|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 6]
  |  |  |  Branch (365:54): [Folded, False: 6]
  |  |  |  Branch (365:63): [True: 0, False: 6]
  |  |  ------------------
  ------------------
  187|      0|    return true;
  188|      0|  }
  189|      6|  return msg.IsInitializedWithErrors();
  190|      6|}
message_lite.cc:_ZN6google8protobuf12_GLOBAL__N_114as_string_viewEPKvi:
  177|      6|inline absl::string_view as_string_view(const void* data, int size) {
  178|      6|  return absl::string_view(static_cast<const char*>(data), size);
  179|      6|}
_ZN6google8protobuf20SerializeToArrayImplERKNS0_11MessageLiteEPhi:
  462|    229|                                     int size) {
  463|    229|  constexpr bool debug = false;
  464|    229|  if (debug) {
  ------------------
  |  Branch (464:7): [Folded, False: 229]
  ------------------
  465|       |    // Force serialization to a stream with a block size of 1, which forces
  466|       |    // all writes to the stream to cross buffers triggering all fallback paths
  467|       |    // in the unittests when serializing to string / array.
  468|      0|    io::ArrayOutputStream stream(target, size, 1);
  469|      0|    uint8_t* ptr;
  470|      0|    io::EpsCopyOutputStream out(
  471|      0|        &stream, io::CodedOutputStream::IsDefaultSerializationDeterministic(),
  472|      0|        &ptr);
  473|      0|    ptr = msg._InternalSerialize(ptr, &out);
  474|      0|    out.Trim(ptr);
  475|      0|    ABSL_DCHECK(!out.HadError() && stream.ByteCount() == size);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  476|      0|    return target + size;
  477|    229|  } else {
  478|    229|    io::EpsCopyOutputStream out(
  479|    229|        target, size,
  480|    229|        io::CodedOutputStream::IsDefaultSerializationDeterministic());
  481|    229|    uint8_t* res = msg._InternalSerialize(target, &out);
  482|    229|    ABSL_DCHECK(target + size == res);
  ------------------
  |  |   47|    229|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    229|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    458|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    229|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    458|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    458|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 229, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    229|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 229]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    229|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 229, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    458|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    458|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  483|    229|    return res;
  484|    229|  }
  485|    229|}
_ZN6google8protobuf8internal12ShutdownData3getEv:
  765|     55|  static ShutdownData* get() {
  766|     55|    static auto* data = new ShutdownData;
  767|     55|    return data;
  768|     55|  }

_ZNK6google8protobuf8internal14MessageCreator3tagEv:
  131|  38.4k|  Tag tag() const { return tag_; }
_ZNK6google8protobuf8internal14MessageCreator10arena_bitsEv:
  137|  38.9k|  uintptr_t arena_bits() const {
  138|  38.9k|    ABSL_DCHECK_NE(+tag(), +kFunc);
  ------------------
  |  |   76|  38.9k|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|  38.9k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  38.9k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 38.9k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  38.9k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  139|  38.9k|    return arena_bits_;
  140|  38.9k|  }
_ZNK6google8protobuf8internal10CachedSize3SetEi:
  182|  1.04k|  void Set(Scalar desired) const noexcept {
  183|       |    // Avoid writing the value when it is zero. This prevents writing to global
  184|       |    // default instances, which might be in readonly memory.
  185|  1.04k|    if (ABSL_PREDICT_FALSE(desired == 0)) {
  ------------------
  |  |  178|  1.04k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 375, False: 672]
  |  |  |  Branch (178:49): [Folded, False: 1.04k]
  |  |  |  Branch (178:58): [True: 375, False: 672]
  |  |  ------------------
  ------------------
  186|    375|      if (Get() == 0) return;
  ------------------
  |  Branch (186:11): [True: 375, False: 0]
  ------------------
  187|    375|    }
  188|    672|    __atomic_store_n(&atom_, desired, __ATOMIC_RELAXED);
  189|    672|  }
_ZNK6google8protobuf8internal9ClassData3NewEPNS0_5ArenaE:
  410|    949|  MessageLite* New(Arena* arena) const {
  411|    949|    return message_creator.New(prototype, prototype, arena);
  412|    949|  }
_ZNK6google8protobuf11MessageLite15GetTcParseTableEv:
  860|     39|  const internal::TcParseTableBase* GetTcParseTable() const {
  861|     39|    auto* data = GetClassData();
  862|     39|    ABSL_DCHECK(data != nullptr);
  ------------------
  |  |   47|     39|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     39|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     78|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     39|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     78|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     78|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 39, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     39|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 39]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     39|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 39, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     78|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     78|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  863|       |
  864|     39|    auto* tc_table = data->tc_table;
  865|     39|    if (ABSL_PREDICT_FALSE(tc_table == nullptr)) {
  ------------------
  |  |  178|     39|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 39]
  |  |  |  Branch (178:49): [Folded, False: 39]
  |  |  |  Branch (178:58): [True: 0, False: 39]
  |  |  ------------------
  ------------------
  866|      0|      ABSL_DCHECK(!data->is_lite);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  867|      0|      return data->full().descriptor_methods->get_tc_table(*this);
  868|      0|    }
  869|     39|    return tc_table;
  870|     39|  }
_ZNK6google8protobuf11MessageLite16AccessCachedSizeEv:
  918|    210|  const internal::CachedSize& AccessCachedSize() const {
  919|    210|    return *reinterpret_cast<const internal::CachedSize*>(
  920|    210|        reinterpret_cast<const char*>(this) +
  921|    210|        GetClassData()->cached_size_offset);
  922|    210|  }
_ZNK6google8protobuf11MessageLite23IsInitializedWithErrorsEv:
  966|     30|  bool IsInitializedWithErrors() const {
  967|     30|    if (IsInitialized()) return true;
  ------------------
  |  Branch (967:9): [True: 30, False: 0]
  ------------------
  968|      0|    LogInitializationErrorMessage();
  969|      0|    return false;
  970|     30|  }
_ZN6google8protobuf8internal12ToCachedSizeEm:
  281|  1.04k|inline int ToCachedSize(size_t size) { return static_cast<int>(size); }
_ZN6google8protobuf8internal11FromIntSizeEi:
  288|     17|inline size_t FromIntSize(int size) {
  289|       |  // Convert to unsigned before widening so sign extension is not necessary.
  290|     17|  return static_cast<unsigned int>(size);
  291|     17|}
_ZNK6google8protobuf8internal14MessageCreator3NewINS0_11MessageLiteEEEPT_PKS5_S8_PNS0_5ArenaE:
 1295|  38.4k|    const MessageLite* prototype_for_copy, Arena* arena) const {
 1296|  38.4k|  return PlacementNew(prototype_for_func, prototype_for_copy,
 1297|  38.4k|                      arena != nullptr
  ------------------
  |  Branch (1297:23): [True: 432, False: 38.0k]
  ------------------
 1298|  38.4k|                          ? arena->AllocateAligned(allocation_size_)
 1299|  38.4k|                          : ::operator new(allocation_size_),
 1300|  38.4k|                      arena);
 1301|  38.4k|}
_ZNK6google8protobuf8internal14MessageCreator12PlacementNewINS0_11MessageLiteEEEPT_PKS5_S8_PvPNS0_5ArenaE:
 1193|  38.4k|    const MessageLite* prototype_for_copy, void* mem, Arena* arena) const {
 1194|  38.4k|  ABSL_DCHECK_EQ(reinterpret_cast<uintptr_t>(mem) % alignment_, 0u);
  ------------------
  |  |   74|  38.4k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|  38.4k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  38.4k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 38.4k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  38.4k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1195|  38.4k|  const Tag as_tag = tag();
 1196|  38.4k|  static_assert(kFunc < 0 && !(kZeroInit < 0) && !(kMemcpy < 0),
 1197|  38.4k|                "Only kFunc must be the only negative value");
 1198|  38.4k|  if (ABSL_PREDICT_FALSE(static_cast<int8_t>(as_tag) < 0)) {
  ------------------
  |  |  178|  38.4k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 38.4k]
  |  |  |  Branch (178:49): [Folded, False: 38.4k]
  |  |  |  Branch (178:58): [True: 0, False: 38.4k]
  |  |  ------------------
  ------------------
 1199|      0|    PROTOBUF_DEBUG_COUNTER("MessageCreator.Func").Inc();
  ------------------
  |  |  983|      0|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1200|      0|    return static_cast<MessageLite*>(func_(prototype_for_func, mem, arena));
 1201|      0|  }
 1202|       |
 1203|  38.4k|  char* dst = static_cast<char*>(mem);
 1204|  38.4k|  const size_t size = allocation_size_;
 1205|  38.4k|  const char* src = reinterpret_cast<const char*>(prototype_for_copy);
 1206|       |
 1207|       |  // These are a bit more efficient than calling normal memset/memcpy because:
 1208|       |  //  - We know the minimum size is 16. We have a fallback for when it is not.
 1209|       |  //  - We can "underflow" the buffer because those are the MessageLite bytes
 1210|       |  //    we will set later.
 1211|  38.4k|#ifndef PROTO2_OPENSOURCE
 1212|       |  // This manual handling shows a 1.85% improvement in the parsing
 1213|       |  // microbenchmark.
 1214|       |  // TODO: Verify this is still the case.
 1215|  38.4k|#endif  // !PROTO2_OPENSOUCE
 1216|  38.4k|  if (as_tag == kZeroInit) {
  ------------------
  |  Branch (1216:7): [True: 11.5k, False: 26.9k]
  ------------------
 1217|       |    // Make sure the input is really all zeros.
 1218|  11.5k|    ABSL_DCHECK(std::all_of(src + sizeof(MessageLite), src + size,
  ------------------
  |  |   47|  11.5k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  11.5k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  23.0k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  11.5k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  23.0k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  23.0k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 11.5k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  11.5k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 11.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  11.5k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 11.5k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  23.0k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  23.0k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1219|  11.5k|                            [](auto c) { return c == 0; }));
 1220|       |
 1221|  11.5k|    if (sizeof(MessageLite) != 16) {
  ------------------
  |  Branch (1221:9): [Folded, False: 11.5k]
  ------------------
 1222|      0|      memset(dst, 0, size);
 1223|  11.5k|    } else if (size <= 32) {
  ------------------
  |  Branch (1223:16): [True: 4.45k, False: 7.05k]
  ------------------
 1224|  4.45k|      memset(dst + size - 16, 0, 16);
 1225|  7.05k|    } else if (size <= 64) {
  ------------------
  |  Branch (1225:16): [True: 7.01k, False: 42]
  ------------------
 1226|  7.01k|      memset(dst + 16, 0, 16);
 1227|  7.01k|      memset(dst + size - 32, 0, 32);
 1228|  7.01k|    } else {
 1229|    110|      for (size_t offset = 16; offset + 64 < size; offset += 64) {
  ------------------
  |  Branch (1229:32): [True: 68, False: 42]
  ------------------
 1230|     68|        absl::PrefetchToLocalCacheForWrite(dst + offset + 64);
 1231|     68|        memset(dst + offset, 0, 64);
 1232|     68|      }
 1233|     42|      memset(dst + size - 64, 0, 64);
 1234|     42|    }
 1235|  26.9k|  } else {
 1236|  26.9k|    ABSL_DCHECK_EQ(+as_tag, +kMemcpy);
  ------------------
  |  |   74|  26.9k|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|  26.9k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  26.9k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 26.9k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  26.9k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1237|       |
 1238|  26.9k|    if (sizeof(MessageLite) != 16) {
  ------------------
  |  Branch (1238:9): [Folded, False: 26.9k]
  ------------------
 1239|      0|      memcpy(dst, src, size);
 1240|  26.9k|    } else if (size <= 32) {
  ------------------
  |  Branch (1240:16): [True: 0, False: 26.9k]
  ------------------
 1241|      0|      memcpy(dst + size - 16, src + size - 16, 16);
 1242|  26.9k|    } else if (size <= 64) {
  ------------------
  |  Branch (1242:16): [True: 7.69k, False: 19.2k]
  ------------------
 1243|  7.69k|      memcpy(dst + 16, src + 16, 16);
 1244|  7.69k|      memcpy(dst + size - 32, src + size - 32, 32);
 1245|  19.2k|    } else {
 1246|  32.1k|      for (size_t offset = 16; offset + 64 < size; offset += 64) {
  ------------------
  |  Branch (1246:32): [True: 12.8k, False: 19.2k]
  ------------------
 1247|  12.8k|        absl::PrefetchToLocalCache(src + offset + 64);
 1248|  12.8k|        absl::PrefetchToLocalCacheForWrite(dst + offset + 64);
 1249|  12.8k|        memcpy(dst + offset, src + offset, 64);
 1250|  12.8k|      }
 1251|  19.2k|      memcpy(dst + size - 64, src + size - 64, 64);
 1252|  19.2k|    }
 1253|  26.9k|  }
 1254|       |
 1255|  38.4k|  if (arena_bits() != 0) {
  ------------------
  |  Branch (1255:7): [True: 32.8k, False: 5.66k]
  ------------------
 1256|  32.8k|    if (as_tag == kZeroInit) {
  ------------------
  |  Branch (1256:9): [True: 7.02k, False: 25.7k]
  ------------------
 1257|  7.02k|      PROTOBUF_DEBUG_COUNTER("MessageCreator.ZeroArena").Inc();
  ------------------
  |  |  983|  7.02k|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1258|  25.7k|    } else {
 1259|  25.7k|      PROTOBUF_DEBUG_COUNTER("MessageCreator.McpyArena").Inc();
  ------------------
  |  |  983|  25.7k|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1260|  25.7k|    }
 1261|  32.8k|  } else {
 1262|  5.66k|    if (as_tag == kZeroInit) {
  ------------------
  |  Branch (1262:9): [True: 4.48k, False: 1.18k]
  ------------------
 1263|  4.48k|      PROTOBUF_DEBUG_COUNTER("MessageCreator.Zero").Inc();
  ------------------
  |  |  983|  4.48k|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1264|  4.48k|    } else {
 1265|  1.18k|      PROTOBUF_DEBUG_COUNTER("MessageCreator.Mcpy").Inc();
  ------------------
  |  |  983|  1.18k|  ::google::protobuf::internal::NoopDebugCounter {}
  ------------------
 1266|  1.18k|    }
 1267|  5.66k|  }
 1268|       |
 1269|  38.4k|  if (internal::PerformDebugChecks() || arena != nullptr) {
  ------------------
  |  Branch (1269:7): [Folded, False: 38.4k]
  |  Branch (1269:41): [True: 432, False: 38.0k]
  ------------------
 1270|    432|    if (uintptr_t offsets = arena_bits()) {
  ------------------
  |  Branch (1270:19): [True: 82, False: 350]
  ------------------
 1271|    486|      do {
 1272|    486|        const size_t offset = absl::countr_zero(offsets) * sizeof(Arena*);
 1273|    486|        ABSL_DCHECK_LE(offset + sizeof(Arena*), size);
  ------------------
  |  |   78|    486|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|    486|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    486|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 486]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    486|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1274|       |        // Verify we are overwriting a null pointer. If we are not, there is a
 1275|       |        // bug somewhere.
 1276|    486|        ABSL_DCHECK_EQ(*reinterpret_cast<Arena**>(dst + offset), nullptr);
  ------------------
  |  |   74|    486|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    486|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    486|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 486]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    486|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1277|    486|        memcpy(dst + offset, &arena, sizeof(arena));
 1278|    486|        offsets &= offsets - 1;
 1279|    486|      } while (offsets != 0);
  ------------------
  |  Branch (1279:16): [True: 404, False: 82]
  ------------------
 1280|     82|    }
 1281|    432|  }
 1282|       |
 1283|       |  // The second memcpy overwrites part of the first, but the compiler should
 1284|       |  // avoid the double-write. It's easier than trying to avoid the overlap.
 1285|  38.4k|  memcpy(dst, static_cast<const void*>(prototype_for_copy),
 1286|  38.4k|         sizeof(MessageLite));
 1287|  38.4k|  memcpy(dst + PROTOBUF_FIELD_OFFSET(MessageLite, _internal_metadata_), &arena,
  ------------------
  |  |  303|  38.4k|  _Pragma("clang diagnostic push")                           \
  |  |  304|  38.4k|  _Pragma("clang diagnostic ignored \"-Winvalid-offsetof\"") \
  |  |  305|  38.4k|  __builtin_offsetof(TYPE, FIELD)                            \
  |  |  306|  38.4k|  _Pragma("clang diagnostic pop")
  ------------------
 1288|  38.4k|         sizeof(arena));
 1289|  38.4k|  return Launder(reinterpret_cast<MessageLite*>(mem));
 1290|  38.4k|}
_ZN6google8protobuf8internal16OnShutdownDeleteINS0_25EncodedDescriptorDatabaseEEEPT_S5_:
 1180|      2|T* OnShutdownDelete(T* p) {
 1181|      2|  OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p);
 1182|      2|  return p;
 1183|      2|}
_ZN6google8protobuf8internal16OnShutdownDeleteINS0_18FeatureSetDefaultsEEEPT_S5_:
 1180|      1|T* OnShutdownDelete(T* p) {
 1181|      1|  OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p);
 1182|      1|  return p;
 1183|      1|}
_ZN6google8protobuf8internal16OnShutdownDeleteINS0_14DescriptorPoolEEEPT_S5_:
 1180|      2|T* OnShutdownDelete(T* p) {
 1181|      2|  OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p);
 1182|      2|  return p;
 1183|      2|}
extension_set.cc:_ZN6google8protobuf8internal16OnShutdownDeleteIN4absl12lts_2024011613flat_hash_setINS1_13ExtensionInfoENS1_12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorIS6_EEEEEEPT_SF_:
 1180|      1|T* OnShutdownDelete(T* p) {
 1181|      1|  OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p);
 1182|      1|  return p;
 1183|      1|}
_ZN6google8protobuf8internal16OnShutdownDeleteINS0_10ReflectionEEEPT_S5_:
 1180|     45|T* OnShutdownDelete(T* p) {
 1181|     45|  OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p);
 1182|     45|  return p;
 1183|     45|}
message.cc:_ZN6google8protobuf8internal16OnShutdownDeleteINS0_12_GLOBAL__N_123GeneratedMessageFactoryEEEPT_S6_:
 1180|      2|T* OnShutdownDelete(T* p) {
 1181|      2|  OnShutdownRun([](const void* pp) { delete static_cast<const T*>(pp); }, p);
 1182|      2|  return p;
 1183|      2|}
_ZN6google8protobuf11MessageLite9ParseFromILNS1_10ParseFlagsE1ENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEbRKT0_:
 1144|      6|bool MessageLite::ParseFrom(const T& input) {
 1145|      6|  if (flags & kParse) Clear();
  ------------------
  |  Branch (1145:7): [True: 6, Folded]
  ------------------
 1146|      6|  constexpr bool alias = (flags & kMergeWithAliasing) != 0;
 1147|      6|  const internal::TcParseTableBase* tc_table;
 1148|      6|  PROTOBUF_ALWAYS_INLINE_CALL tc_table = GetTcParseTable();
  ------------------
  |  |  187|      6|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1149|      6|  return internal::MergeFromImpl<alias>(input, this, tc_table, flags);
 1150|      6|}

_ZN6google8protobuf8internal18EpsCopyInputStream12DoneFallbackEii:
  149|     15|                                                              int depth) {
  150|       |  // Did we exceeded the limit (parse error).
  151|     15|  if (PROTOBUF_PREDICT_FALSE(overrun > limit_)) return {nullptr, true};
  ------------------
  |  |  365|     15|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 15]
  |  |  |  Branch (365:54): [Folded, False: 15]
  |  |  |  Branch (365:63): [True: 0, False: 15]
  |  |  ------------------
  ------------------
  152|     15|  ABSL_DCHECK(overrun != limit_);  // Guaranteed by caller.
  ------------------
  |  |   47|     15|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     15|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     45|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     15|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     30|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     30|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 15, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     15|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 15]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     15|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 15, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     45|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     45|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|     15|  ABSL_DCHECK(overrun < limit_);   // Follows from above
  ------------------
  |  |   47|     15|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     15|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     45|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     15|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     30|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     30|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 15, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     15|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 15]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     15|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 15, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     45|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     45|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  154|       |  // TODO Instead of this dcheck we could just assign, and remove
  155|       |  // updating the limit_end from PopLimit, ie.
  156|       |  // limit_end_ = buffer_end_ + (std::min)(0, limit_);
  157|       |  // if (ptr < limit_end_) return {ptr, false};
  158|     15|  ABSL_DCHECK(limit_end_ == buffer_end_ + (std::min)(0, limit_));
  ------------------
  |  |   47|     15|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     15|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     45|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     15|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     30|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     30|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 15, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     15|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 15]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     15|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 15, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     45|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     45|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  159|       |  // At this point we know the following assertion holds.
  160|     15|  ABSL_DCHECK_GT(limit_, 0);
  ------------------
  |  |   84|     15|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   96|     15|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     15|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 15]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     15|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  161|     15|  ABSL_DCHECK(limit_end_ == buffer_end_);  // because limit_ > 0
  ------------------
  |  |   47|     15|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     15|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     30|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     15|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     30|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     30|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 15, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     15|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 15]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     15|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 15, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     30|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     30|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  162|     15|  const char* p;
  163|     15|  do {
  164|       |    // We are past the end of buffer_end_, in the slop region.
  165|     15|    ABSL_DCHECK_GE(overrun, 0);
  ------------------
  |  |   82|     15|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     15|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     15|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 15]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     15|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  166|     15|    p = NextBuffer(overrun, depth);
  167|     15|    if (p == nullptr) {
  ------------------
  |  Branch (167:9): [True: 0, False: 15]
  ------------------
  168|       |      // We are at the end of the stream
  169|      0|      if (PROTOBUF_PREDICT_FALSE(overrun != 0)) return {nullptr, true};
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  170|      0|      ABSL_DCHECK_GT(limit_, 0);
  ------------------
  |  |   84|      0|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   96|      0|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      0|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 0]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      0|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  171|      0|      limit_end_ = buffer_end_;
  172|       |      // Distinguish ending on a pushed limit or ending on end-of-stream.
  173|      0|      SetEndOfStream();
  174|      0|      return {buffer_end_, true};
  175|      0|    }
  176|     15|    limit_ -= buffer_end_ - p;  // Adjust limit_ relative to new anchor
  177|     15|    p += overrun;
  178|     15|    overrun = p - buffer_end_;
  179|     15|  } while (overrun >= 0);
  ------------------
  |  Branch (179:12): [True: 0, False: 15]
  ------------------
  180|     15|  limit_end_ = buffer_end_ + std::min(0, limit_);
  181|     15|  return {p, false};
  182|     15|}
_ZN6google8protobuf8internal12ParseContext28ReadSizeAndPushLimitAndDepthEPKcPNS1_18EpsCopyInputStream10LimitTokenE:
  299|      8|                                                       LimitToken* old_limit) {
  300|      8|  return ReadSizeAndPushLimitAndDepthInlined(ptr, old_limit);
  301|      8|}
_ZN6google8protobuf8internal12ParseContext12ParseMessageEPNS0_11MessageLiteEPKc:
  303|      8|const char* ParseContext::ParseMessage(MessageLite* msg, const char* ptr) {
  304|      8|  LimitToken old;
  305|      8|  ptr = ReadSizeAndPushLimitAndDepth(ptr, &old);
  306|      8|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (306:7): [True: 0, False: 8]
  ------------------
  307|      8|  auto old_depth = depth_;
  308|      8|  ptr = msg->_InternalParse(ptr, this);
  309|      8|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|      8|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|      8|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      8|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 8]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      8|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (309:7): [True: 8, False: 0]
  ------------------
  310|      8|  depth_++;
  311|      8|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (311:7): [True: 0, False: 8]
  ------------------
  312|      8|  return ptr;
  313|      8|}
_ZN6google8protobuf8internal16ReadSizeFallbackEPKcj:
  378|     76|std::pair<const char*, int32_t> ReadSizeFallback(const char* p, uint32_t res) {
  379|     76|  for (std::uint32_t i = 1; i < 4; i++) {
  ------------------
  |  Branch (379:29): [True: 76, False: 0]
  ------------------
  380|     76|    uint32_t byte = static_cast<uint8_t>(p[i]);
  381|     76|    res += (byte - 1) << (7 * i);
  382|     76|    if (PROTOBUF_PREDICT_TRUE(byte < 128)) {
  ------------------
  |  |  364|     76|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 76, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 76]
  |  |  |  Branch (364:62): [True: 76, False: 0]
  |  |  ------------------
  ------------------
  383|     76|      return {p + i + 1, res};
  384|     76|    }
  385|     76|  }
  386|      0|  std::uint32_t byte = static_cast<uint8_t>(p[4]);
  387|      0|  if (PROTOBUF_PREDICT_FALSE(byte >= 8)) return {nullptr, 0};  // size >= 2gb
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  388|      0|  res += (byte - 1) << 28;
  389|       |  // Protect against sign integer overflow in PushLimit. Limits are relative
  390|       |  // to buffer ends and ptr could potential be kSlopBytes beyond a buffer end.
  391|       |  // To protect against overflow we reject limits absurdly close to INT_MAX.
  392|      0|  if (PROTOBUF_PREDICT_FALSE(res > INT_MAX - ParseContext::kSlopBytes)) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  393|      0|    return {nullptr, 0};
  394|      0|  }
  395|      0|  return {p + 5, res};
  396|      0|}
_ZN6google8protobuf8internal24InlineGreedyStringParserEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKcPNS1_12ParseContextE:
  419|      8|                                     ParseContext* ctx) {
  420|      8|  int size = ReadSize(&ptr);
  421|      8|  if (!ptr) return nullptr;
  ------------------
  |  Branch (421:7): [True: 0, False: 8]
  ------------------
  422|      8|  return ctx->ReadString(ptr, size, s);
  423|      8|}
_ZN6google8protobuf8internal18EpsCopyInputStream10NextBufferEii:
   79|     15|const char* EpsCopyInputStream::NextBuffer(int overrun, int depth) {
   80|     15|  if (next_chunk_ == nullptr) return nullptr;  // We've reached end of stream.
  ------------------
  |  Branch (80:7): [True: 0, False: 15]
  ------------------
   81|     15|  if (next_chunk_ != patch_buffer_) {
  ------------------
  |  Branch (81:7): [True: 0, False: 15]
  ------------------
   82|      0|    ABSL_DCHECK(size_ > kSlopBytes);
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   83|       |    // The chunk is large enough to be used directly
   84|      0|    buffer_end_ = next_chunk_ + size_ - kSlopBytes;
   85|      0|    auto res = next_chunk_;
   86|      0|    next_chunk_ = patch_buffer_;
   87|      0|    if (aliasing_ == kOnPatch) aliasing_ = kNoDelta;
  ------------------
  |  Branch (87:9): [True: 0, False: 0]
  ------------------
   88|      0|    return res;
   89|      0|  }
   90|       |  // Move the slop bytes of previous buffer to start of the patch buffer.
   91|       |  // Note we must use memmove because the previous buffer could be part of
   92|       |  // patch_buffer_.
   93|     15|  std::memmove(patch_buffer_, buffer_end_, kSlopBytes);
   94|     15|  if (overall_limit_ > 0 &&
  ------------------
  |  Branch (94:7): [True: 0, False: 15]
  ------------------
   95|      0|      (depth < 0 || !ParseEndsInSlopRegion(patch_buffer_, overrun, depth))) {
  ------------------
  |  Branch (95:8): [True: 0, False: 0]
  |  Branch (95:21): [True: 0, False: 0]
  ------------------
   96|      0|    const void* data;
   97|       |    // ZeroCopyInputStream indicates Next may return 0 size buffers. Hence
   98|       |    // we loop.
   99|      0|    while (StreamNext(&data)) {
  ------------------
  |  Branch (99:12): [True: 0, False: 0]
  ------------------
  100|      0|      if (size_ > kSlopBytes) {
  ------------------
  |  Branch (100:11): [True: 0, False: 0]
  ------------------
  101|       |        // We got a large chunk
  102|      0|        std::memcpy(patch_buffer_ + kSlopBytes, data, kSlopBytes);
  103|      0|        next_chunk_ = static_cast<const char*>(data);
  104|      0|        buffer_end_ = patch_buffer_ + kSlopBytes;
  105|      0|        if (aliasing_ >= kNoDelta) aliasing_ = kOnPatch;
  ------------------
  |  Branch (105:13): [True: 0, False: 0]
  ------------------
  106|      0|        return patch_buffer_;
  107|      0|      } else if (size_ > 0) {
  ------------------
  |  Branch (107:18): [True: 0, False: 0]
  ------------------
  108|      0|        std::memcpy(patch_buffer_ + kSlopBytes, data, size_);
  109|      0|        next_chunk_ = patch_buffer_;
  110|      0|        buffer_end_ = patch_buffer_ + size_;
  111|      0|        if (aliasing_ >= kNoDelta) aliasing_ = kOnPatch;
  ------------------
  |  Branch (111:13): [True: 0, False: 0]
  ------------------
  112|      0|        return patch_buffer_;
  113|      0|      }
  114|      0|      ABSL_DCHECK(size_ == 0) << size_;
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      0|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      0|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  115|      0|    }
  116|      0|    overall_limit_ = 0;  // Next failed, no more needs for next
  117|      0|  }
  118|       |  // End of stream or array
  119|     15|  if (aliasing_ == kNoDelta) {
  ------------------
  |  Branch (119:7): [True: 0, False: 15]
  ------------------
  120|       |    // If there is no more block and aliasing is true, the previous block
  121|       |    // is still valid and we can alias. We have users relying on string_view's
  122|       |    // obtained from protos to outlive the proto, when the parse was from an
  123|       |    // array. This guarantees string_view's are always aliased if parsed from
  124|       |    // an array.
  125|      0|    aliasing_ = reinterpret_cast<std::uintptr_t>(buffer_end_) -
  126|      0|                reinterpret_cast<std::uintptr_t>(patch_buffer_);
  127|      0|  }
  128|     15|  next_chunk_ = nullptr;
  129|     15|  buffer_end_ = patch_buffer_ + kSlopBytes;
  130|     15|  size_ = 0;
  131|     15|  return patch_buffer_;
  132|     15|}

_ZN6google8protobuf8internal18EpsCopyInputStreamC2Eb:
  100|     30|      : aliasing_(enable_aliasing ? kOnPatch : kNoAliasing) {}
  ------------------
  |  Branch (100:19): [True: 0, False: 30]
  ------------------
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenC2Ev:
  119|    957|    LimitToken() { PROTOBUF_POISON_MEMORY_REGION(&token_, sizeof(token_)); }
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenC2Ei:
  121|    957|    explicit LimitToken(int token) : token_(token) {
  122|    957|      PROTOBUF_UNPOISON_MEMORY_REGION(&token_, sizeof(token_));
  123|    957|    }
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenC2EOS3_:
  128|    957|    LimitToken(LimitToken&& other) { *this = std::move(other); }
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenaSEOS3_:
  130|  1.91k|    LimitToken& operator=(LimitToken&& other) {
  131|  1.91k|      PROTOBUF_UNPOISON_MEMORY_REGION(&token_, sizeof(token_));
  132|  1.91k|      token_ = other.token_;
  133|  1.91k|      PROTOBUF_POISON_MEMORY_REGION(&other.token_, sizeof(token_));
  134|  1.91k|      return *this;
  135|  1.91k|    }
_ZN6google8protobuf8internal18EpsCopyInputStream10LimitTokenD2Ev:
  137|  2.87k|    ~LimitToken() { PROTOBUF_UNPOISON_MEMORY_REGION(&token_, sizeof(token_)); }
_ZNO6google8protobuf8internal18EpsCopyInputStream10LimitToken5tokenEv:
  139|    957|    int token() && {
  140|    957|      int t = token_;
  141|    957|      PROTOBUF_POISON_MEMORY_REGION(&token_, sizeof(token_));
  142|    957|      return t;
  143|    957|    }
_ZN6google8protobuf8internal18EpsCopyInputStream9PushLimitEPKci:
  150|    957|  PROTOBUF_NODISCARD LimitToken PushLimit(const char* ptr, int limit) {
  151|    957|    ABSL_DCHECK(limit >= 0 && limit <= INT_MAX - kSlopBytes);
  ------------------
  |  |   47|    957|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    957|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.91k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    957|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.91k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.91k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 957, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    957|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 957]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    957|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 957, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.91k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.91k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  152|       |    // This add is safe due to the invariant above, because
  153|       |    // ptr - buffer_end_ <= kSlopBytes.
  154|    957|    limit += static_cast<int>(ptr - buffer_end_);
  155|    957|    limit_end_ = buffer_end_ + (std::min)(0, limit);
  156|    957|    auto old_limit = limit_;
  157|    957|    limit_ = limit;
  158|    957|    return LimitToken(old_limit - limit);
  159|    957|  }
_ZN6google8protobuf8internal18EpsCopyInputStream8PopLimitENS2_10LimitTokenE:
  161|    957|  PROTOBUF_NODISCARD bool PopLimit(LimitToken delta) {
  162|       |    // We must update the limit first before the early return. Otherwise, we can
  163|       |    // end up with an invalid limit and it can lead to integer overflows.
  164|    957|    limit_ = limit_ + std::move(delta).token();
  165|    957|    if (PROTOBUF_PREDICT_FALSE(!EndedAtLimit())) return false;
  ------------------
  |  |  365|    957|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 957]
  |  |  |  Branch (365:54): [Folded, False: 957]
  |  |  |  Branch (365:63): [True: 0, False: 957]
  |  |  ------------------
  ------------------
  166|       |    // TODO We could remove this line and hoist the code to
  167|       |    // DoneFallback. Study the perf/bin-size effects.
  168|    957|    limit_end_ = buffer_end_ + (std::min)(0, limit_);
  169|    957|    return true;
  170|    957|  }
_ZN6google8protobuf8internal18EpsCopyInputStream10ReadStringEPKciPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
  179|  1.13k|                                            std::string* s) {
  180|  1.13k|    if (size <= buffer_end_ + kSlopBytes - ptr) {
  ------------------
  |  Branch (180:9): [True: 1.13k, False: 0]
  ------------------
  181|       |      // Fundamentally we just want to do assign to the string.
  182|       |      // However micro-benchmarks regress on string reading cases. So we copy
  183|       |      // the same logic from the old CodedInputStream ReadString. Note: as of
  184|       |      // Apr 2021, this is still a significant win over `assign()`.
  185|  1.13k|      absl::strings_internal::STLStringResizeUninitialized(s, size);
  186|  1.13k|      char* z = &(*s)[0];
  187|  1.13k|      memcpy(z, ptr, size);
  188|  1.13k|      return ptr + size;
  189|  1.13k|    }
  190|      0|    return ReadStringFallback(ptr, size, s);
  191|  1.13k|  }
_ZNK6google8protobuf8internal18EpsCopyInputStream7LastTagEv:
  232|  1.02k|  uint32_t LastTag() const { return last_tag_minus_1_ + 1; }
_ZNK6google8protobuf8internal18EpsCopyInputStream12EndedAtLimitEv:
  238|    987|  bool EndedAtLimit() const { return last_tag_minus_1_ == 0; }
_ZN6google8protobuf8internal18EpsCopyInputStream13DataAvailableEPKc:
  256|  4.01k|  bool DataAvailable(const char* ptr) { return ptr < limit_end_; }
_ZN6google8protobuf8internal18EpsCopyInputStream13DoneWithCheckEPPKci:
  262|  2.01k|  bool DoneWithCheck(const char** ptr, int d) {
  263|  2.01k|    ABSL_DCHECK(*ptr);
  ------------------
  |  |   47|  2.01k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  2.01k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  4.02k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  2.01k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  4.02k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  4.02k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2.01k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  2.01k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2.01k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  2.01k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2.01k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  4.02k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  4.02k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  264|  2.01k|    if (PROTOBUF_PREDICT_TRUE(*ptr < limit_end_)) return false;
  ------------------
  |  |  364|  2.01k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 1.00k, False: 1.00k]
  |  |  |  Branch (364:53): [Folded, False: 2.01k]
  |  |  |  Branch (364:62): [True: 1.00k, False: 1.00k]
  |  |  ------------------
  ------------------
  265|  1.00k|    int overrun = static_cast<int>(*ptr - buffer_end_);
  266|  1.00k|    ABSL_DCHECK_LE(overrun, kSlopBytes);  // Guaranteed by parse loop.
  ------------------
  |  |   78|  1.00k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|  1.00k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.00k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.00k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.00k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  267|  1.00k|    if (overrun ==
  ------------------
  |  Branch (267:9): [True: 987, False: 15]
  ------------------
  268|  1.00k|        limit_) {  //  No need to flip buffers if we ended on a limit.
  269|       |      // If we actually overrun the buffer and next_chunk_ is null, it means
  270|       |      // the stream ended and we passed the stream end.
  271|    987|      if (overrun > 0 && next_chunk_ == nullptr) *ptr = nullptr;
  ------------------
  |  Branch (271:11): [True: 15, False: 972]
  |  Branch (271:26): [True: 0, False: 15]
  ------------------
  272|    987|      return true;
  273|    987|    }
  274|     15|    auto res = DoneFallback(overrun, d);
  275|     15|    *ptr = res.first;
  276|     15|    return res.second;
  277|  1.00k|  }
_ZN6google8protobuf8internal18EpsCopyInputStream8InitFromENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
  279|     30|  const char* InitFrom(absl::string_view flat) {
  280|     30|    overall_limit_ = 0;
  281|     30|    if (flat.size() > kSlopBytes) {
  ------------------
  |  Branch (281:9): [True: 22, False: 8]
  ------------------
  282|     22|      limit_ = kSlopBytes;
  283|     22|      limit_end_ = buffer_end_ = flat.data() + flat.size() - kSlopBytes;
  284|     22|      next_chunk_ = patch_buffer_;
  285|     22|      if (aliasing_ == kOnPatch) aliasing_ = kNoDelta;
  ------------------
  |  Branch (285:11): [True: 0, False: 22]
  ------------------
  286|     22|      return flat.data();
  287|     22|    } else {
  288|      8|      if (!flat.empty()) {
  ------------------
  |  Branch (288:11): [True: 8, False: 0]
  ------------------
  289|      8|        std::memcpy(patch_buffer_, flat.data(), flat.size());
  290|      8|      }
  291|      8|      limit_ = 0;
  292|      8|      limit_end_ = buffer_end_ = patch_buffer_ + flat.size();
  293|      8|      next_chunk_ = nullptr;
  294|      8|      if (aliasing_ == kOnPatch) {
  ------------------
  |  Branch (294:11): [True: 0, False: 8]
  ------------------
  295|      0|        aliasing_ = reinterpret_cast<std::uintptr_t>(flat.data()) -
  296|      0|                    reinterpret_cast<std::uintptr_t>(patch_buffer_);
  297|      0|      }
  298|      8|      return patch_buffer_;
  299|      8|    }
  300|     30|  }
_ZN6google8protobuf8internal12ParseContext4DoneEPPKc:
  487|  2.01k|  bool Done(const char** ptr) { return DoneWithCheck(ptr, group_depth_); }
_ZNK6google8protobuf8internal12ParseContext4dataEv:
  492|      8|  const Data& data() const { return data_; }
_ZN6google8protobuf8internal12EndianHelperILi1EE4LoadEPKv:
  578|  2.08k|  static uint8_t Load(const void* p) { return *static_cast<const uint8_t*>(p); }
_ZN6google8protobuf8internal12EndianHelperILi2EE4LoadEPKv:
  583|  3.41k|  static uint16_t Load(const void* p) {
  584|  3.41k|    uint16_t tmp;
  585|  3.41k|    std::memcpy(&tmp, p, 2);
  586|  3.41k|    return little_endian::ToHost(tmp);
  587|  3.41k|  }
_ZN6google8protobuf8internal10RotateLeftImEET_S3_i:
  930|    102|    T x, int s) noexcept {
  931|    102|  return static_cast<T>(x << (s & (std::numeric_limits<T>::digits - 1))) |
  932|    102|         static_cast<T>(x >> ((-s) & (std::numeric_limits<T>::digits - 1)));
  933|    102|}
_ZN6google8protobuf8internal7ReadTagEPKcPjj:
  906|     57|                           uint32_t /*max_tag*/ = 0) {
  907|     57|  uint32_t res = static_cast<uint8_t>(p[0]);
  908|     57|  if (res < 128) {
  ------------------
  |  Branch (908:7): [True: 0, False: 57]
  ------------------
  909|      0|    *out = res;
  910|      0|    return p + 1;
  911|      0|  }
  912|     57|  uint32_t second = static_cast<uint8_t>(p[1]);
  913|     57|  res += (second - 1) << 7;
  914|     57|  if (second < 128) {
  ------------------
  |  Branch (914:7): [True: 57, False: 0]
  ------------------
  915|     57|    *out = res;
  916|     57|    return p + 2;
  917|     57|  }
  918|      0|  auto tmp = ReadTagFallback(p, res);
  919|      0|  *out = tmp.second;
  920|      0|  return tmp.first;
  921|     57|}
_ZN6google8protobuf8internal26RotRight7AndReplaceLowByteEmRKc:
  936|    102|RotRight7AndReplaceLowByte(uint64_t res, const char& byte) {
  937|       |  // TODO: remove the inline assembly
  938|    102|#if defined(__x86_64__) && defined(__GNUC__)
  939|       |  // This will only use one register for `res`.
  940|       |  // `byte` comes as a reference to allow the compiler to generate code like:
  941|       |  //
  942|       |  //   rorq    $7, %rcx
  943|       |  //   movb    1(%rax), %cl
  944|       |  //
  945|       |  // which avoids loading the incoming bytes into a separate register first.
  946|    102|  asm("ror $7,%0\n\t"
  947|    102|      "movb %1,%b0"
  948|    102|      : "+r"(res)
  949|    102|      : "m"(byte));
  950|       |#else
  951|       |  res = RotateLeft(res, -7);
  952|       |  res = res & ~0xFF;
  953|       |  res |= 0xFF & byte;
  954|       |#endif
  955|    102|  return res;
  956|    102|}
_ZN6google8protobuf8internal14ReadTagInlinedEPKcPj:
  959|    103|                                                         uint32_t* out) {
  960|    103|  uint64_t res = 0xFF & ptr[0];
  961|    103|  if (PROTOBUF_PREDICT_FALSE(res >= 128)) {
  ------------------
  |  |  365|    103|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 102, False: 1]
  |  |  |  Branch (365:54): [Folded, False: 103]
  |  |  |  Branch (365:63): [True: 102, False: 1]
  |  |  ------------------
  ------------------
  962|    102|    res = RotRight7AndReplaceLowByte(res, ptr[1]);
  963|    102|    if (PROTOBUF_PREDICT_FALSE(res & 0x80)) {
  ------------------
  |  |  365|    102|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 102]
  |  |  |  Branch (365:54): [Folded, False: 102]
  |  |  |  Branch (365:63): [True: 0, False: 102]
  |  |  ------------------
  ------------------
  964|      0|      res = RotRight7AndReplaceLowByte(res, ptr[2]);
  965|      0|      if (PROTOBUF_PREDICT_FALSE(res & 0x80)) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  966|      0|        res = RotRight7AndReplaceLowByte(res, ptr[3]);
  967|      0|        if (PROTOBUF_PREDICT_FALSE(res & 0x80)) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  968|       |          // Note: this wouldn't work if res were 32-bit,
  969|       |          // because then replacing the low byte would overwrite
  970|       |          // the bottom 4 bits of the result.
  971|      0|          res = RotRight7AndReplaceLowByte(res, ptr[4]);
  972|      0|          if (PROTOBUF_PREDICT_FALSE(res & 0x80)) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  973|       |            // The proto format does not permit longer than 5-byte encodings for
  974|       |            // tags.
  975|      0|            *out = 0;
  976|      0|            return nullptr;
  977|      0|          }
  978|      0|          *out = static_cast<uint32_t>(RotateLeft(res, 28));
  979|      0|#if defined(__GNUC__)
  980|       |          // Note: this asm statement prevents the compiler from
  981|       |          // trying to share the "return ptr + constant" among all
  982|       |          // branches.
  983|      0|          asm("" : "+r"(ptr));
  984|      0|#endif
  985|      0|          return ptr + 5;
  986|      0|        }
  987|      0|        *out = static_cast<uint32_t>(RotateLeft(res, 21));
  988|      0|        return ptr + 4;
  989|      0|      }
  990|      0|      *out = static_cast<uint32_t>(RotateLeft(res, 14));
  991|      0|      return ptr + 3;
  992|      0|    }
  993|    102|    *out = static_cast<uint32_t>(RotateLeft(res, 7));
  994|    102|    return ptr + 2;
  995|    102|  }
  996|      1|  *out = static_cast<uint32_t>(res);
  997|      1|  return ptr + 1;
  998|    103|}
_ZN6google8protobuf8internal8ReadSizeEPPKc:
 1050|  2.09k|inline uint32_t ReadSize(const char** pp) {
 1051|  2.09k|  auto p = *pp;
 1052|  2.09k|  uint32_t res = static_cast<uint8_t>(p[0]);
 1053|  2.09k|  if (res < 128) {
  ------------------
  |  Branch (1053:7): [True: 2.01k, False: 76]
  ------------------
 1054|  2.01k|    *pp = p + 1;
 1055|  2.01k|    return res;
 1056|  2.01k|  }
 1057|     76|  auto x = ReadSizeFallback(p, res);
 1058|     76|  *pp = x.first;
 1059|     76|  return x.second;
 1060|  2.09k|}
_ZN6google8protobuf8internal12ParseContext35ReadSizeAndPushLimitAndDepthInlinedEPKcPNS1_18EpsCopyInputStream10LimitTokenE:
 1125|    957|    const char* ptr, LimitToken* old_limit) {
 1126|    957|  int size = ReadSize(&ptr);
 1127|    957|  if (PROTOBUF_PREDICT_FALSE(!ptr) || depth_ <= 0) {
  ------------------
  |  |  365|  1.91k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 957]
  |  |  |  Branch (365:54): [Folded, False: 957]
  |  |  |  Branch (365:63): [True: 0, False: 957]
  |  |  ------------------
  ------------------
  |  Branch (1127:39): [True: 0, False: 957]
  ------------------
 1128|      0|    return nullptr;
 1129|      0|  }
 1130|    957|  *old_limit = PushLimit(ptr, size);
 1131|    957|  --depth_;
 1132|    957|  return ptr;
 1133|    957|}
_ZN6google8protobuf8internal13UnalignedLoadItEET_PKc:
  609|  3.41k|T UnalignedLoad(const char* p) {
  610|  3.41k|  auto tmp = EndianHelper<sizeof(T)>::Load(p);
  611|  3.41k|  T res;
  612|  3.41k|  memcpy(&res, &tmp, sizeof(T));
  613|  3.41k|  return res;
  614|  3.41k|}
_ZN6google8protobuf8internal12ParseContextC2IJRNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEEibPPKcDpOT_:
  455|     30|      : EpsCopyInputStream(aliasing), depth_(depth) {
  456|     30|    *start = InitFrom(std::forward<T>(args)...);
  457|     30|  }
_ZN6google8protobuf8internal12ParseContext27ParseLengthDelimitedInlinedIZNS1_8TcParser9MpMessageILb0EEEPKcPNS0_11MessageLiteES7_PS2_NS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlS7_E_EES7_S7_RKT_:
 1093|     27|ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
 1094|     27|  LimitToken old;
 1095|     27|  ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
 1096|     27|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (1096:7): [True: 0, False: 27]
  ------------------
 1097|     27|  auto old_depth = depth_;
 1098|     27|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  187|     27|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1099|     27|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|     27|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     27|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     27|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 27]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     27|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1099:7): [True: 27, False: 0]
  ------------------
 1100|     27|  depth_++;
 1101|     27|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (1101:7): [True: 0, False: 27]
  ------------------
 1102|     27|  return ptr;
 1103|     27|}
_ZN6google8protobuf8internal13UnalignedLoadIhEET_PKc:
  609|  2.08k|T UnalignedLoad(const char* p) {
  610|  2.08k|  auto tmp = EndianHelper<sizeof(T)>::Load(p);
  611|  2.08k|  T res;
  612|  2.08k|  memcpy(&res, &tmp, sizeof(T));
  613|  2.08k|  return res;
  614|  2.08k|}
_ZN6google8protobuf8internal12ParseContext27ParseLengthDelimitedInlinedIZNS1_8TcParser27SingularParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES7_PS2_NS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlS7_E_EES7_S7_RKT_:
 1093|     47|ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
 1094|     47|  LimitToken old;
 1095|     47|  ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
 1096|     47|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (1096:7): [True: 0, False: 47]
  ------------------
 1097|     47|  auto old_depth = depth_;
 1098|     47|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  187|     47|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1099|     47|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|     47|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     47|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     47|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 47]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     47|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1099:7): [True: 47, False: 0]
  ------------------
 1100|     47|  depth_++;
 1101|     47|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (1101:7): [True: 0, False: 47]
  ------------------
 1102|     47|  return ptr;
 1103|     47|}
_ZN6google8protobuf8internal12ParseContext27ParseLengthDelimitedInlinedIZNS1_8TcParser27RepeatedParseMessageAuxImplIhLb0ELb1EEEPKcPNS0_11MessageLiteES7_PS2_NS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlS7_E_EES7_S7_RKT_:
 1093|    821|ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
 1094|    821|  LimitToken old;
 1095|    821|  ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
 1096|    821|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (1096:7): [True: 0, False: 821]
  ------------------
 1097|    821|  auto old_depth = depth_;
 1098|    821|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  187|    821|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1099|    821|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|    821|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    821|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    821|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 821]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    821|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1099:7): [True: 821, False: 0]
  ------------------
 1100|    821|  depth_++;
 1101|    821|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (1101:7): [True: 0, False: 821]
  ------------------
 1102|    821|  return ptr;
 1103|    821|}
_ZN6google8protobuf8internal12ParseContext27ParseLengthDelimitedInlinedIZNS1_8TcParser27RepeatedParseMessageAuxImplItLb0ELb1EEEPKcPNS0_11MessageLiteES7_PS2_NS1_11TcFieldDataEPKNS1_16TcParseTableBaseEmEUlS7_E_EES7_S7_RKT_:
 1093|     54|ParseContext::ParseLengthDelimitedInlined(const char* ptr, const Func& func) {
 1094|     54|  LimitToken old;
 1095|     54|  ptr = ReadSizeAndPushLimitAndDepthInlined(ptr, &old);
 1096|     54|  if (ptr == nullptr) return ptr;
  ------------------
  |  Branch (1096:7): [True: 0, False: 54]
  ------------------
 1097|     54|  auto old_depth = depth_;
 1098|     54|  PROTOBUF_ALWAYS_INLINE_CALL ptr = func(ptr);
  ------------------
  |  |  187|     54|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
 1099|     54|  if (ptr != nullptr) ABSL_DCHECK_EQ(old_depth, depth_);
  ------------------
  |  |   74|     54|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     54|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     54|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 54]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     54|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1099:7): [True: 54, False: 0]
  ------------------
 1100|     54|  depth_++;
 1101|     54|  if (!PopLimit(std::move(old))) return nullptr;
  ------------------
  |  Branch (1101:7): [True: 0, False: 54]
  ------------------
 1102|     54|  return ptr;
 1103|     54|}

_ZN6google8protobuf8internal16NoopDebugCounter3IncEv:
  437|  38.4k|  constexpr void Inc() {}
_ZN6google8protobuf8internal15AllocateAtLeastEm:
  129|    435|inline SizedPtr AllocateAtLeast(size_t size) {
  130|       |#if !defined(NDEBUG) && defined(ABSL_HAVE_THREAD_LOCAL) && \
  131|       |    defined(__cpp_inline_variables)
  132|       |  if (allocate_at_least_hook != nullptr) {
  133|       |    return allocate_at_least_hook(size, allocate_at_least_hook_context);
  134|       |  }
  135|       |#endif  // !NDEBUG && ABSL_HAVE_THREAD_LOCAL && __cpp_inline_variables
  136|    435|  return {::operator new(size), size};
  137|    435|}
_ZN6google8protobuf8internal11SizedDeleteEPvm:
  139|    430|inline void SizedDelete(void* p, size_t size) {
  140|    430|#if defined(__cpp_sized_deallocation)
  141|    430|  ::operator delete(p, size);
  142|       |#else
  143|       |  // Avoid -Wunused-parameter
  144|       |  (void)size;
  145|       |  ::operator delete(p);
  146|       |#endif
  147|    430|}
_ZN6google8protobuf8internal16SizedArrayDeleteEPvm:
  148|    851|inline void SizedArrayDelete(void* p, size_t size) {
  149|    851|#if defined(__cpp_sized_deallocation)
  150|    851|  ::operator delete[](p, size);
  151|       |#else
  152|       |  // Avoid -Wunused-parameter
  153|       |  (void)size;
  154|       |  ::operator delete[](p);
  155|       |#endif
  156|    851|}
_ZN6google8protobuf8internal23Prefetch5LinesFrom1LineEPKv:
  323|  1.04k|inline PROTOBUF_ALWAYS_INLINE void Prefetch5LinesFrom1Line(const void* ptr) {
  324|  1.04k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 64);
  ------------------
  |  |  670|  1.04k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  325|  1.04k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 128);
  ------------------
  |  |  670|  1.04k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  326|  1.04k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 192);
  ------------------
  |  |  670|  1.04k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  327|  1.04k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 256);
  ------------------
  |  |  670|  1.04k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  328|  1.04k|  PROTOBUF_PREFETCH_WITH_OFFSET(ptr, 320);
  ------------------
  |  |  670|  1.04k|  asm("prefetcht0 " #offset "(%0)" : : "r"(base));
  ------------------
  329|  1.04k|}
_ZN6google8protobuf8internal7LaunderINS0_11MessageLiteEEEPT_S5_:
  376|  38.4k|constexpr T* Launder(T* p) {
  377|  38.4k|#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606L
  378|  38.4k|  return std::launder(p);
  379|       |#elif ABSL_HAVE_BUILTIN(__builtin_launder)
  380|       |  return __builtin_launder(p);
  381|       |#else
  382|       |  return p;
  383|       |#endif
  384|  38.4k|}
_ZN6google8protobuf8internal13StrongPointerIPNS1_16DummyWeakDefaultETnT_XadL_ZNS1_18dummy_weak_defaultEEEEEvv:
   60|      2|inline PROTOBUF_ALWAYS_INLINE void StrongPointer() {
   61|       |  // This injects a relocation in the code path without having to run code, but
   62|       |  // we can only do it with a newer clang.
   63|      2|  asm(".reloc ., BFD_RELOC_NONE, %p0" ::"Ws"(ptr));
   64|      2|}

_ZNK6google8protobuf8internal10LongSooRep8elementsEv:
  150|     20|  char* elements() const {
  151|     20|    auto ret = reinterpret_cast<char*>(elements_int & kSooPtrMask);
  152|     20|    ABSL_DCHECK_NE(ret, nullptr);
  ------------------
  |  |   76|     20|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|     20|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     20|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 20]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     20|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  153|     20|    return ret;
  154|     20|  }
_ZN6google8protobuf8internal11ShortSooRepC2EPNS0_5ArenaE:
  163|     37|      : arena_and_size(reinterpret_cast<uintptr_t>(arena)) {
  164|     37|    ABSL_DCHECK_EQ(size(), 0);
  ------------------
  |  |   74|     37|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     37|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     37|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 37]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     37|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  165|     37|  }
_ZNK6google8protobuf8internal11ShortSooRep4sizeEv:
  167|    396|  int size() const { return arena_and_size & kSooSizeMask; }
_ZNK6google8protobuf8internal11ShortSooRep6is_sooEv:
  168|    534|  bool is_soo() const { return (arena_and_size & kNotSooBit) == 0; }
_ZN6google8protobuf8internal6SooRepC2EPNS0_5ArenaE:
  181|     37|  explicit SooRep(Arena* arena) : short_rep(arena) {}
_ZNK6google8protobuf8internal6SooRep6is_sooEv:
  183|    534|  bool is_soo() const {
  184|    534|    static_assert(sizeof(LongSooRep) == sizeof(ShortSooRep), "");
  185|    534|    static_assert(offsetof(SooRep, long_rep) == offsetof(SooRep, short_rep),
  186|    534|                  "");
  187|    534|    static_assert(offsetof(LongSooRep, elements_int) ==
  188|    534|                      offsetof(ShortSooRep, arena_and_size),
  189|    534|                  "");
  190|    534|    return short_rep.is_soo();
  191|    534|  }
_ZNK6google8protobuf8internal6SooRep9soo_arenaEv:
  192|      3|  Arena* soo_arena() const {
  193|      3|    ABSL_DCHECK(is_soo());
  ------------------
  |  |   47|      3|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      3|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      6|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      3|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      6|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      6|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      3|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      3|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      6|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      6|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|      3|    return reinterpret_cast<Arena*>(short_rep.arena_and_size & kSooPtrMask);
  195|      3|  }
_ZNK6google8protobuf8internal6SooRep4sizeEb:
  196|    404|  int size(bool is_soo) const {
  197|    404|    ABSL_DCHECK_EQ(is_soo, this->is_soo());
  ------------------
  |  |   74|    404|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|    404|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    404|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 404]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    404|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  198|       |#if !defined(__clang__) && defined(__GNUC__)
  199|       |#pragma GCC diagnostic push
  200|       |#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
  201|       |#endif
  202|    404|    return is_soo ? short_rep.size() : long_rep.size;
  ------------------
  |  Branch (202:12): [True: 393, False: 11]
  ------------------
  203|       |#if !defined(__clang__) && defined(__GNUC__)
  204|       |#pragma GCC diagnostic pop
  205|       |#endif
  206|    404|  }
_ZN6google8protobuf8internal6SooRep8set_sizeEbi:
  207|     94|  void set_size(bool is_soo, int size) {
  208|     94|    ABSL_DCHECK_EQ(is_soo, this->is_soo());
  ------------------
  |  |   74|     94|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     94|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     94|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 94]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     94|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  209|     94|    if (is_soo) {
  ------------------
  |  Branch (209:9): [True: 91, False: 3]
  ------------------
  210|     91|      ABSL_DCHECK_LE(size, kSooSizeMask);
  ------------------
  |  |   78|     91|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     91|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     91|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 91]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     91|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  211|     91|      short_rep.arena_and_size &= kSooPtrMask;
  212|     91|      short_rep.arena_and_size |= size;
  213|     91|    } else {
  214|      3|      long_rep.size = size;
  215|      3|    }
  216|     94|  }
_ZN6google8protobuf8internal6SooRep11set_non_sooEbiPv:
  219|      3|  void set_non_soo(bool was_soo, int capacity, void* elements) {
  220|      3|    ABSL_DCHECK_EQ(was_soo, is_soo());
  ------------------
  |  |   74|      3|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|      3|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      3|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 3]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  221|      3|    ABSL_DCHECK_NE(elements, nullptr);
  ------------------
  |  |   76|      3|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|      3|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      3|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 3]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|      3|    ABSL_DCHECK_EQ(reinterpret_cast<uintptr_t>(elements) % kSooPtrAlignment,
  ------------------
  |  |   74|      3|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|      3|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      3|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 3]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  223|      3|                   uintptr_t{0});
  224|      3|    if (was_soo) long_rep.size = short_rep.size();
  ------------------
  |  Branch (224:9): [True: 3, False: 0]
  ------------------
  225|      3|    long_rep.capacity = capacity;
  226|      3|    long_rep.elements_int = reinterpret_cast<uintptr_t>(elements) | kNotSooBit;
  227|      3|  }
_ZN6google8protobuf13RepeatedFieldIjE3AddEj:
  841|     57|inline void RepeatedField<Element>::Add(Element value) {
  842|     57|  bool is_soo = this->is_soo();
  843|     57|  const int old_size = size(is_soo);
  844|     57|  int capacity = Capacity(is_soo);
  845|     57|  Element* elem = unsafe_elements(is_soo);
  846|     57|  if (ABSL_PREDICT_FALSE(old_size == capacity)) {
  ------------------
  |  |  178|     57|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 3, False: 54]
  |  |  |  Branch (178:49): [Folded, False: 57]
  |  |  |  Branch (178:58): [True: 3, False: 54]
  |  |  ------------------
  ------------------
  847|      3|    Grow(is_soo, old_size, old_size + 1);
  848|      3|    is_soo = false;
  849|      3|    capacity = Capacity(is_soo);
  850|      3|    elem = unsafe_elements(is_soo);
  851|      3|  }
  852|     57|  int new_size = old_size + 1;
  853|     57|  void* p = elem + ExchangeCurrentSize(is_soo, new_size);
  854|     57|  ::new (p) Element(std::move(value));
  855|       |
  856|       |  // The below helps the compiler optimize dense loops.
  857|       |  // Note: we can't call functions in PROTOBUF_ASSUME so use local variables.
  858|     57|  ABSL_ATTRIBUTE_UNUSED const bool final_is_soo = this->is_soo();
  ------------------
  |  |  557|     57|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  859|     57|  PROTOBUF_ASSUME(is_soo == final_is_soo);
  ------------------
  |  |  941|     57|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  860|     57|  ABSL_ATTRIBUTE_UNUSED const int final_size = size(is_soo);
  ------------------
  |  |  557|     57|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  861|     57|  PROTOBUF_ASSUME(new_size == final_size);
  ------------------
  |  |  941|     57|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  862|     57|  ABSL_ATTRIBUTE_UNUSED Element* const final_elements = unsafe_elements(is_soo);
  ------------------
  |  |  557|     57|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  863|     57|  PROTOBUF_ASSUME(elem == final_elements);
  ------------------
  |  |  941|     57|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  864|     57|  ABSL_ATTRIBUTE_UNUSED const int final_capacity = Capacity(is_soo);
  ------------------
  |  |  557|     57|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  865|     57|  PROTOBUF_ASSUME(capacity == final_capacity);
  ------------------
  |  |  941|     57|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  866|     57|}
_ZNK6google8protobuf13RepeatedFieldIjE6is_sooEv:
  476|    189|  bool is_soo() const { return soo_rep_.is_soo(); }
_ZNK6google8protobuf13RepeatedFieldIjE4sizeEb:
  477|    174|  int size(bool is_soo) const { return soo_rep_.size(is_soo); }
_ZNK6google8protobuf13RepeatedFieldIjE8CapacityEb:
  478|    126|  int Capacity(bool is_soo) const {
  479|       |#if !defined(__clang__) && defined(__GNUC__)
  480|       |#pragma GCC diagnostic push
  481|       |#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
  482|       |#endif
  483|    126|    return is_soo ? kSooCapacityElements : soo_rep_.long_rep.capacity;
  ------------------
  |  Branch (483:12): [True: 117, False: 9]
  ------------------
  484|       |#if !defined(__clang__) && defined(__GNUC__)
  485|       |#pragma GCC diagnostic pop
  486|       |#endif
  487|    126|  }
_ZN6google8protobuf13RepeatedFieldIjE15unsafe_elementsEb:
  592|    180|  Element* unsafe_elements(bool is_soo) {
  593|    180|    return is_soo ? reinterpret_cast<Element*>(soo_rep_.short_rep.data)
  ------------------
  |  Branch (593:12): [True: 168, False: 12]
  ------------------
  594|    180|                  : reinterpret_cast<Element*>(soo_rep_.long_rep.elements());
  595|    180|  }
_ZN6google8protobuf13RepeatedFieldIjE4GrowEbii:
 1240|      3|                                                    int new_size) {
 1241|      3|  UnpoisonBuffer();
 1242|      3|  GrowNoAnnotate(was_soo, old_size, new_size);
 1243|      3|  AnnotateSize(Capacity(), old_size);
 1244|      3|}
_ZNK6google8protobuf13RepeatedFieldIjE14UnpoisonBufferEv:
  557|      3|  void UnpoisonBuffer() const {
  558|      3|    AnnotateSize(size(), Capacity());
  559|      3|    if (is_soo()) {
  ------------------
  |  Branch (559:9): [True: 3, False: 0]
  ------------------
  560|       |      // We need to manually unpoison the SOO buffer because in reflection for
  561|       |      // split repeated fields, we poison the whole SOO buffer even when we
  562|       |      // don't actually use the whole SOO buffer (e.g. for RepeatedField<bool>).
  563|      3|      PROTOBUF_UNPOISON_MEMORY_REGION(soo_rep_.short_rep.data,
  564|      3|                                      sizeof(soo_rep_.short_rep.data));
  565|      3|    }
  566|      3|  }
_ZN6google8protobuf13RepeatedFieldIjE14GrowNoAnnotateEbii:
 1184|      3|                                                              int new_size) {
 1185|      3|  const int old_capacity = Capacity(was_soo);
 1186|      3|  ABSL_DCHECK_GT(new_size, old_capacity);
  ------------------
  |  |   84|      3|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   96|      3|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      3|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 3]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1187|      3|  HeapRep* new_rep;
 1188|      3|  Arena* arena = GetArena();
 1189|       |
 1190|      3|  new_size = internal::CalculateReserveSize<Element, kHeapRepHeaderSize>(
 1191|      3|      old_capacity, new_size);
 1192|       |
 1193|      3|  ABSL_DCHECK_LE(static_cast<size_t>(new_size),
  ------------------
  |  |   78|      0|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|      3|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      3|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 3]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1194|      0|                 (std::numeric_limits<size_t>::max() - kHeapRepHeaderSize) /
 1195|      0|                     sizeof(Element))
 1196|      0|      << "Requested size is too large to fit into size_t.";
 1197|      3|  size_t bytes =
 1198|      3|      kHeapRepHeaderSize + sizeof(Element) * static_cast<size_t>(new_size);
 1199|      3|  if (arena == nullptr) {
  ------------------
  |  Branch (1199:7): [True: 2, False: 1]
  ------------------
 1200|      2|    ABSL_DCHECK_LE((bytes - kHeapRepHeaderSize) / sizeof(Element),
  ------------------
  |  |   78|      0|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|      2|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      2|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 2]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1201|      0|                   static_cast<size_t>(std::numeric_limits<int>::max()))
 1202|      0|        << "Requested size is too large to fit element count into int.";
 1203|      2|    internal::SizedPtr res = internal::AllocateAtLeast(bytes);
 1204|      2|    size_t num_available =
 1205|      2|        std::min((res.n - kHeapRepHeaderSize) / sizeof(Element),
 1206|      2|                 static_cast<size_t>(std::numeric_limits<int>::max()));
 1207|      2|    new_size = static_cast<int>(num_available);
 1208|      2|    new_rep = static_cast<HeapRep*>(res.p);
 1209|      2|  } else {
 1210|      1|    new_rep =
 1211|      1|        reinterpret_cast<HeapRep*>(Arena::CreateArray<char>(arena, bytes));
 1212|      1|  }
 1213|      3|  new_rep->arena = arena;
 1214|       |
 1215|      3|  if (old_size > 0) {
  ------------------
  |  Branch (1215:7): [True: 3, False: 0]
  ------------------
 1216|      3|    Element* pnew = static_cast<Element*>(new_rep->elements());
 1217|      3|    Element* pold = elements(was_soo);
 1218|       |    // TODO: add absl::is_trivially_relocatable<Element>
 1219|      3|    if (std::is_trivial<Element>::value) {
  ------------------
  |  Branch (1219:9): [True: 3, Folded]
  ------------------
 1220|      3|      memcpy(static_cast<void*>(pnew), pold, old_size * sizeof(Element));
 1221|      3|    } else {
 1222|      0|      for (Element* end = pnew + old_size; pnew != end; ++pnew, ++pold) {
  ------------------
  |  Branch (1222:44): [True: 0, False: 0]
  ------------------
 1223|      0|        ::new (static_cast<void*>(pnew)) Element(std::move(*pold));
 1224|      0|        pold->~Element();
 1225|      0|      }
 1226|      0|    }
 1227|      3|  }
 1228|      3|  if (!was_soo) InternalDeallocate();
  ------------------
  |  Branch (1228:7): [True: 0, False: 3]
  ------------------
 1229|       |
 1230|      3|  soo_rep_.set_non_soo(was_soo, new_size, new_rep->elements());
 1231|      3|}
_ZN6google8protobuf13RepeatedFieldIjE8GetArenaEv:
  440|      3|  inline Arena* GetArena() { return GetArena(is_soo()); }
_ZNK6google8protobuf13RepeatedFieldIjE8GetArenaEb:
  472|      3|  inline Arena* GetArena(bool is_soo) const {
  473|      3|    return is_soo ? soo_rep_.soo_arena() : heap_rep()->arena;
  ------------------
  |  Branch (473:12): [True: 3, False: 0]
  ------------------
  474|      3|  }
_ZN6google8protobuf8internal20CalculateReserveSizeIjLi8EEEiii:
 1142|      3|inline int CalculateReserveSize(int capacity, int new_size) {
 1143|      3|  constexpr int lower_limit =
 1144|      3|      RepeatedFieldLowerClampLimit<T, kHeapRepHeaderSize>();
 1145|      3|  if (new_size < lower_limit) {
  ------------------
  |  Branch (1145:7): [True: 0, False: 3]
  ------------------
 1146|       |    // Clamp to smallest allowed size.
 1147|      0|    return lower_limit;
 1148|      0|  }
 1149|      3|  constexpr int kMaxSizeBeforeClamp =
 1150|      3|      (std::numeric_limits<int>::max() - kHeapRepHeaderSize) / 2;
 1151|      3|  if (PROTOBUF_PREDICT_FALSE(capacity > kMaxSizeBeforeClamp)) {
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 0, False: 3]
  |  |  ------------------
  ------------------
 1152|      0|    return std::numeric_limits<int>::max();
 1153|      0|  }
 1154|      3|  constexpr int kSooCapacityElements = SooCapacityElements(sizeof(T));
 1155|      3|  if (kSooCapacityElements > 0 && kSooCapacityElements < lower_limit) {
  ------------------
  |  Branch (1155:7): [True: 0, Folded]
  |  Branch (1155:35): [Folded, False: 0]
  ------------------
 1156|       |    // In this case, we need to set capacity to 0 here to ensure power-of-two
 1157|       |    // sized allocations.
 1158|      0|    if (capacity < lower_limit) capacity = 0;
  ------------------
  |  Branch (1158:9): [True: 0, False: 0]
  ------------------
 1159|      3|  } else {
 1160|      6|    ABSL_DCHECK(capacity == 0 || capacity >= lower_limit)
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      3|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      3|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      6|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      6|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      3|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      3|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      3|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      3|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1161|      6|        << capacity << " " << lower_limit;
 1162|      3|  }
 1163|       |  // We want to double the number of bytes, not the number of elements, to try
 1164|       |  // to stay within power-of-two allocations.
 1165|       |  // The allocation has kHeapRepHeaderSize + sizeof(T) * capacity.
 1166|      3|  int doubled_size = 2 * capacity + kHeapRepHeaderSize / sizeof(T);
 1167|      3|  return std::max(doubled_size, new_size);
 1168|      3|}
_ZN6google8protobuf8internal7HeapRepILm8EE8elementsEv:
  107|      6|  void* elements() { return this + 1; }
_ZN6google8protobuf13RepeatedFieldIjE8elementsEb:
  581|      3|  Element* elements(bool is_soo) {
  582|      3|    ABSL_DCHECK_GT(Capacity(is_soo), 0);
  ------------------
  |  |   84|      3|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   96|      3|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      3|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 3]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      3|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  583|      3|    return unsafe_elements(is_soo);
  584|      3|  }
_ZNK6google8protobuf13RepeatedFieldIjE12AnnotateSizeEii:
  543|     63|  void AnnotateSize(int old_size, int new_size) const {
  544|     63|    if (old_size != new_size) {
  ------------------
  |  Branch (544:9): [True: 60, False: 3]
  ------------------
  545|     60|      ABSL_ATTRIBUTE_UNUSED const bool is_soo = this->is_soo();
  ------------------
  |  |  557|     60|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  546|     60|      ABSL_ATTRIBUTE_UNUSED const Element* elem = unsafe_elements(is_soo);
  ------------------
  |  |  557|     60|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  547|     60|      ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(elem, elem + Capacity(is_soo),
  548|     60|                                         elem + old_size, elem + new_size);
  549|     60|      if (new_size < old_size) {
  ------------------
  |  Branch (549:11): [True: 3, False: 57]
  ------------------
  550|      3|        ABSL_ANNOTATE_MEMORY_IS_UNINITIALIZED(
  551|      3|            elem + new_size, (old_size - new_size) * sizeof(Element));
  552|      3|      }
  553|     60|    }
  554|     63|  }
_ZNK6google8protobuf13RepeatedFieldIjE15unsafe_elementsEb:
  596|     60|  const Element* unsafe_elements(bool is_soo) const {
  597|     60|    return const_cast<RepeatedField*>(this)->unsafe_elements(is_soo);
  598|     60|  }
_ZN6google8protobuf13RepeatedFieldIjE19ExchangeCurrentSizeEbi:
  572|     57|  inline int ExchangeCurrentSize(bool is_soo, int new_size) {
  573|     57|    const int prev_size = size(is_soo);
  574|     57|    AnnotateSize(prev_size, new_size);
  575|     57|    set_size(is_soo, new_size);
  576|     57|    return prev_size;
  577|     57|  }
_ZN6google8protobuf13RepeatedFieldIjE8set_sizeEbi:
  488|     57|  void set_size(bool is_soo, int size) {
  489|     57|    ABSL_DCHECK_LE(size, Capacity(is_soo));
  ------------------
  |  |   78|     57|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     57|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     57|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 57]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     57|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  490|     57|    soo_rep_.set_size(is_soo, size);
  491|     57|  }
_ZNK6google8protobuf13RepeatedFieldIjE8CapacityEv:
  743|      6|inline int RepeatedField<Element>::Capacity() const {
  744|      6|  return Capacity(is_soo());
  745|      6|}
_ZNK6google8protobuf13RepeatedFieldIjE4sizeEv:
  738|      3|inline int RepeatedField<Element>::size() const {
  739|      3|  return size(is_soo());
  740|      3|}
_ZNK6google8protobuf13RepeatedFieldIiE8CapacityEv:
  743|     29|inline int RepeatedField<Element>::Capacity() const {
  744|     29|  return Capacity(is_soo());
  745|     29|}
_ZNK6google8protobuf13RepeatedFieldIiE6is_sooEv:
  476|    326|  bool is_soo() const { return soo_rep_.is_soo(); }
_ZNK6google8protobuf13RepeatedFieldIiE8CapacityEb:
  478|     30|  int Capacity(bool is_soo) const {
  479|       |#if !defined(__clang__) && defined(__GNUC__)
  480|       |#pragma GCC diagnostic push
  481|       |#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
  482|       |#endif
  483|     30|    return is_soo ? kSooCapacityElements : soo_rep_.long_rep.capacity;
  ------------------
  |  Branch (483:12): [True: 28, False: 2]
  ------------------
  484|       |#if !defined(__clang__) && defined(__GNUC__)
  485|       |#pragma GCC diagnostic pop
  486|       |#endif
  487|     30|  }
_ZNK6google8protobuf13RepeatedFieldIiE4sizeEb:
  477|    211|  int size(bool is_soo) const { return soo_rep_.size(is_soo); }
_ZN6google8protobuf13RepeatedFieldIiE8elementsEb:
  581|     19|  Element* elements(bool is_soo) {
  582|     19|    ABSL_DCHECK_GT(Capacity(is_soo), 0);
  ------------------
  |  |   84|     19|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   96|     19|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     19|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 19]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     19|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  583|     19|    return unsafe_elements(is_soo);
  584|     19|  }
_ZN6google8protobuf13RepeatedFieldIiE15unsafe_elementsEb:
  592|    140|  Element* unsafe_elements(bool is_soo) {
  593|    140|    return is_soo ? reinterpret_cast<Element*>(soo_rep_.short_rep.data)
  ------------------
  |  Branch (593:12): [True: 134, False: 6]
  ------------------
  594|    140|                  : reinterpret_cast<Element*>(soo_rep_.long_rep.elements());
  595|    140|  }
_ZN6google8protobuf13RepeatedFieldIiE19ExchangeCurrentSizeEbi:
  572|     37|  inline int ExchangeCurrentSize(bool is_soo, int new_size) {
  573|     37|    const int prev_size = size(is_soo);
  574|     37|    AnnotateSize(prev_size, new_size);
  575|     37|    set_size(is_soo, new_size);
  576|     37|    return prev_size;
  577|     37|  }
_ZNK6google8protobuf13RepeatedFieldIiE12AnnotateSizeEii:
  543|    103|  void AnnotateSize(int old_size, int new_size) const {
  544|    103|    if (old_size != new_size) {
  ------------------
  |  Branch (544:9): [True: 58, False: 45]
  ------------------
  545|     58|      ABSL_ATTRIBUTE_UNUSED const bool is_soo = this->is_soo();
  ------------------
  |  |  557|     58|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  546|     58|      ABSL_ATTRIBUTE_UNUSED const Element* elem = unsafe_elements(is_soo);
  ------------------
  |  |  557|     58|#define ABSL_ATTRIBUTE_UNUSED __attribute__((__unused__))
  ------------------
  547|     58|      ABSL_ANNOTATE_CONTIGUOUS_CONTAINER(elem, elem + Capacity(is_soo),
  548|     58|                                         elem + old_size, elem + new_size);
  549|     58|      if (new_size < old_size) {
  ------------------
  |  Branch (549:11): [True: 37, False: 21]
  ------------------
  550|     37|        ABSL_ANNOTATE_MEMORY_IS_UNINITIALIZED(
  551|     37|            elem + new_size, (old_size - new_size) * sizeof(Element));
  552|     37|      }
  553|     58|    }
  554|    103|  }
_ZNK6google8protobuf13RepeatedFieldIiE15unsafe_elementsEb:
  596|     75|  const Element* unsafe_elements(bool is_soo) const {
  597|     75|    return const_cast<RepeatedField*>(this)->unsafe_elements(is_soo);
  598|     75|  }
_ZN6google8protobuf13RepeatedFieldIiE8set_sizeEbi:
  488|     37|  void set_size(bool is_soo, int size) {
  489|     37|    ABSL_DCHECK_LE(size, Capacity(is_soo));
  ------------------
  |  |   78|     37|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     37|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     37|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 37]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     37|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  490|     37|    soo_rep_.set_size(is_soo, size);
  491|     37|  }
_ZNK6google8protobuf13RepeatedFieldIiE14UnpoisonBufferEv:
  557|     29|  void UnpoisonBuffer() const {
  558|     29|    AnnotateSize(size(), Capacity());
  559|     29|    if (is_soo()) {
  ------------------
  |  Branch (559:9): [True: 28, False: 1]
  ------------------
  560|       |      // We need to manually unpoison the SOO buffer because in reflection for
  561|       |      // split repeated fields, we poison the whole SOO buffer even when we
  562|       |      // don't actually use the whole SOO buffer (e.g. for RepeatedField<bool>).
  563|     28|      PROTOBUF_UNPOISON_MEMORY_REGION(soo_rep_.short_rep.data,
  564|     28|                                      sizeof(soo_rep_.short_rep.data));
  565|     28|    }
  566|     29|  }
_ZNK6google8protobuf13RepeatedFieldIiE8heap_repEv:
  602|      2|  HeapRep* heap_rep() const {
  603|      2|    ABSL_DCHECK(!is_soo());
  ------------------
  |  |   47|      2|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      2|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      4|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      2|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      4|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      4|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 2, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      2|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      2|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 2, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      4|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      4|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  604|      2|    return reinterpret_cast<HeapRep*>(soo_rep_.long_rep.elements() -
  605|      2|                                      kHeapRepHeaderSize);
  606|      2|  }
_ZN6google8protobuf13RepeatedFieldIiE7DestroyEPKiS4_:
  518|     46|  static void Destroy(const Element* begin, const Element* end) {
  519|     46|    if (!std::is_trivial<Element>::value) {
  ------------------
  |  Branch (519:9): [Folded, False: 46]
  ------------------
  520|      0|      std::for_each(begin, end, [&](const Element& e) { e.~Element(); });
  521|      0|    }
  522|     46|  }
_ZNK6google8protobuf13RepeatedFieldIiE4dataEv:
 1043|     17|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1044|     17|  return unsafe_elements(is_soo());
 1045|     17|}
_ZNK6google8protobuf13RepeatedFieldINS0_12UnknownFieldEE6is_sooEv:
  476|     19|  bool is_soo() const { return soo_rep_.is_soo(); }
_ZNK6google8protobuf13RepeatedFieldINS0_12UnknownFieldEE4sizeEb:
  477|     19|  int size(bool is_soo) const { return soo_rep_.size(is_soo); }
_ZNK6google8protobuf13RepeatedFieldINS0_12UnknownFieldEE5emptyEv:
  733|     19|inline bool RepeatedField<Element>::empty() const {
  734|     19|  return size() == 0;
  735|     19|}
_ZNK6google8protobuf13RepeatedFieldINS0_12UnknownFieldEE4sizeEv:
  738|     19|inline int RepeatedField<Element>::size() const {
  739|     19|  return size(is_soo());
  740|     19|}
_ZNK6google8protobuf13RepeatedFieldIiE4sizeEv:
  738|    108|inline int RepeatedField<Element>::size() const {
  739|    108|  return size(is_soo());
  740|    108|}
_ZN6google8protobuf13RepeatedFieldIiE5ClearEv:
  984|     37|inline void RepeatedField<Element>::Clear() {
  985|     37|  const bool is_soo = this->is_soo();
  986|     37|  Element* elem = unsafe_elements(is_soo);
  987|     37|  Destroy(elem, elem + size(is_soo));
  988|     37|  ExchangeCurrentSize(is_soo, 0);
  989|     37|}
_ZNK6google8protobuf13RepeatedFieldIiE3GetEi:
  805|     19|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
  806|     19|  ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|     19|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     19|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     19|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 19]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     19|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  807|     19|  ABSL_DCHECK_LT(index, size());
  ------------------
  |  |   80|     19|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     19|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     19|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 19]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     19|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  808|     19|  return elements(is_soo())[index];
  809|     19|}
_ZNK6google8protobuf13RepeatedFieldIiE8elementsEb:
  585|     19|  const Element* elements(bool is_soo) const {
  586|     19|    return const_cast<RepeatedField*>(this)->elements(is_soo);
  587|     19|  }
_ZN6google8protobuf13RepeatedFieldIiE19StaticValidityCheckEv:
  259|     66|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  260|     66|    static_assert(
  261|     66|        absl::disjunction<internal::is_supported_integral_type<Element>,
  262|     66|                          internal::is_supported_floating_point_type<Element>,
  263|     66|                          std::is_same<absl::Cord, Element>,
  264|     66|                          std::is_same<UnknownField, Element>,
  265|     66|                          is_proto_enum<Element>>::value,
  266|     66|        "We only support non-string scalars in RepeatedField.");
  267|     66|  }
_ZN6google8protobuf13RepeatedFieldIiEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  295|     37|      : RepeatedField(arena) {}
_ZN6google8protobuf13RepeatedFieldIiEC2EPNS0_5ArenaE:
  648|     37|inline RepeatedField<Element>::RepeatedField(Arena* arena) : soo_rep_(arena) {
  649|     37|  StaticValidityCheck();
  650|     37|  AnnotateSize(kSooCapacityElements, 0);
  651|     37|}
_ZN6google8protobuf13RepeatedFieldIiED2Ev:
  680|     29|RepeatedField<Element>::~RepeatedField() {
  681|     29|  StaticValidityCheck();
  682|     29|  const bool is_soo = this->is_soo();
  683|       |#ifndef NDEBUG
  684|       |  // Try to trigger segfault / asan failure in non-opt builds if arena_
  685|       |  // lifetime has ended before the destructor.
  686|       |  auto arena = GetArena(is_soo);
  687|       |  if (arena) (void)arena->SpaceAllocated();
  688|       |#endif
  689|     29|  const int size = this->size(is_soo);
  690|     29|  if (size > 0) {
  ------------------
  |  Branch (690:7): [True: 9, False: 20]
  ------------------
  691|      9|    Element* elem = unsafe_elements(is_soo);
  692|      9|    Destroy(elem, elem + size);
  693|      9|  }
  694|     29|  UnpoisonBuffer();
  695|     29|  if (!is_soo) InternalDeallocate<true>();
  ------------------
  |  Branch (695:7): [True: 1, False: 28]
  ------------------
  696|     29|}
_ZN6google8protobuf13RepeatedFieldIiE18InternalDeallocateILb1EEEvv:
  610|      1|  void InternalDeallocate() {
  611|      1|    ABSL_DCHECK(!is_soo());
  ------------------
  |  |   47|      1|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      1|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      2|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      1|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      2|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      2|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 1, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      1|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 1]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      1|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 1, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      2|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      2|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  612|      1|    const size_t bytes = Capacity(false) * sizeof(Element) + kHeapRepHeaderSize;
  613|      1|    if (heap_rep()->arena == nullptr) {
  ------------------
  |  Branch (613:9): [True: 1, False: 0]
  ------------------
  614|      1|      internal::SizedDelete(heap_rep(), bytes);
  615|      1|    } else if (!in_destructor) {
  ------------------
  |  Branch (615:16): [Folded, False: 0]
  ------------------
  616|       |      // If we are in the destructor, we might be being destroyed as part of
  617|       |      // the arena teardown. We can't try and return blocks to the arena then.
  618|      0|      heap_rep()->arena->ReturnArrayMemory(heap_rep(), bytes);
  619|      0|    }
  620|      1|  }
_ZN6google8protobuf8internal20CalculateReserveSizeIPvLi8EEEiii:
 1142|    536|inline int CalculateReserveSize(int capacity, int new_size) {
 1143|    536|  constexpr int lower_limit =
 1144|    536|      RepeatedFieldLowerClampLimit<T, kHeapRepHeaderSize>();
 1145|    536|  if (new_size < lower_limit) {
  ------------------
  |  Branch (1145:7): [True: 0, False: 536]
  ------------------
 1146|       |    // Clamp to smallest allowed size.
 1147|      0|    return lower_limit;
 1148|      0|  }
 1149|    536|  constexpr int kMaxSizeBeforeClamp =
 1150|    536|      (std::numeric_limits<int>::max() - kHeapRepHeaderSize) / 2;
 1151|    536|  if (PROTOBUF_PREDICT_FALSE(capacity > kMaxSizeBeforeClamp)) {
  ------------------
  |  |  365|    536|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 536]
  |  |  |  Branch (365:54): [Folded, False: 536]
  |  |  |  Branch (365:63): [True: 0, False: 536]
  |  |  ------------------
  ------------------
 1152|      0|    return std::numeric_limits<int>::max();
 1153|      0|  }
 1154|    536|  constexpr int kSooCapacityElements = SooCapacityElements(sizeof(T));
 1155|    536|  if (kSooCapacityElements > 0 && kSooCapacityElements < lower_limit) {
  ------------------
  |  Branch (1155:7): [True: 0, Folded]
  |  Branch (1155:35): [Folded, False: 0]
  ------------------
 1156|       |    // In this case, we need to set capacity to 0 here to ensure power-of-two
 1157|       |    // sized allocations.
 1158|      0|    if (capacity < lower_limit) capacity = 0;
  ------------------
  |  Branch (1158:9): [True: 0, False: 0]
  ------------------
 1159|    536|  } else {
 1160|  1.07k|    ABSL_DCHECK(capacity == 0 || capacity >= lower_limit)
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    536|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    536|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.07k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.07k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 536, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    536|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 536]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    536|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 536, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    536|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|    536|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1161|  1.07k|        << capacity << " " << lower_limit;
 1162|    536|  }
 1163|       |  // We want to double the number of bytes, not the number of elements, to try
 1164|       |  // to stay within power-of-two allocations.
 1165|       |  // The allocation has kHeapRepHeaderSize + sizeof(T) * capacity.
 1166|    536|  int doubled_size = 2 * capacity + kHeapRepHeaderSize / sizeof(T);
 1167|    536|  return std::max(doubled_size, new_size);
 1168|    536|}

_ZN6google8protobuf8internal20RepeatedPtrFieldBase14InternalExtendEi:
   36|    536|void** RepeatedPtrFieldBase::InternalExtend(int extend_amount) {
   37|    536|  ABSL_DCHECK(extend_amount > 0);
  ------------------
  |  |   47|    536|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    536|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.07k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    536|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.07k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.07k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 536, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    536|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 536]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    536|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 536, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.07k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.07k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   38|    536|  constexpr size_t kPtrSize = sizeof(rep()->elements[0]);
   39|    536|  constexpr size_t kMaxSize = std::numeric_limits<size_t>::max();
   40|    536|  constexpr size_t kMaxCapacity = (kMaxSize - kRepHeaderSize) / kPtrSize;
   41|    536|  const int old_capacity = Capacity();
   42|    536|  Arena* arena = GetArena();
   43|    536|  Rep* new_rep = nullptr;
   44|    536|  {
   45|    536|    int new_capacity = internal::CalculateReserveSize<void*, kRepHeaderSize>(
   46|    536|        old_capacity, old_capacity + extend_amount);
   47|    536|    ABSL_DCHECK_LE(new_capacity, kMaxCapacity)
  ------------------
  |  |   78|      0|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|    536|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    536|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 536]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    536|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   48|      0|        << "New capacity is too large to fit into internal representation";
   49|    536|    const size_t new_size = kRepHeaderSize + kPtrSize * new_capacity;
   50|    536|    if (arena == nullptr) {
  ------------------
  |  Branch (50:9): [True: 412, False: 124]
  ------------------
   51|    412|      const internal::SizedPtr alloc = internal::AllocateAtLeast(new_size);
   52|    412|      new_capacity = static_cast<int>((alloc.n - kRepHeaderSize) / kPtrSize);
   53|    412|      new_rep = reinterpret_cast<Rep*>(alloc.p);
   54|    412|    } else {
   55|    124|      auto* alloc = Arena::CreateArray<char>(arena, new_size);
   56|    124|      new_rep = reinterpret_cast<Rep*>(alloc);
   57|    124|    }
   58|    536|    capacity_proxy_ = new_capacity - kSSOCapacity;
   59|    536|  }
   60|       |
   61|    536|  if (using_sso()) {
  ------------------
  |  Branch (61:7): [True: 417, False: 119]
  ------------------
   62|    417|    new_rep->allocated_size = tagged_rep_or_elem_ != nullptr ? 1 : 0;
  ------------------
  |  Branch (62:31): [True: 417, False: 0]
  ------------------
   63|    417|    new_rep->elements[0] = tagged_rep_or_elem_;
   64|    417|  } else {
   65|    119|    Rep* old_rep = rep();
   66|    119|    memcpy(new_rep, old_rep,
   67|    119|           old_rep->allocated_size * kPtrSize + kRepHeaderSize);
   68|    119|    size_t old_size = old_capacity * kPtrSize + kRepHeaderSize;
   69|    119|    if (arena == nullptr) {
  ------------------
  |  Branch (69:9): [True: 75, False: 44]
  ------------------
   70|     75|      internal::SizedDelete(old_rep, old_size);
   71|     75|    } else {
   72|     44|      arena->ReturnArrayMemory(old_rep, old_size);
   73|     44|    }
   74|    119|  }
   75|       |
   76|    536|  tagged_rep_or_elem_ =
   77|    536|      reinterpret_cast<void*>(reinterpret_cast<uintptr_t>(new_rep) + 1);
   78|       |
   79|    536|  return &new_rep->elements[current_size_];
   80|    536|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase13DestroyProtosEv:
   89|  4.11k|void RepeatedPtrFieldBase::DestroyProtos() {
   90|  4.11k|  PROTOBUF_ALWAYS_INLINE_CALL Destroy<GenericTypeHandler<MessageLite>>();
  ------------------
  |  |  187|  4.11k|#define PROTOBUF_ALWAYS_INLINE_CALL [[clang::always_inline]]
  ------------------
   91|       |
   92|       |  // TODO:  Eliminate this store when invoked from the destructor,
   93|       |  // since it is dead.
   94|  4.11k|  tagged_rep_or_elem_ = nullptr;
   95|  4.11k|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase9AddStringEv:
  101|      3|void* RepeatedPtrFieldBase::AddString() {
  102|      3|  return AddInternal([](Arena* arena) { return NewStringElement(arena); });
  103|      3|}
_ZN6google8protobuf8internal34InternalOutOfLineDeleteMessageLiteEPNS0_11MessageLiteE:
  125|  4.80k|void InternalOutOfLineDeleteMessageLite(MessageLite* message) {
  126|  4.80k|  delete message;
  127|  4.80k|}
_ZN6google8protobuf8internal16NewStringElementEPNS0_5ArenaE:
  231|      3|void* NewStringElement(Arena* arena) {
  232|      3|  return Arena::Create<std::string>(arena);
  233|      3|}
repeated_ptr_field.cc:_ZZN6google8protobuf8internal20RepeatedPtrFieldBase9AddStringEvENK3$_0clEPNS0_5ArenaE:
  102|      3|  return AddInternal([](Arena* arena) { return NewStringElement(arena); });

_ZNK6google8protobuf8internal20RepeatedPtrFieldBase8CapacityEv:
  170|  5.78k|  int Capacity() const { return capacity_proxy_ + kSSOCapacity; }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase15PrepareForParseEv:
  296|      3|  bool PrepareForParse() { return allocated_size() == current_size_; }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase20AddAllocatedForParseEPv:
  301|      3|  void AddAllocatedForParse(void* value) {
  302|      3|    ABSL_DCHECK(PrepareForParse());
  ------------------
  |  |   47|      3|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      3|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      6|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      3|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      6|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      6|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      3|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      3|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      6|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      6|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  303|      3|    if (PROTOBUF_PREDICT_FALSE(SizeAtCapacity())) {
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 0, False: 3]
  |  |  ------------------
  ------------------
  304|      0|      *InternalExtend(1) = value;
  305|      0|      ++rep()->allocated_size;
  306|      3|    } else {
  307|      3|      if (using_sso()) {
  ------------------
  |  Branch (307:11): [True: 3, False: 0]
  ------------------
  308|      3|        tagged_rep_or_elem_ = value;
  309|      3|      } else {
  310|      0|        rep()->elements[current_size_] = value;
  311|      0|        ++rep()->allocated_size;
  312|      0|      }
  313|      3|    }
  314|      3|    ExchangeCurrentSize(current_size_ + 1);
  315|      3|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase8GetArenaEv:
  535|  1.42k|  inline Arena* GetArena() const { return arena_; }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase14SizeAtCapacityEv:
  605|  4.80k|  inline bool SizeAtCapacity() const {
  606|       |    // Harden invariant size() <= allocated_size() <= Capacity().
  607|  4.80k|    ABSL_DCHECK_LE(size(), allocated_size());
  ------------------
  |  |   78|  4.80k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|  4.80k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  4.80k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4.80k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  4.80k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  608|  4.80k|    ABSL_DCHECK_LE(allocated_size(), Capacity());
  ------------------
  |  |   78|  4.80k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|  4.80k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  4.80k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4.80k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  4.80k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  609|       |    // This is equivalent to `current_size_ == Capacity()`.
  610|       |    // Assuming `Capacity()` function is inlined, compiler is likely to optimize
  611|       |    // away "+ kSSOCapacity" and reduce it to "current_size_ > capacity_proxy_"
  612|       |    // which is an instruction less than "current_size_ == capacity_proxy_ + 1".
  613|  4.80k|    return current_size_ >= Capacity();
  614|  4.80k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase23AllocatedSizeAtCapacityEv:
  615|  4.09k|  inline bool AllocatedSizeAtCapacity() const {
  616|       |    // Harden invariant size() <= allocated_size() <= Capacity().
  617|  4.09k|    ABSL_DCHECK_LE(size(), allocated_size());
  ------------------
  |  |   78|  4.09k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|  4.09k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  4.09k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4.09k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  4.09k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  618|  4.09k|    ABSL_DCHECK_LE(allocated_size(), Capacity());
  ------------------
  |  |   78|  4.09k|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|  4.09k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  4.09k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4.09k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  4.09k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  619|       |    // This combines optimization mentioned in `SizeAtCapacity()` and simplifies
  620|       |    // `allocated_size()` in sso case.
  621|  4.09k|    return using_sso() ? (tagged_rep_or_elem_ != nullptr)
  ------------------
  |  Branch (621:12): [True: 3.98k, False: 118]
  ------------------
  622|  4.09k|                       : rep()->allocated_size >= Capacity();
  623|  4.09k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase14allocated_sizeEv:
  643|  12.5k|  int allocated_size() const {
  644|  12.5k|    return using_sso() ? (tagged_rep_or_elem_ != nullptr ? 1 : 0)
  ------------------
  |  Branch (644:12): [True: 11.9k, False: 589]
  |  Branch (644:27): [True: 4.02k, False: 7.96k]
  ------------------
  645|  12.5k|                       : rep()->allocated_size;
  646|  12.5k|  }
_ZN6google8protobuf8internal18GenericTypeHandlerINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEE6DeleteEPS9_PNS0_5ArenaE:
  912|      3|  static inline void Delete(Type* value, Arena* arena) {
  913|      3|    if (arena == nullptr) {
  ------------------
  |  Branch (913:9): [True: 3, False: 0]
  ------------------
  914|      3|      delete value;
  915|      3|    }
  916|      3|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEPNT_4TypeEPv:
  661|      6|  static inline Value<TypeHandler>* cast(void* element) {
  662|      6|    return reinterpret_cast<Value<TypeHandler>*>(element);
  663|      6|  }
_ZNK6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE4sizeEv:
 1340|    269|inline int RepeatedPtrField<Element>::size() const {
 1341|    269|  return RepeatedPtrFieldBase::size();
 1342|    269|}
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE5ClearEv:
 1469|     10|inline void RepeatedPtrField<Element>::Clear() {
 1470|     10|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     10|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEvv:
  265|     10|  void Clear() {
  266|     10|    const int n = current_size_;
  267|     10|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     10|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     10|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     10|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 10]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     10|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 10]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     10|  }
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3AddEv:
 1370|      3|inline Element* RepeatedPtrField<Element>::Add() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1371|      3|  return RepeatedPtrFieldBase::Add<TypeHandler>();
 1372|      3|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase3AddINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEPNT_4TypeEv:
  194|      3|  Value<TypeHandler>* Add() {
  195|      3|    if (std::is_same<Value<TypeHandler>, std::string>{}) {
  ------------------
  |  Branch (195:9): [True: 3, Folded]
  ------------------
  196|      3|      return cast<TypeHandler>(AddString());
  197|      3|    }
  198|      0|    return cast<TypeHandler>(AddMessageLite(TypeHandler::GetNewFunc()));
  199|      3|  }
_ZNK6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3GetEi:
 1346|      4|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|      4|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|      4|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEERKNT_4TypeEi:
  252|      4|  const Value<TypeHandler>& Get(int index) const {
  253|      4|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|      4|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|      4|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      4|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|      4|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|      4|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|      4|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      4|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|      4|    return *cast<TypeHandler>(element_at(index));
  256|      4|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEPKNT_4TypeEPKv:
  665|      4|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|      4|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|      4|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEE4sizeEv:
 1340|    512|inline int RepeatedPtrField<Element>::size() const {
 1341|    512|  return RepeatedPtrFieldBase::size();
 1342|    512|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEE5ClearEv:
 1469|     10|inline void RepeatedPtrField<Element>::Clear() {
 1470|     10|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     10|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_15DescriptorProtoEEEEEvv:
  265|     10|  void Clear() {
  266|     10|    const int n = current_size_;
  267|     10|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     10|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     10|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     10|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 10]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     10|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 10]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     10|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEE3GetEi:
 1346|    326|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|    326|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|    326|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_15DescriptorProtoEEEEERKNT_4TypeEi:
  252|    326|  const Value<TypeHandler>& Get(int index) const {
  253|    326|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|    326|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    326|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    326|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 326]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    326|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|    326|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|    326|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    326|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    326|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 326]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    326|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|    326|    return *cast<TypeHandler>(element_at(index));
  256|    326|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_15DescriptorProtoEEEEEPKNT_4TypeEPKv:
  665|    326|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|    326|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|    326|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEE4sizeEv:
 1340|    429|inline int RepeatedPtrField<Element>::size() const {
 1341|    429|  return RepeatedPtrFieldBase::size();
 1342|    429|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEE5ClearEv:
 1469|     10|inline void RepeatedPtrField<Element>::Clear() {
 1470|     10|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     10|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_19EnumDescriptorProtoEEEEEvv:
  265|     10|  void Clear() {
  266|     10|    const int n = current_size_;
  267|     10|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     10|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     10|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     10|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 10]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     10|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 10]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     10|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEE3GetEi:
 1346|    108|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|    108|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|    108|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_19EnumDescriptorProtoEEEEERKNT_4TypeEi:
  252|    108|  const Value<TypeHandler>& Get(int index) const {
  253|    108|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|    108|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    108|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    108|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 108]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    108|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|    108|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|    108|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    108|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    108|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 108]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    108|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|    108|    return *cast<TypeHandler>(element_at(index));
  256|    108|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_19EnumDescriptorProtoEEEEEPKNT_4TypeEPKv:
  665|    108|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|    108|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|    108|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEE4sizeEv:
 1340|     40|inline int RepeatedPtrField<Element>::size() const {
 1341|     40|  return RepeatedPtrFieldBase::size();
 1342|     40|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEE5ClearEv:
 1469|     10|inline void RepeatedPtrField<Element>::Clear() {
 1470|     10|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     10|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_22ServiceDescriptorProtoEEEEEvv:
  265|     10|  void Clear() {
  266|     10|    const int n = current_size_;
  267|     10|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     10|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     10|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     10|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 10]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     10|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 10]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     10|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEE4sizeEv:
 1340|  1.10k|inline int RepeatedPtrField<Element>::size() const {
 1341|  1.10k|  return RepeatedPtrFieldBase::size();
 1342|  1.10k|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEE5ClearEv:
 1469|     10|inline void RepeatedPtrField<Element>::Clear() {
 1470|     10|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     10|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_20FieldDescriptorProtoEEEEEvv:
  265|     10|  void Clear() {
  266|     10|    const int n = current_size_;
  267|     10|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     10|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     10|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     10|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 10]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     10|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     10|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 10]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     10|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEE3GetEi:
 1346|  1.59k|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|  1.59k|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|  1.59k|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_20FieldDescriptorProtoEEEEERKNT_4TypeEi:
  252|  1.59k|  const Value<TypeHandler>& Get(int index) const {
  253|  1.59k|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|  1.59k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|  1.59k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.59k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.59k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.59k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|  1.59k|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|  1.59k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|  1.59k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  1.59k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1.59k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  1.59k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|  1.59k|    return *cast<TypeHandler>(element_at(index));
  256|  1.59k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_20FieldDescriptorProtoEEEEEPKNT_4TypeEPKv:
  665|  1.59k|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|  1.59k|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|  1.59k|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEE4sizeEv:
 1340|    340|inline int RepeatedPtrField<Element>::size() const {
 1341|    340|  return RepeatedPtrFieldBase::size();
 1342|    340|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEE3GetEi:
 1346|     84|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|     84|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|     84|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_30DescriptorProto_ExtensionRangeEEEEERKNT_4TypeEi:
  252|     84|  const Value<TypeHandler>& Get(int index) const {
  253|     84|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|     84|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     84|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     84|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 84]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     84|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|     84|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|     84|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     84|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     84|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 84]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     84|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|     84|    return *cast<TypeHandler>(element_at(index));
  256|     84|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_30DescriptorProto_ExtensionRangeEEEEEPKNT_4TypeEPKv:
  665|     84|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|     84|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|     84|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20OneofDescriptorProtoEE4sizeEv:
 1340|    373|inline int RepeatedPtrField<Element>::size() const {
 1341|    373|  return RepeatedPtrFieldBase::size();
 1342|    373|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20OneofDescriptorProtoEE3GetEi:
 1346|     14|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|     14|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|     14|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_20OneofDescriptorProtoEEEEERKNT_4TypeEi:
  252|     14|  const Value<TypeHandler>& Get(int index) const {
  253|     14|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|     14|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     14|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     14|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 14]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     14|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|     14|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|     14|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     14|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     14|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 14]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     14|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|     14|    return *cast<TypeHandler>(element_at(index));
  256|     14|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_20OneofDescriptorProtoEEEEEPKNT_4TypeEPKv:
  665|     14|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|     14|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|     14|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_29DescriptorProto_ReservedRangeEE4sizeEv:
 1340|    280|inline int RepeatedPtrField<Element>::size() const {
 1341|    280|  return RepeatedPtrFieldBase::size();
 1342|    280|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_29DescriptorProto_ReservedRangeEE3GetEi:
 1346|     41|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|     41|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|     41|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_29DescriptorProto_ReservedRangeEEEEERKNT_4TypeEi:
  252|     41|  const Value<TypeHandler>& Get(int index) const {
  253|     41|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|     41|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     41|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     41|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 41]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     41|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|     41|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|     41|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     41|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     41|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 41]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     41|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|     41|    return *cast<TypeHandler>(element_at(index));
  256|     41|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_29DescriptorProto_ReservedRangeEEEEEPKNT_4TypeEPKv:
  665|     41|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|     41|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|     41|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEE4sizeEv:
 1340|    153|inline int RepeatedPtrField<Element>::size() const {
 1341|    153|  return RepeatedPtrFieldBase::size();
 1342|    153|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEE5ClearEv:
 1469|     19|inline void RepeatedPtrField<Element>::Clear() {
 1470|     19|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     19|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_19UninterpretedOptionEEEEEvv:
  265|     19|  void Clear() {
  266|     19|    const int n = current_size_;
  267|     19|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     19|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     19|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     19|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 19]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     19|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     19|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 19]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     19|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEE4sizeEv:
 1340|    337|inline int RepeatedPtrField<Element>::size() const {
 1341|    337|  return RepeatedPtrFieldBase::size();
 1342|    337|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEE3GetEi:
 1346|    664|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|    664|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|    664|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_24EnumValueDescriptorProtoEEEEERKNT_4TypeEi:
  252|    664|  const Value<TypeHandler>& Get(int index) const {
  253|    664|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|    664|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    664|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    664|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 664]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    664|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|    664|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|    664|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|    664|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    664|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 664]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    664|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|    664|    return *cast<TypeHandler>(element_at(index));
  256|    664|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_24EnumValueDescriptorProtoEEEEEPKNT_4TypeEPKv:
  665|    664|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|    664|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|    664|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_37EnumDescriptorProto_EnumReservedRangeEE4sizeEv:
 1340|     93|inline int RepeatedPtrField<Element>::size() const {
 1341|     93|  return RepeatedPtrFieldBase::size();
 1342|     93|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_37EnumDescriptorProto_EnumReservedRangeEE3GetEi:
 1346|      2|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|      2|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|      2|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_37EnumDescriptorProto_EnumReservedRangeEEEEERKNT_4TypeEi:
  252|      2|  const Value<TypeHandler>& Get(int index) const {
  253|      2|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|      2|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|      2|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      2|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 2]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|      2|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|      2|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|      2|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      2|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 2]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      2|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|      2|    return *cast<TypeHandler>(element_at(index));
  256|      2|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_37EnumDescriptorProto_EnumReservedRangeEEEEEPKNT_4TypeEPKv:
  665|      2|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|      2|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|      2|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEE4sizeEv:
 1340|     51|inline int RepeatedPtrField<Element>::size() const {
 1341|     51|  return RepeatedPtrFieldBase::size();
 1342|     51|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEE5ClearEv:
 1469|     17|inline void RepeatedPtrField<Element>::Clear() {
 1470|     17|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|     17|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_27FieldOptions_EditionDefaultEEEEEvv:
  265|     17|  void Clear() {
  266|     17|    const int n = current_size_;
  267|     17|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|     17|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     17|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     17|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 17]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     17|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|     17|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 17]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|     17|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEE3GetEi:
 1346|     18|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|     18|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|     18|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_27FieldOptions_EditionDefaultEEEEERKNT_4TypeEi:
  252|     18|  const Value<TypeHandler>& Get(int index) const {
  253|     18|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|     18|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|     18|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     18|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 18]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     18|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|     18|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|     18|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|     18|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     18|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 18]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     18|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|     18|    return *cast<TypeHandler>(element_at(index));
  256|     18|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_27FieldOptions_EditionDefaultEEEEEPKNT_4TypeEPKv:
  665|     18|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|     18|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|     18|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEE4sizeEv:
 1340|      9|inline int RepeatedPtrField<Element>::size() const {
 1341|      9|  return RepeatedPtrFieldBase::size();
 1342|      9|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEE5ClearEv:
 1469|      1|inline void RepeatedPtrField<Element>::Clear() {
 1470|      1|  RepeatedPtrFieldBase::Clear<TypeHandler>();
 1471|      1|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase5ClearINS1_18GenericTypeHandlerINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEEEEvv:
  265|      1|  void Clear() {
  266|      1|    const int n = current_size_;
  267|      1|    ABSL_DCHECK_GE(n, 0);
  ------------------
  |  |   82|      1|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|      1|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      1|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 1]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      1|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  268|      1|    if (n > 0) {
  ------------------
  |  Branch (268:9): [True: 0, False: 1]
  ------------------
  269|      0|      using H = CommonHandler<TypeHandler>;
  270|      0|      ClearNonEmpty<H>();
  271|      0|    }
  272|      1|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEE3GetEi:
 1346|      4|    ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1347|      4|  return RepeatedPtrFieldBase::Get<TypeHandler>(index);
 1348|      4|}
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEEEERKNT_4TypeEi:
  252|      4|  const Value<TypeHandler>& Get(int index) const {
  253|      4|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|      4|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|      4|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      4|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|      4|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|      4|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|      4|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|      4|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|      4|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|      4|    return *cast<TypeHandler>(element_at(index));
  256|      4|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEEEEPKNT_4TypeEPKv:
  665|      4|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|      4|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|      4|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEE5beginEv:
 1836|     10|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     10|  return iterator(raw_data());
 1838|     10|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_22ServiceDescriptorProtoEEC2EPKPv:
 1617|     20|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_22ServiceDescriptorProtoEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     20|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEE3endEv:
 1851|     10|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     10|  return iterator(raw_data() + size());
 1853|     10|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_22ServiceDescriptorProtoEEES7_:
 1647|     10|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     10|    return x.it_ != y.it_;
 1649|     10|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEE5beginEv:
 1836|    111|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|    111|  return iterator(raw_data());
 1838|    111|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_15DescriptorProtoEEC2EPKPv:
 1617|    222|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_15DescriptorProtoEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|    222|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEE3endEv:
 1851|    111|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|    111|  return iterator(raw_data() + size());
 1853|    111|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_15DescriptorProtoEEES7_:
 1647|    212|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|    212|    return x.it_ != y.it_;
 1649|    212|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_15DescriptorProtoEEdeEv:
 1628|    101|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEE5beginEv:
 1836|     45|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     45|  return iterator(raw_data());
 1838|     45|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_30DescriptorProto_ExtensionRangeEEC2EPKPv:
 1617|     90|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_30DescriptorProto_ExtensionRangeEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     90|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEE3endEv:
 1851|     45|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     45|  return iterator(raw_data() + size());
 1853|     45|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_30DescriptorProto_ExtensionRangeEEES7_:
 1647|     59|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     59|    return x.it_ != y.it_;
 1649|     59|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_30DescriptorProto_ExtensionRangeEEdeEv:
 1628|     14|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_30DescriptorProto_ExtensionRangeEEppEv:
 1632|     14|  iterator& operator++() {
 1633|     14|    ++it_;
 1634|     14|    return *this;
 1635|     14|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20OneofDescriptorProtoEE5beginEv:
 1836|     45|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     45|  return iterator(raw_data());
 1838|     45|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_20OneofDescriptorProtoEEC2EPKPv:
 1617|     90|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_20OneofDescriptorProtoEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     90|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20OneofDescriptorProtoEE3endEv:
 1851|     45|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     45|  return iterator(raw_data() + size());
 1853|     45|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_20OneofDescriptorProtoEEES7_:
 1647|     47|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     47|    return x.it_ != y.it_;
 1649|     47|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_20OneofDescriptorProtoEEdeEv:
 1628|      2|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_20OneofDescriptorProtoEEppEv:
 1632|      2|  iterator& operator++() {
 1633|      2|    ++it_;
 1634|      2|    return *this;
 1635|      2|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_15DescriptorProtoEEppEv:
 1632|    101|  iterator& operator++() {
 1633|    101|    ++it_;
 1634|    101|    return *this;
 1635|    101|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEE5beginEv:
 1836|     55|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     55|  return iterator(raw_data());
 1838|     55|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_19EnumDescriptorProtoEEC2EPKPv:
 1617|    110|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_19EnumDescriptorProtoEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|    110|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEE3endEv:
 1851|     55|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     55|  return iterator(raw_data() + size());
 1853|     55|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_19EnumDescriptorProtoEEES7_:
 1647|     74|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     74|    return x.it_ != y.it_;
 1649|     74|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_19EnumDescriptorProtoEEdeEv:
 1628|     19|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEE5beginEv:
 1836|     18|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     18|  return iterator(raw_data());
 1838|     18|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_24EnumValueDescriptorProtoEEC2EPKPv:
 1617|     36|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_24EnumValueDescriptorProtoEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     36|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEE3endEv:
 1851|     18|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     18|  return iterator(raw_data() + size());
 1853|     18|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_24EnumValueDescriptorProtoEEES7_:
 1647|    104|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|    104|    return x.it_ != y.it_;
 1649|    104|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_24EnumValueDescriptorProtoEEdeEv:
 1628|     86|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_24EnumValueDescriptorProtoEEppEv:
 1632|     86|  iterator& operator++() {
 1633|     86|    ++it_;
 1634|     86|    return *this;
 1635|     86|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_19EnumDescriptorProtoEEppEv:
 1632|     19|  iterator& operator++() {
 1633|     19|    ++it_;
 1634|     19|    return *this;
 1635|     19|  }
_ZNK6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE5beginEv:
 1836|     63|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     63|  return iterator(raw_data());
 1838|     63|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEC2EPKPv:
 1617|    126|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEC2IS9_TnPNS3_9enable_ifIXsr3std14is_convertibleIPT_PSA_EE5valueEvE4typeELPv0EEERKNS2_ISE_EE:
 1625|    126|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3endEv:
 1851|     63|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     63|  return iterator(raw_data() + size());
 1853|     63|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEE5beginEv:
 1836|     12|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     12|  return iterator(raw_data());
 1838|     12|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEC2EPKPv:
 1617|     20|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     20|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEE3endEv:
 1851|      8|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|      8|  return iterator(raw_data() + size());
 1853|      8|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEES7_:
 1647|     20|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     20|    return x.it_ != y.it_;
 1649|     20|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEppEv:
 1632|     20|  iterator& operator++() {
 1633|     20|    ++it_;
 1634|     20|    return *this;
 1635|     20|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEdeEv:
 1628|     35|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEE5beginEv:
 1836|    156|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|    156|  return iterator(raw_data());
 1838|    156|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_20FieldDescriptorProtoEEC2EPKPv:
 1617|    312|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_20FieldDescriptorProtoEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|    312|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEE3endEv:
 1851|    156|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|    156|  return iterator(raw_data() + size());
 1853|    156|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_20FieldDescriptorProtoEEES7_:
 1647|    363|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|    363|    return x.it_ != y.it_;
 1649|    363|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_20FieldDescriptorProtoEEppEv:
 1632|    207|  iterator& operator++() {
 1633|    207|    ++it_;
 1634|    207|    return *this;
 1635|    207|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_20FieldDescriptorProtoEEdeEv:
 1628|    207|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEESD_:
 1647|     65|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     65|    return x.it_ != y.it_;
 1649|     65|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEppEv:
 1632|      2|  iterator& operator++() {
 1633|      2|    ++it_;
 1634|      2|    return *this;
 1635|      2|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEdeEv:
 1628|      2|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE19StaticValidityCheckEv:
  938|     80|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     80|    static_assert(
  940|     80|        absl::disjunction<
  941|     80|            internal::is_supported_string_type<Element>,
  942|     80|            internal::is_supported_message_type<Element>>::value,
  943|     80|        "We only support string and Message types in RepeatedPtrField.");
  944|     80|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEE19StaticValidityCheckEv:
  938|     62|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     62|    static_assert(
  940|     62|        absl::disjunction<
  941|     62|            internal::is_supported_string_type<Element>,
  942|     62|            internal::is_supported_message_type<Element>>::value,
  943|     62|        "We only support string and Message types in RepeatedPtrField.");
  944|     62|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEE19StaticValidityCheckEv:
  938|     62|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     62|    static_assert(
  940|     62|        absl::disjunction<
  941|     62|            internal::is_supported_string_type<Element>,
  942|     62|            internal::is_supported_message_type<Element>>::value,
  943|     62|        "We only support string and Message types in RepeatedPtrField.");
  944|     62|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEE19StaticValidityCheckEv:
  938|      6|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|      6|    static_assert(
  940|      6|        absl::disjunction<
  941|      6|            internal::is_supported_string_type<Element>,
  942|      6|            internal::is_supported_message_type<Element>>::value,
  943|      6|        "We only support string and Message types in RepeatedPtrField.");
  944|      6|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEE19StaticValidityCheckEv:
  938|    118|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|    118|    static_assert(
  940|    118|        absl::disjunction<
  941|    118|            internal::is_supported_string_type<Element>,
  942|    118|            internal::is_supported_message_type<Element>>::value,
  943|    118|        "We only support string and Message types in RepeatedPtrField.");
  944|    118|  }
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     10|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEC2EPNS0_5ArenaE:
 1263|     10|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     10|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     10|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEEC2EPNS0_5ArenaE:
 1263|     10|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     10|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     10|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEEC2EPNS0_5ArenaE:
 1263|     10|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     10|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     10|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEEC2EPNS0_5ArenaE:
 1263|     10|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     10|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     10|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEEC2EPNS0_5ArenaE:
 1263|     10|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     10|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_20FieldDescriptorProtoEED2Ev:
 1285|    118|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|    118|  StaticValidityCheck();
 1287|    118|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 61, False: 57]
  ------------------
 1288|     57|#ifdef __cpp_if_constexpr
 1289|     57|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|     57|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|     57|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_22ServiceDescriptorProtoEED2Ev:
 1285|      6|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|      6|  StaticValidityCheck();
 1287|      6|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 6, False: 0]
  ------------------
 1288|      0|#ifdef __cpp_if_constexpr
 1289|      0|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|      0|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|      0|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19EnumDescriptorProtoEED2Ev:
 1285|     62|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     62|  StaticValidityCheck();
 1287|     62|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 53, False: 9]
  ------------------
 1288|      9|#ifdef __cpp_if_constexpr
 1289|      9|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|      9|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|      9|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_15DescriptorProtoEED2Ev:
 1285|     62|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     62|  StaticValidityCheck();
 1287|     62|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 48, False: 14]
  ------------------
 1288|     14|#ifdef __cpp_if_constexpr
 1289|     14|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|     14|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|     14|}
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEED2Ev:
 1285|     80|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     80|  StaticValidityCheck();
 1287|     80|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 77, False: 3]
  ------------------
 1288|      3|#ifdef __cpp_if_constexpr
 1289|       |  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|       |    DestroyProtos();
 1294|      3|  } else {
 1295|      3|    Destroy<TypeHandler>();
 1296|      3|  }
 1297|      3|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase7DestroyINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEvv:
  220|      3|  void Destroy() {
  221|      3|    ABSL_DCHECK(NeedsDestroy());
  ------------------
  |  |   47|      3|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|      3|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      6|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|      3|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|      6|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|      6|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 3, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|      3|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|      3|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 3, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      6|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|      6|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|       |
  223|       |    // TODO: arena check is redundant once all `RepeatedPtrField`s
  224|       |    // with non-null arena are owned by the arena.
  225|      3|    if (PROTOBUF_PREDICT_FALSE(arena_ != nullptr)) return;
  ------------------
  |  |  365|      3|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 3]
  |  |  |  Branch (365:54): [Folded, False: 3]
  |  |  |  Branch (365:63): [True: 0, False: 3]
  |  |  ------------------
  ------------------
  226|       |
  227|      3|    using H = CommonHandler<TypeHandler>;
  228|      3|    int n = allocated_size();
  229|      3|    void** elems = elements();
  230|      6|    for (int i = 0; i < n; i++) {
  ------------------
  |  Branch (230:21): [True: 3, False: 3]
  ------------------
  231|      3|      Delete<H>(elems[i], nullptr);
  232|      3|    }
  233|      3|    if (!using_sso()) {
  ------------------
  |  Branch (233:9): [True: 0, False: 3]
  ------------------
  234|      0|      internal::SizedDelete(rep(),
  235|      0|                            Capacity() * sizeof(elems[0]) + kRepHeaderSize);
  236|      0|    }
  237|      3|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase6DeleteINS1_18GenericTypeHandlerINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEEEEvPvPNS0_5ArenaE:
  669|      3|  static inline void Delete(void* obj, Arena* arena) {
  670|      3|    TypeHandler::Delete(cast<TypeHandler>(obj), arena);
  671|      3|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEE19StaticValidityCheckEv:
  938|     56|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     56|    static_assert(
  940|     56|        absl::disjunction<
  941|     56|            internal::is_supported_string_type<Element>,
  942|     56|            internal::is_supported_message_type<Element>>::value,
  943|     56|        "We only support string and Message types in RepeatedPtrField.");
  944|     56|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_20OneofDescriptorProtoEE19StaticValidityCheckEv:
  938|     56|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     56|    static_assert(
  940|     56|        absl::disjunction<
  941|     56|            internal::is_supported_string_type<Element>,
  942|     56|            internal::is_supported_message_type<Element>>::value,
  943|     56|        "We only support string and Message types in RepeatedPtrField.");
  944|     56|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_29DescriptorProto_ReservedRangeEE19StaticValidityCheckEv:
  938|     56|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     56|    static_assert(
  940|     56|        absl::disjunction<
  941|     56|            internal::is_supported_string_type<Element>,
  942|     56|            internal::is_supported_message_type<Element>>::value,
  943|     56|        "We only support string and Message types in RepeatedPtrField.");
  944|     56|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_29DescriptorProto_ReservedRangeEED2Ev:
 1285|     56|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     56|  StaticValidityCheck();
 1287|     56|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 49, False: 7]
  ------------------
 1288|      7|#ifdef __cpp_if_constexpr
 1289|      7|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|      7|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|      7|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_20OneofDescriptorProtoEED2Ev:
 1285|     56|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     56|  StaticValidityCheck();
 1287|     56|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 52, False: 4]
  ------------------
 1288|      4|#ifdef __cpp_if_constexpr
 1289|      4|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|      4|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|      4|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_30DescriptorProto_ExtensionRangeEED2Ev:
 1285|     56|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     56|  StaticValidityCheck();
 1287|     56|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 44, False: 12]
  ------------------
 1288|     12|#ifdef __cpp_if_constexpr
 1289|     12|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|     12|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|     12|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEE19StaticValidityCheckEv:
  938|     20|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     20|    static_assert(
  940|     20|        absl::disjunction<
  941|     20|            internal::is_supported_string_type<Element>,
  942|     20|            internal::is_supported_message_type<Element>>::value,
  943|     20|        "We only support string and Message types in RepeatedPtrField.");
  944|     20|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     19|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEEC2EPNS0_5ArenaE:
 1263|     19|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     19|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEED2Ev:
 1285|     20|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     20|  StaticValidityCheck();
 1287|     20|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 20, False: 0]
  ------------------
 1288|      0|#ifdef __cpp_if_constexpr
 1289|      0|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|      0|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|      0|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEE19StaticValidityCheckEv:
  938|     18|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     18|    static_assert(
  940|     18|        absl::disjunction<
  941|     18|            internal::is_supported_string_type<Element>,
  942|     18|            internal::is_supported_message_type<Element>>::value,
  943|     18|        "We only support string and Message types in RepeatedPtrField.");
  944|     18|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_37EnumDescriptorProto_EnumReservedRangeEE19StaticValidityCheckEv:
  938|     18|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     18|    static_assert(
  940|     18|        absl::disjunction<
  941|     18|            internal::is_supported_string_type<Element>,
  942|     18|            internal::is_supported_message_type<Element>>::value,
  943|     18|        "We only support string and Message types in RepeatedPtrField.");
  944|     18|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_37EnumDescriptorProto_EnumReservedRangeEED2Ev:
 1285|     18|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     18|  StaticValidityCheck();
 1287|     18|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 17, False: 1]
  ------------------
 1288|      1|#ifdef __cpp_if_constexpr
 1289|      1|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|      1|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|      1|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_24EnumValueDescriptorProtoEED2Ev:
 1285|     18|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     18|  StaticValidityCheck();
 1287|     18|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 0, False: 18]
  ------------------
 1288|     18|#ifdef __cpp_if_constexpr
 1289|     18|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|     18|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|     18|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEE19StaticValidityCheckEv:
  938|     17|  static constexpr PROTOBUF_ALWAYS_INLINE void StaticValidityCheck() {
  939|     17|    static_assert(
  940|     17|        absl::disjunction<
  941|     17|            internal::is_supported_string_type<Element>,
  942|     17|            internal::is_supported_message_type<Element>>::value,
  943|     17|        "We only support string and Message types in RepeatedPtrField.");
  944|     17|  }
_ZN6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|     17|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEEC2EPNS0_5ArenaE:
 1263|     17|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|     17|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEED2Ev:
 1285|     17|RepeatedPtrField<Element>::~RepeatedPtrField() {
 1286|     17|  StaticValidityCheck();
 1287|     17|  if (!NeedsDestroy()) return;
  ------------------
  |  Branch (1287:7): [True: 8, False: 9]
  ------------------
 1288|      9|#ifdef __cpp_if_constexpr
 1289|      9|  if constexpr (std::is_base_of<MessageLite, Element>::value) {
 1290|       |#else
 1291|       |  if (std::is_base_of<MessageLite, Element>::value) {
 1292|       |#endif
 1293|      9|    DestroyProtos();
 1294|       |  } else {
 1295|       |    Destroy<TypeHandler>();
 1296|       |  }
 1297|      9|}
_ZN6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEC2ENS0_8internal18InternalVisibilityEPNS0_5ArenaE:
  970|      1|      : RepeatedPtrField(arena) {}
_ZN6google8protobuf16RepeatedPtrFieldINS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEC2EPNS0_5ArenaE:
 1263|      1|    : RepeatedPtrFieldBase(arena) {
 1264|       |  // We can't have StaticValidityCheck here because that requires Element to be
 1265|       |  // a complete type, and in split repeated fields cases, we call
 1266|       |  // CreateMessage<RepeatedPtrField<T>> for incomplete Ts.
 1267|      1|}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEE5beginEv:
 1836|     19|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     19|  return iterator(raw_data());
 1838|     19|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_19UninterpretedOptionEEC2EPKPv:
 1617|     38|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_19UninterpretedOptionEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     38|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_19UninterpretedOptionEE3endEv:
 1851|     19|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     19|  return iterator(raw_data() + size());
 1853|     19|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_19UninterpretedOptionEEES7_:
 1647|     19|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     19|    return x.it_ != y.it_;
 1649|     19|  }
_ZNK6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEE5beginEv:
 1836|     17|RepeatedPtrField<Element>::begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1837|     17|  return iterator(raw_data());
 1838|     17|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorINS0_27FieldOptions_EditionDefaultEEC2EPKPv:
 1617|     34|  explicit RepeatedPtrIterator(void* const* it) : it_(it) {}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_27FieldOptions_EditionDefaultEEC2IS3_TnPNSt3__19enable_ifIXsr3std14is_convertibleIPT_PS4_EE5valueEvE4typeELPv0EEERKNS2_IS9_EE:
 1625|     34|      : it_(other.it_) {}
_ZNK6google8protobuf16RepeatedPtrFieldINS0_27FieldOptions_EditionDefaultEE3endEv:
 1851|     17|RepeatedPtrField<Element>::end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 1852|     17|  return iterator(raw_data() + size());
 1853|     17|}
_ZN6google8protobuf8internalneERKNS1_19RepeatedPtrIteratorIKNS0_27FieldOptions_EditionDefaultEEES7_:
 1647|     35|  friend bool operator!=(const iterator& x, const iterator& y) {
 1648|     35|    return x.it_ != y.it_;
 1649|     35|  }
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_27FieldOptions_EditionDefaultEEppEv:
 1632|     18|  iterator& operator++() {
 1633|     18|    ++it_;
 1634|     18|    return *this;
 1635|     18|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_27FieldOptions_EditionDefaultEEdeEv:
 1628|     18|  reference operator*() const { return *reinterpret_cast<Element*>(*it_); }
_ZN6google8protobuf8internal7memswapILm24EEEvPcS3_:
   78|    230|inline void memswap(char* PROTOBUF_RESTRICT a, char* PROTOBUF_RESTRICT b) {
   79|       |  // `PROTOBUF_RESTRICT` tells compiler that blocks do not overlapping which
   80|       |  // allows it to generate optimized code for swap_ranges.
   81|    230|  std::swap_ranges(a, a + N, b);
   82|    230|}
_ZN6google8protobuf8internal19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEpLEl:
 1666|     19|  iterator& operator+=(difference_type d) {
 1667|     19|    it_ += d;
 1668|     19|    return *this;
 1669|     19|  }
_ZN6google8protobuf8internalmiENS1_19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEES5_:
 1691|      4|  friend difference_type operator-(iterator it1, iterator it2) {
 1692|      4|    return it1.it_ - it2.it_;
 1693|      4|  }
_ZN6google8protobuf8internaleqERKNS1_19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEES7_:
 1644|      4|  friend bool operator==(const iterator& x, const iterator& y) {
 1645|      4|    return x.it_ == y.it_;
 1646|      4|  }
_ZNK6google8protobuf8internal19RepeatedPtrIteratorIKNS0_43FeatureSetDefaults_FeatureSetEditionDefaultEEptEv:
 1629|      8|  pointer operator->() const { return &(operator*()); }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_7MessageEEEEEPNT_4TypeEPv:
  661|  4.36k|  static inline Value<TypeHandler>* cast(void* element) {
  662|  4.36k|    return reinterpret_cast<Value<TypeHandler>*>(element);
  663|  4.36k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase6DeleteINS1_18GenericTypeHandlerINS0_11MessageLiteEEEEEvPvPNS0_5ArenaE:
  669|  4.80k|  static inline void Delete(void* obj, Arena* arena) {
  670|  4.80k|    TypeHandler::Delete(cast<TypeHandler>(obj), arena);
  671|  4.80k|  }
_ZN6google8protobuf8internal18GenericTypeHandlerINS0_11MessageLiteEE6DeleteEPS3_PNS0_5ArenaE:
  837|  4.80k|  static inline void Delete(Type* value, Arena* arena) {
  838|  4.80k|    if (arena != nullptr) return;
  ------------------
  |  Branch (838:9): [True: 0, False: 4.80k]
  ------------------
  839|  4.80k|#ifdef __cpp_if_constexpr
  840|  4.80k|    if constexpr (std::is_base_of<MessageLite, Type>::value) {
  841|       |      // Using virtual destructor to reduce generated code size that would have
  842|       |      // happened otherwise due to inlined `~Type()`.
  843|  4.80k|      InternalOutOfLineDeleteMessageLite(value);
  844|       |    } else {
  845|       |      delete value;
  846|       |    }
  847|       |#else
  848|       |    delete value;
  849|       |#endif
  850|  4.80k|  }
_ZNK6google8protobuf8internal20RepeatedPtrFieldBase3GetINS1_18GenericTypeHandlerINS0_7MessageEEEEERKNT_4TypeEi:
  252|  4.73k|  const Value<TypeHandler>& Get(int index) const {
  253|  4.73k|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|  4.73k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|  4.73k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  4.73k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4.73k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  4.73k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  254|  4.73k|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|  4.73k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|  4.73k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  4.73k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4.73k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  4.73k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  255|  4.73k|    return *cast<TypeHandler>(element_at(index));
  256|  4.73k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase4castINS1_18GenericTypeHandlerINS0_7MessageEEEEEPKNT_4TypeEPKv:
  665|  4.73k|  static inline const Value<TypeHandler>* cast(const void* element) {
  666|  4.73k|    return reinterpret_cast<const Value<TypeHandler>*>(element);
  667|  4.73k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase7MutableINS1_18GenericTypeHandlerINS0_7MessageEEEEEPNT_4TypeEi:
  187|  4.36k|  Value<TypeHandler>* Mutable(int index) {
  188|  4.36k|    ABSL_DCHECK_GE(index, 0);
  ------------------
  |  |   82|  4.36k|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|  4.36k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  4.36k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4.36k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  4.36k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|  4.36k|    ABSL_DCHECK_LT(index, current_size_);
  ------------------
  |  |   80|  4.36k|  ABSL_LOG_INTERNAL_DCHECK_LT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   92|  4.36k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  4.36k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4.36k]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  4.36k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|  4.36k|    return cast<TypeHandler>(element_at(index));
  191|  4.36k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase14AddFromClearedINS1_18GenericTypeHandlerINS0_7MessageEEEEEPNT_4TypeEv:
  397|  4.36k|  Value<TypeHandler>* AddFromCleared() {
  398|  4.36k|    if (current_size_ < allocated_size()) {
  ------------------
  |  Branch (398:9): [True: 0, False: 4.36k]
  ------------------
  399|      0|      return cast<TypeHandler>(
  400|      0|          element_at(ExchangeCurrentSize(current_size_ + 1)));
  401|  4.36k|    } else {
  402|  4.36k|      return nullptr;
  403|  4.36k|    }
  404|  4.36k|  }
_ZN6google8protobuf8internal20RepeatedPtrFieldBase23UnsafeArenaAddAllocatedINS1_18GenericTypeHandlerINS0_7MessageEEEEEvPNT_4TypeE:
  429|  4.36k|  void UnsafeArenaAddAllocated(Value<TypeHandler>* value) {
  430|  4.36k|    ABSL_DCHECK_NE(value, nullptr);
  ------------------
  |  |   76|  4.36k|  ABSL_LOG_INTERNAL_DCHECK_NE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   88|  4.36k|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|  4.36k|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 4.36k]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|  4.36k|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|       |    // Make room for the new pointer.
  432|  4.36k|    if (SizeAtCapacity()) {
  ------------------
  |  Branch (432:9): [True: 261, False: 4.09k]
  ------------------
  433|       |      // The array is completely full with no cleared objects, so grow it.
  434|    261|      InternalExtend(1);
  435|    261|      ++rep()->allocated_size;
  436|  4.09k|    } else if (AllocatedSizeAtCapacity()) {
  ------------------
  |  Branch (436:16): [True: 0, False: 4.09k]
  ------------------
  437|       |      // There is no more space in the pointer array because it contains some
  438|       |      // cleared objects awaiting reuse.  We don't want to grow the array in
  439|       |      // this case because otherwise a loop calling AddAllocated() followed by
  440|       |      // Clear() would leak memory.
  441|      0|      using H = CommonHandler<TypeHandler>;
  442|      0|      Delete<H>(element_at(current_size_), arena_);
  443|  4.09k|    } else if (current_size_ < allocated_size()) {
  ------------------
  |  Branch (443:16): [True: 0, False: 4.09k]
  ------------------
  444|       |      // We have some cleared objects.  We don't care about their order, so we
  445|       |      // can just move the first one to the end to make space.
  446|      0|      element_at(allocated_size()) = element_at(current_size_);
  447|      0|      ++rep()->allocated_size;
  448|  4.09k|    } else {
  449|       |      // There are no cleared objects.
  450|  4.09k|      if (!using_sso()) ++rep()->allocated_size;
  ------------------
  |  Branch (450:11): [True: 118, False: 3.98k]
  ------------------
  451|  4.09k|    }
  452|       |
  453|  4.36k|    element_at(ExchangeCurrentSize(current_size_ + 1)) = value;
  454|  4.36k|  }
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE8GetArenaEv:
 1541|      6|inline Arena* RepeatedPtrField<Element>::GetArena() {
 1542|      6|  return RepeatedPtrFieldBase::GetArena();
 1543|      6|}
_ZN6google8protobuf16RepeatedPtrFieldINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE20AddAllocatedForParseEPS8_:
 1248|      3|  void AddAllocatedForParse(Element* p) {
 1249|      3|    return RepeatedPtrFieldBase::AddAllocatedForParse(p);
 1250|      3|  }
generated_message_tctable_lite.cc:_ZN6google8protobuf8internal20RepeatedPtrFieldBase11AddInternalIZNS1_8TcParser10AddMessageEPKNS1_16TcParseTableBaseERS2_E3$_0EEPvT_:
  779|    875|void* RepeatedPtrFieldBase::AddInternal(Factory factory) {
  780|    875|  Arena* const arena = GetArena();
  781|    875|  if (tagged_rep_or_elem_ == nullptr) {
  ------------------
  |  Branch (781:7): [True: 257, False: 618]
  ------------------
  782|    257|    ExchangeCurrentSize(1);
  783|    257|    tagged_rep_or_elem_ = factory(arena);
  784|    257|    return tagged_rep_or_elem_;
  785|    257|  }
  786|    618|  absl::PrefetchToLocalCache(tagged_rep_or_elem_);
  787|    618|  if (using_sso()) {
  ------------------
  |  Branch (787:7): [True: 181, False: 437]
  ------------------
  788|    181|    if (current_size_ == 0) {
  ------------------
  |  Branch (788:9): [True: 0, False: 181]
  ------------------
  789|      0|      ExchangeCurrentSize(1);
  790|      0|      return tagged_rep_or_elem_;
  791|      0|    }
  792|    181|    void*& result = *InternalExtend(1);
  793|    181|    result = factory(arena);
  794|    181|    Rep* r = rep();
  795|    181|    r->allocated_size = 2;
  796|    181|    ExchangeCurrentSize(2);
  797|    181|    return result;
  798|    181|  }
  799|    437|  Rep* r = rep();
  800|    437|  if (PROTOBUF_PREDICT_FALSE(SizeAtCapacity())) {
  ------------------
  |  |  365|    437|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 94, False: 343]
  |  |  |  Branch (365:54): [Folded, False: 437]
  |  |  |  Branch (365:63): [True: 94, False: 343]
  |  |  ------------------
  ------------------
  801|     94|    InternalExtend(1);
  802|     94|    r = rep();
  803|    343|  } else {
  804|    343|    if (current_size_ != r->allocated_size) {
  ------------------
  |  Branch (804:9): [True: 0, False: 343]
  ------------------
  805|      0|      return r->elements[ExchangeCurrentSize(current_size_ + 1)];
  806|      0|    }
  807|    343|  }
  808|    437|  ++r->allocated_size;
  809|    437|  void*& result = r->elements[ExchangeCurrentSize(current_size_ + 1)];
  810|    437|  result = factory(arena);
  811|    437|  return result;
  812|    437|}
_ZN6google8protobuf8internal20RepeatedPtrFieldBase7DestroyINS1_18GenericTypeHandlerINS0_11MessageLiteEEEEEvv:
  220|  4.11k|  void Destroy() {
  221|  4.11k|    ABSL_DCHECK(NeedsDestroy());
  ------------------
  |  |   47|  4.11k|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  4.11k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  8.22k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  4.11k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  8.22k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  8.22k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 4.11k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  4.11k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 4.11k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  4.11k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 4.11k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  8.22k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  8.22k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|       |
  223|       |    // TODO: arena check is redundant once all `RepeatedPtrField`s
  224|       |    // with non-null arena are owned by the arena.
  225|  4.11k|    if (PROTOBUF_PREDICT_FALSE(arena_ != nullptr)) return;
  ------------------
  |  |  365|  4.11k|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 4.11k]
  |  |  |  Branch (365:54): [Folded, False: 4.11k]
  |  |  |  Branch (365:63): [True: 0, False: 4.11k]
  |  |  ------------------
  ------------------
  226|       |
  227|  4.11k|    using H = CommonHandler<TypeHandler>;
  228|  4.11k|    int n = allocated_size();
  229|  4.11k|    void** elems = elements();
  230|  8.92k|    for (int i = 0; i < n; i++) {
  ------------------
  |  Branch (230:21): [True: 4.80k, False: 4.11k]
  ------------------
  231|  4.80k|      Delete<H>(elems[i], nullptr);
  232|  4.80k|    }
  233|  4.11k|    if (!using_sso()) {
  ------------------
  |  Branch (233:9): [True: 328, False: 3.78k]
  ------------------
  234|    328|      internal::SizedDelete(rep(),
  235|    328|                            Capacity() * sizeof(elems[0]) + kRepHeaderSize);
  236|    328|    }
  237|  4.11k|  }
repeated_ptr_field.cc:_ZN6google8protobuf8internal20RepeatedPtrFieldBase11AddInternalIZNS2_9AddStringEvE3$_0EEPvT_:
  779|      3|void* RepeatedPtrFieldBase::AddInternal(Factory factory) {
  780|      3|  Arena* const arena = GetArena();
  781|      3|  if (tagged_rep_or_elem_ == nullptr) {
  ------------------
  |  Branch (781:7): [True: 3, False: 0]
  ------------------
  782|      3|    ExchangeCurrentSize(1);
  783|      3|    tagged_rep_or_elem_ = factory(arena);
  784|      3|    return tagged_rep_or_elem_;
  785|      3|  }
  786|      0|  absl::PrefetchToLocalCache(tagged_rep_or_elem_);
  787|      0|  if (using_sso()) {
  ------------------
  |  Branch (787:7): [True: 0, False: 0]
  ------------------
  788|      0|    if (current_size_ == 0) {
  ------------------
  |  Branch (788:9): [True: 0, False: 0]
  ------------------
  789|      0|      ExchangeCurrentSize(1);
  790|      0|      return tagged_rep_or_elem_;
  791|      0|    }
  792|      0|    void*& result = *InternalExtend(1);
  793|      0|    result = factory(arena);
  794|      0|    Rep* r = rep();
  795|      0|    r->allocated_size = 2;
  796|      0|    ExchangeCurrentSize(2);
  797|      0|    return result;
  798|      0|  }
  799|      0|  Rep* r = rep();
  800|      0|  if (PROTOBUF_PREDICT_FALSE(SizeAtCapacity())) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  801|      0|    InternalExtend(1);
  802|      0|    r = rep();
  803|      0|  } else {
  804|      0|    if (current_size_ != r->allocated_size) {
  ------------------
  |  Branch (804:9): [True: 0, False: 0]
  ------------------
  805|      0|      return r->elements[ExchangeCurrentSize(current_size_ + 1)];
  806|      0|    }
  807|      0|  }
  808|      0|  ++r->allocated_size;
  809|      0|  void*& result = r->elements[ExchangeCurrentSize(current_size_ + 1)];
  810|      0|  result = factory(arena);
  811|      0|  return result;
  812|      0|}

_ZN6google8protobuf8internal10ArenaBlockC2EPS2_m:
   43|     21|  ArenaBlock(ArenaBlock* next, size_t size) : next(next), size(size) {
   44|     21|    ABSL_DCHECK_GT(size, sizeof(ArenaBlock));
  ------------------
  |  |   84|     21|  ABSL_LOG_INTERNAL_DCHECK_GT_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   96|     21|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     21|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 21]
  |  |  |  |  |  |  |  Branch (56:19): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     21|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   45|     21|  }
_ZN6google8protobuf8internal10ArenaBlock7PointerEm:
   47|     59|  char* Pointer(size_t n) {
   48|     59|    ABSL_DCHECK_LE(n, size);
  ------------------
  |  |   78|     59|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|     59|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     59|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 59]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     59|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   49|     59|    return reinterpret_cast<char*>(this) + n;
   50|     59|  }
_ZN6google8protobuf8internal10ArenaBlock5LimitEv:
   51|     21|  char* Limit() { return Pointer(size & static_cast<size_t>(-8)); }
_ZNK6google8protobuf8internal10ArenaBlock8IsSentryEv:
   53|     21|  bool IsSentry() const { return size == 0; }
_ZN6google8protobuf8internal11SerialArena11CleanupListEv:
   85|      5|  void CleanupList() { cleanup_list_.Cleanup(*this); }
_ZNK6google8protobuf8internal11SerialArena14SpaceAllocatedEv:
   86|      5|  uint64_t SpaceAllocated() const {
   87|      5|    return space_allocated_.load(std::memory_order_relaxed);
   88|      5|  }
_ZN6google8protobuf8internal11SerialArena26TryAllocateFromCachedBlockEm:
   92|    125|  PROTOBUF_ALWAYS_INLINE void* TryAllocateFromCachedBlock(size_t size) {
   93|    125|    if (PROTOBUF_PREDICT_FALSE(size < 16)) return nullptr;
  ------------------
  |  |  365|    125|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 125]
  |  |  |  Branch (365:54): [Folded, False: 125]
  |  |  |  Branch (365:63): [True: 0, False: 125]
  |  |  ------------------
  ------------------
   94|       |    // We round up to the next larger block in case the memory doesn't match
   95|       |    // the pattern we are looking for.
   96|    125|    const size_t index = absl::bit_width(size - 1) - 4;
   97|       |
   98|    125|    if (PROTOBUF_PREDICT_FALSE(index >= cached_block_length_)) return nullptr;
  ------------------
  |  |  365|    125|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 15, False: 110]
  |  |  |  Branch (365:54): [Folded, False: 125]
  |  |  |  Branch (365:63): [True: 15, False: 110]
  |  |  ------------------
  ------------------
   99|    110|    auto& cached_head = cached_blocks_[index];
  100|    110|    if (cached_head == nullptr) return nullptr;
  ------------------
  |  Branch (100:9): [True: 71, False: 39]
  ------------------
  101|       |
  102|     39|    void* ret = cached_head;
  103|     39|    PROTOBUF_UNPOISON_MEMORY_REGION(ret, size);
  104|     39|    cached_head = cached_head->next;
  105|     39|    return ret;
  106|    110|  }
_ZN6google8protobuf8internal11SerialArena17ReturnArrayMemoryEPvm:
  151|     44|  void ReturnArrayMemory(void* p, size_t size) {
  152|       |    // We only need to check for 32-bit platforms.
  153|       |    // In 64-bit platforms the minimum allocation size from Repeated*Field will
  154|       |    // be 16 guaranteed.
  155|     44|    if (sizeof(void*) < 8) {
  ------------------
  |  Branch (155:9): [Folded, False: 44]
  ------------------
  156|      0|      if (PROTOBUF_PREDICT_FALSE(size < 16)) return;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  157|     44|    } else {
  158|     44|      PROTOBUF_ASSUME(size >= 16);
  ------------------
  |  |  941|     44|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  159|     44|    }
  160|       |
  161|       |    // We round down to the next smaller block in case the memory doesn't match
  162|       |    // the pattern we are looking for. eg, someone might have called Reserve()
  163|       |    // on the repeated field.
  164|     44|    const size_t index = absl::bit_width(size) - 5;
  165|       |
  166|     44|    if (PROTOBUF_PREDICT_FALSE(index >= cached_block_length_)) {
  ------------------
  |  |  365|     44|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 3, False: 41]
  |  |  |  Branch (365:54): [Folded, False: 44]
  |  |  |  Branch (365:63): [True: 3, False: 41]
  |  |  ------------------
  ------------------
  167|       |      // We can't put this object on the freelist so make this object the
  168|       |      // freelist. It is guaranteed it is larger than the one we have, and
  169|       |      // large enough to hold another allocation of `size`.
  170|      3|      CachedBlock** new_list = static_cast<CachedBlock**>(p);
  171|      3|      size_t new_size = size / sizeof(CachedBlock*);
  172|       |
  173|      3|      std::copy(cached_blocks_, cached_blocks_ + cached_block_length_,
  174|      3|                new_list);
  175|       |
  176|       |      // We need to unpoison this memory before filling it in case it has been
  177|       |      // poisoned by another sanitizer client.
  178|      3|      PROTOBUF_UNPOISON_MEMORY_REGION(
  179|      3|          new_list + cached_block_length_,
  180|      3|          (new_size - cached_block_length_) * sizeof(CachedBlock*));
  181|       |
  182|      3|      std::fill(new_list + cached_block_length_, new_list + new_size, nullptr);
  183|       |
  184|      3|      cached_blocks_ = new_list;
  185|       |      // Make the size fit in uint8_t. This is the power of two, so we don't
  186|       |      // need anything larger.
  187|      3|      cached_block_length_ =
  188|      3|          static_cast<uint8_t>(std::min(size_t{64}, new_size));
  189|       |
  190|      3|      return;
  191|      3|    }
  192|       |
  193|     41|    auto& cached_head = cached_blocks_[index];
  194|     41|    auto* new_node = static_cast<CachedBlock*>(p);
  195|     41|    new_node->next = cached_head;
  196|     41|    cached_head = new_node;
  197|     41|    PROTOBUF_POISON_MEMORY_REGION(p, size);
  198|     41|  }
_ZN6google8protobuf8internal11SerialArena20MaybeAllocateAlignedEmPPv:
  202|    559|  bool MaybeAllocateAligned(size_t n, void** out) {
  203|    559|    ABSL_DCHECK(internal::ArenaAlignDefault::IsAligned(n));
  ------------------
  |  |   47|    559|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    559|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.11k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    559|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.11k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.11k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 559, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    559|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 559]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    559|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 559, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.11k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.11k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|    559|    ABSL_DCHECK_GE(limit_, ptr());
  ------------------
  |  |   82|    559|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    559|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    559|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 559]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    559|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  205|    559|    char* ret = ptr();
  206|       |    // ret + n may point out of the block bounds, or ret may be nullptr.
  207|       |    // Both computations have undefined behavior when done on pointers,
  208|       |    // so do them on uintptr_t instead.
  209|    559|    if (PROTOBUF_PREDICT_FALSE(reinterpret_cast<uintptr_t>(ret) + n >
  ------------------
  |  |  365|    559|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 26, False: 533]
  |  |  |  Branch (365:54): [Folded, False: 559]
  |  |  |  Branch (365:63): [True: 26, False: 533]
  |  |  ------------------
  ------------------
  210|    559|                               reinterpret_cast<uintptr_t>(limit_))) {
  211|     26|      return false;
  212|     26|    }
  213|    533|    PROTOBUF_UNPOISON_MEMORY_REGION(ret, n);
  214|    533|    *out = ret;
  215|    533|    char* next = ret + n;
  216|    533|    set_ptr(next);
  217|    533|    MaybePrefetchData(next);
  218|    533|    return true;
  219|    559|  }
_ZN6google8protobuf8internal11SerialArena17MaybePrefetchImplElPKcS4_S4_:
  286|    533|                                       const char* prefetch_ptr) {
  287|    533|    if (PROTOBUF_PREDICT_TRUE(prefetch_ptr - next > prefetch_degree))
  ------------------
  |  |  364|    533|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 375, False: 158]
  |  |  |  Branch (364:53): [Folded, False: 533]
  |  |  |  Branch (364:62): [True: 375, False: 158]
  |  |  ------------------
  ------------------
  288|    375|      return prefetch_ptr;
  289|    158|    if (PROTOBUF_PREDICT_TRUE(prefetch_ptr < limit)) {
  ------------------
  |  |  364|    158|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 67, False: 91]
  |  |  |  Branch (364:53): [Folded, False: 158]
  |  |  |  Branch (364:62): [True: 67, False: 91]
  |  |  ------------------
  ------------------
  290|     67|      prefetch_ptr = std::max(next, prefetch_ptr);
  291|     67|      ABSL_DCHECK(prefetch_ptr != nullptr);
  ------------------
  |  |   47|     67|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     67|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    134|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     67|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    134|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    134|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 67, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     67|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 67]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     67|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 67, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    134|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    134|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  292|     67|      const char* end = std::min(limit, prefetch_ptr + prefetch_degree);
  293|    991|      for (; prefetch_ptr < end; prefetch_ptr += ABSL_CACHELINE_SIZE) {
  ------------------
  |  |   77|    924|#define ABSL_CACHELINE_SIZE 64
  ------------------
  |  Branch (293:14): [True: 924, False: 67]
  ------------------
  294|    924|        absl::PrefetchToLocalCacheForWrite(prefetch_ptr);
  295|    924|      }
  296|     67|    }
  297|    158|    return prefetch_ptr;
  298|    158|  }
_ZN6google8protobuf8internal11SerialArena17MaybePrefetchDataEPKc:
  300|    533|  void MaybePrefetchData(const char* next) {
  301|    533|    ABSL_DCHECK(static_cast<const void*>(prefetch_ptr_) == nullptr ||
  ------------------
  |  |   47|    533|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    533|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|  1.06k|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    533|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  1.06k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  1.06k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 533, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    533|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 533]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    533|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 533, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|  1.06k|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  1.06k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  302|    533|                static_cast<const void*>(prefetch_ptr_) >= head());
  303|    533|    prefetch_ptr_ =
  304|    533|        MaybePrefetchImpl(kPrefetchDataDegree, next, limit_, prefetch_ptr_);
  305|    533|  }
_ZN6google8protobuf8internal11SerialArena16FreeStringBlocksEv:
  327|      5|  size_t FreeStringBlocks() {
  328|       |    // On the active block delete all strings skipping the unused instances.
  329|      5|    size_t unused_bytes = string_block_unused_.load(std::memory_order_relaxed);
  330|      5|    if (StringBlock* sb = string_block_.load(std::memory_order_relaxed)) {
  ------------------
  |  Branch (330:22): [True: 4, False: 1]
  ------------------
  331|      4|      return FreeStringBlocks(sb, unused_bytes);
  332|      4|    }
  333|      1|    return 0;
  334|      5|  }
_ZN6google8protobuf8internal11SerialArena12AddSpaceUsedEm:
  338|     40|  void AddSpaceUsed(size_t space_used) {
  339|     40|    space_used_.store(space_used_.load(std::memory_order_relaxed) + space_used,
  340|     40|                      std::memory_order_relaxed);
  341|     40|  }
_ZN6google8protobuf8internal11SerialArena17AddSpaceAllocatedEm:
  344|     26|  void AddSpaceAllocated(size_t space_allocated) {
  345|     26|    space_allocated_.store(
  346|     26|        space_allocated_.load(std::memory_order_relaxed) + space_allocated,
  347|     26|        std::memory_order_relaxed);
  348|     26|  }
_ZN6google8protobuf8internal11SerialArena4headEv:
  351|     26|  ArenaBlock* head() { return head_.load(std::memory_order_relaxed); }
_ZN6google8protobuf8internal11SerialArena3ptrEv:
  356|    576|  char* ptr() { return ptr_.load(std::memory_order_relaxed); }
_ZN6google8protobuf8internal11SerialArena7set_ptrEPc:
  358|    554|  void set_ptr(char* ptr) { return ptr_.store(ptr, std::memory_order_relaxed); }
_ZN6google8protobuf8internal11SerialArena9set_rangeEPcS3_:
  359|     21|  PROTOBUF_ALWAYS_INLINE void set_range(char* ptr, char* limit) {
  360|     21|    set_ptr(ptr);
  361|     21|    prefetch_ptr_ = ptr;
  362|     21|    limit_ = limit;
  363|     21|  }
_ZN6google8protobuf8internal11SerialArena19MaybeAllocateStringERPv:
  412|    518|inline PROTOBUF_ALWAYS_INLINE bool SerialArena::MaybeAllocateString(void*& p) {
  413|       |  // Check how many unused instances are in the current block.
  414|    518|  size_t unused_bytes = string_block_unused_.load(std::memory_order_relaxed);
  415|    518|  if (PROTOBUF_PREDICT_TRUE(unused_bytes != 0)) {
  ------------------
  |  |  364|    518|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 502, False: 16]
  |  |  |  Branch (364:53): [Folded, False: 518]
  |  |  |  Branch (364:62): [True: 502, False: 16]
  |  |  ------------------
  ------------------
  416|    502|    unused_bytes -= sizeof(std::string);
  417|    502|    string_block_unused_.store(unused_bytes, std::memory_order_relaxed);
  418|    502|    p = string_block_.load(std::memory_order_relaxed)->AtOffset(unused_bytes);
  419|    502|    return true;
  420|    502|  }
  421|     16|  return false;
  422|    518|}
_ZN6google8protobuf8internal11SerialArena23AllocateFromStringBlockEv:
  425|    518|SerialArena::AllocateFromStringBlock() {
  426|    518|  void* p;
  427|    518|  if (ABSL_PREDICT_TRUE(MaybeAllocateString(p))) return p;
  ------------------
  |  |  179|    518|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 502, False: 16]
  |  |  |  Branch (179:48): [Folded, False: 518]
  |  |  |  Branch (179:57): [True: 502, False: 16]
  |  |  ------------------
  ------------------
  428|     16|  return AllocateFromStringBlockFallback();
  429|    518|}
_ZN6google8protobuf8internal11SerialArena15AllocateAlignedILNS1_16AllocationClientE0EEEPvm:
  116|    436|  void* AllocateAligned(size_t n) {
  117|    436|    ABSL_DCHECK(internal::ArenaAlignDefault::IsAligned(n));
  ------------------
  |  |   47|    436|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    436|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    872|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    436|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    872|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    872|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 436, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    436|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 436]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    436|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 436, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    872|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    872|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|    436|    ABSL_DCHECK_GE(limit_, ptr());
  ------------------
  |  |   82|    436|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    436|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    436|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 436]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    436|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|       |
  120|    436|    if (alloc_client == AllocationClient::kArray) {
  ------------------
  |  Branch (120:9): [Folded, False: 436]
  ------------------
  121|      0|      if (void* res = TryAllocateFromCachedBlock(n)) {
  ------------------
  |  Branch (121:17): [True: 0, False: 0]
  ------------------
  122|      0|        return res;
  123|      0|      }
  124|      0|    }
  125|       |
  126|    436|    void* ptr;
  127|    436|    if (PROTOBUF_PREDICT_TRUE(MaybeAllocateAligned(n, &ptr))) {
  ------------------
  |  |  364|    436|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 416, False: 20]
  |  |  |  Branch (364:53): [Folded, False: 436]
  |  |  |  Branch (364:62): [True: 416, False: 20]
  |  |  ------------------
  ------------------
  128|    416|      return ptr;
  129|    416|    }
  130|     20|    return AllocateAlignedFallback(n);
  131|    436|  }
_ZN6google8protobuf8internal11SerialArena15AllocateAlignedILNS1_16AllocationClientE1EEEPvm:
  116|    125|  void* AllocateAligned(size_t n) {
  117|    125|    ABSL_DCHECK(internal::ArenaAlignDefault::IsAligned(n));
  ------------------
  |  |   47|    125|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|    125|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|    250|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|    125|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|    250|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|    250|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 125, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|    125|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 125]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|    125|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 125, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|    250|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|    250|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|    125|    ABSL_DCHECK_GE(limit_, ptr());
  ------------------
  |  |   82|    125|  ABSL_LOG_INTERNAL_DCHECK_GE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   94|    125|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    125|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 125]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    125|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|       |
  120|    125|    if (alloc_client == AllocationClient::kArray) {
  ------------------
  |  Branch (120:9): [True: 125, Folded]
  ------------------
  121|    125|      if (void* res = TryAllocateFromCachedBlock(n)) {
  ------------------
  |  Branch (121:17): [True: 39, False: 86]
  ------------------
  122|     39|        return res;
  123|     39|      }
  124|    125|    }
  125|       |
  126|     86|    void* ptr;
  127|     86|    if (PROTOBUF_PREDICT_TRUE(MaybeAllocateAligned(n, &ptr))) {
  ------------------
  |  |  364|     86|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 85, False: 1]
  |  |  |  Branch (364:53): [Folded, False: 86]
  |  |  |  Branch (364:62): [True: 85, False: 1]
  |  |  ------------------
  ------------------
  128|     85|      return ptr;
  129|     85|    }
  130|      1|    return AllocateAlignedFallback(n);
  131|     86|  }

_ZNK6google8protobuf8internal11StringBlock14allocated_sizeEv:
   74|     10|  size_t allocated_size() const { return allocated_size_; }
_ZN6google8protobuf8internal11StringBlockC2EPS2_btt:
   94|     16|      : next_(next),
   95|     16|        allocated_size_(size),
   96|     16|        next_size_(next_size),
   97|     16|        heap_allocated_(heap_allocated) {}
_ZN6google8protobuf8internal11StringBlock8min_sizeEv:
   99|     14|  static constexpr size_type min_size() { return size_type{256}; }
_ZN6google8protobuf8internal11StringBlock8max_sizeEv:
  100|     12|  static constexpr size_type max_size() { return size_type{8192}; }
_ZNK6google8protobuf8internal11StringBlock9next_sizeEv:
  107|     12|  size_t next_size() const { return next_size_; }
_ZN6google8protobuf8internal11StringBlock11RoundedSizeEt:
  115|     16|constexpr StringBlock::size_type StringBlock::RoundedSize(size_type size) {
  116|     16|  return size - (size - sizeof(StringBlock)) % sizeof(std::string);
  117|     16|}
_ZN6google8protobuf8internal11StringBlock8NextSizeEPS2_:
  119|     16|inline size_t StringBlock::NextSize(StringBlock* block) {
  120|     16|  return block ? block->next_size() : min_size();
  ------------------
  |  Branch (120:10): [True: 12, False: 4]
  ------------------
  121|     16|}
_ZN6google8protobuf8internal11StringBlock7EmplaceEPvmPS2_:
  123|     11|inline StringBlock* StringBlock::Emplace(void* p, size_t n, StringBlock* next) {
  124|     11|  const auto count = static_cast<size_type>(n);
  125|     11|  ABSL_DCHECK_EQ(count, NextSize(next));
  ------------------
  |  |   74|     11|  ABSL_LOG_INTERNAL_DCHECK_EQ_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   86|     11|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|     11|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 11]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|     11|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  126|     11|  size_type doubled = count * 2;
  127|     11|  size_type next_size = next ? std::min(doubled, max_size()) : min_size();
  ------------------
  |  Branch (127:25): [True: 11, False: 0]
  ------------------
  128|     11|  return new (p) StringBlock(next, false, RoundedSize(count), next_size);
  129|     11|}
_ZN6google8protobuf8internal11StringBlock3NewEPS2_:
  131|      5|inline StringBlock* StringBlock::New(StringBlock* next) {
  132|       |  // Compute required size, rounding down to a multiple of sizeof(std:string)
  133|       |  // so that we can optimize the allocation path. I.e., we incur a (constant
  134|       |  // size) MOD() operation cost here to avoid any MUL() later on.
  135|      5|  size_type size = min_size();
  136|      5|  size_type next_size = min_size();
  137|      5|  if (next) {
  ------------------
  |  Branch (137:7): [True: 1, False: 4]
  ------------------
  138|      1|    size = next->next_size_;
  139|      1|    next_size = std::min<size_type>(size * 2, max_size());
  140|      1|  }
  141|      5|  size = RoundedSize(size);
  142|      5|  void* p = ::operator new(size);
  143|      5|  return new (p) StringBlock(next, true, size, next_size);
  144|      5|}
_ZN6google8protobuf8internal11StringBlock6DeleteEPS2_:
  146|     16|inline size_t StringBlock::Delete(StringBlock* block) {
  147|     16|  ABSL_DCHECK(block != nullptr);
  ------------------
  |  |   47|     16|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|     16|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|     32|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|     16|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|     32|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|     32|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 16, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|     16|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 16]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|     16|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 16, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|     32|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|     32|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|     16|  if (!block->heap_allocated_) return size_t{0};
  ------------------
  |  Branch (148:7): [True: 11, False: 5]
  ------------------
  149|      5|  size_t size = block->allocated_size();
  150|      5|  internal::SizedDelete(block, size);
  151|      5|  return size;
  152|     16|}
_ZNK6google8protobuf8internal11StringBlock4nextEv:
  154|     16|inline StringBlock* StringBlock::next() const { return next_; }
_ZNK6google8protobuf8internal11StringBlock14effective_sizeEv:
  156|     44|inline size_t StringBlock::effective_size() const {
  157|     44|  return allocated_size_ - sizeof(StringBlock);
  158|     44|}
_ZN6google8protobuf8internal11StringBlock8AtOffsetEm:
  161|    550|    size_t offset) {
  162|    550|  ABSL_DCHECK_LE(offset, effective_size());
  ------------------
  |  |   78|    550|  ABSL_LOG_INTERNAL_DCHECK_LE_IMPL((val1), #val1, (val2), #val2)
  |  |  ------------------
  |  |  |  |   90|    550|  ABSL_LOG_INTERNAL_DCHECK_NOP(val1, val2)
  |  |  |  |  ------------------
  |  |  |  |  |  |   56|    550|  while (false && ((void)(x), (void)(y), 0)) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (56:10): [Folded, False: 550]
  |  |  |  |  |  |  |  Branch (56:19): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   57|    550|  ::absl::log_internal::NullStream().InternalStream()
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  163|    550|  return reinterpret_cast<std::string*>(reinterpret_cast<char*>(this + 1) +
  164|    550|                                        offset);
  165|    550|}
_ZN6google8protobuf8internal11StringBlock5beginEv:
  167|     12|ABSL_ATTRIBUTE_RETURNS_NONNULL inline std::string* StringBlock::begin() {
  168|     12|  return AtOffset(0);
  169|     12|}
_ZN6google8protobuf8internal11StringBlock3endEv:
  171|     16|ABSL_ATTRIBUTE_RETURNS_NONNULL inline std::string* StringBlock::end() {
  172|     16|  return AtOffset(effective_size());
  173|     16|}

_ZN6google8protobuf6ghtonlEj:
  106|     12|uint32_t ghtonl(uint32_t x) {
  107|     12|  union {
  108|     12|    uint32_t result;
  109|     12|    uint8_t result_array[4];
  110|     12|  };
  111|     12|  result_array[0] = static_cast<uint8_t>(x >> 24);
  112|     12|  result_array[1] = static_cast<uint8_t>((x >> 16) & 0xFF);
  113|     12|  result_array[2] = static_cast<uint8_t>((x >> 8) & 0xFF);
  114|     12|  result_array[3] = static_cast<uint8_t>(x & 0xFF);
  115|     12|  return result;
  116|     12|}

_ZN6google8protobuf10TextFormat6ParserC2Ev:
 1786|  12.0k|    : error_collector_(nullptr),
 1787|  12.0k|      finder_(nullptr),
 1788|  12.0k|      parse_info_tree_(nullptr),
 1789|  12.0k|      allow_partial_(false),
 1790|  12.0k|      allow_case_insensitive_field_(false),
 1791|  12.0k|      allow_unknown_field_(false),
 1792|  12.0k|      allow_unknown_extension_(false),
 1793|  12.0k|      allow_unknown_enum_(false),
 1794|  12.0k|      allow_field_number_(false),
 1795|  12.0k|      allow_relaxed_whitespace_(false),
 1796|  12.0k|      allow_singular_overwrites_(false),
 1797|  12.0k|      recursion_limit_(std::numeric_limits<int>::max()) {}
_ZN6google8protobuf10TextFormat6ParserD2Ev:
 1799|  12.0k|TextFormat::Parser::~Parser() {}
_ZN6google8protobuf10TextFormat6Parser5ParseEPNS0_2io19ZeroCopyInputStreamEPNS0_7MessageE:
 1819|  12.0k|                               Message* output) {
 1820|  12.0k|  output->Clear();
 1821|       |
 1822|  12.0k|  ParserImpl::SingularOverwritePolicy overwrites_policy =
 1823|  12.0k|      allow_singular_overwrites_ ? ParserImpl::ALLOW_SINGULAR_OVERWRITES
  ------------------
  |  Branch (1823:7): [True: 0, False: 12.0k]
  ------------------
 1824|  12.0k|                                 : ParserImpl::FORBID_SINGULAR_OVERWRITES;
 1825|       |
 1826|  12.0k|  ParserImpl parser(output->GetDescriptor(), input, error_collector_, finder_,
 1827|  12.0k|                    parse_info_tree_, overwrites_policy,
 1828|  12.0k|                    allow_case_insensitive_field_, allow_unknown_field_,
 1829|  12.0k|                    allow_unknown_extension_, allow_unknown_enum_,
 1830|  12.0k|                    allow_field_number_, allow_relaxed_whitespace_,
 1831|  12.0k|                    allow_partial_, recursion_limit_, no_op_fields_);
 1832|  12.0k|  return MergeUsingImpl(input, output, &parser);
 1833|  12.0k|}
_ZN6google8protobuf10TextFormat6Parser15ParseFromStringENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPNS0_7MessageE:
 1836|  12.0k|                                         Message* output) {
 1837|  12.0k|  DO(CheckParseInputSize(input, error_collector_));
  ------------------
  |  |  329|  12.0k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 12.0k, False: 0]
  |  |  ------------------
  |  |  330|  12.0k|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
 1838|  12.0k|  io::ArrayInputStream input_stream(input.data(), input.size());
 1839|  12.0k|  return Parse(&input_stream, output);
 1840|  12.0k|}
_ZN6google8protobuf10TextFormat6Parser14MergeUsingImplEPNS0_2io19ZeroCopyInputStreamEPNS0_7MessageEPNS2_10ParserImplE:
 1869|  12.0k|                                        ParserImpl* parser_impl) {
 1870|  12.0k|  if (!parser_impl->Parse(output)) return false;
  ------------------
  |  Branch (1870:7): [True: 12, False: 12.0k]
  ------------------
 1871|  12.0k|  if (!allow_partial_ && !output->IsInitialized()) {
  ------------------
  |  Branch (1871:7): [True: 0, False: 12.0k]
  |  Branch (1871:26): [True: 0, False: 0]
  ------------------
 1872|      0|    std::vector<std::string> missing_fields;
 1873|      0|    output->FindInitializationErrors(&missing_fields);
 1874|      0|    parser_impl->ReportError(-1, 0,
 1875|      0|                             absl::StrCat("Message missing required fields: ",
 1876|      0|                                          absl::StrJoin(missing_fields, ", ")));
 1877|      0|    return false;
 1878|      0|  }
 1879|  12.0k|  return true;
 1880|  12.0k|}
_ZN6google8protobuf10TextFormat6Parser10ParserImplC2EPKNS0_10DescriptorEPNS0_2io19ZeroCopyInputStreamEPNS7_14ErrorCollectorEPKNS1_6FinderEPNS1_13ParseInfoTreeENS3_23SingularOverwritePolicyEbbbbbbbiPNS2_19UnsetFieldsMetadataE:
  355|  12.0k|      : error_collector_(error_collector),
  356|  12.0k|        finder_(finder),
  357|  12.0k|        parse_info_tree_(parse_info_tree),
  358|  12.0k|        tokenizer_error_collector_(this),
  359|  12.0k|        tokenizer_(input_stream, &tokenizer_error_collector_),
  360|  12.0k|        root_message_type_(root_message_type),
  361|  12.0k|        singular_overwrite_policy_(singular_overwrite_policy),
  362|  12.0k|        allow_case_insensitive_field_(allow_case_insensitive_field),
  363|  12.0k|        allow_unknown_field_(allow_unknown_field),
  364|  12.0k|        allow_unknown_extension_(allow_unknown_extension),
  365|  12.0k|        allow_unknown_enum_(allow_unknown_enum),
  366|  12.0k|        allow_field_number_(allow_field_number),
  367|  12.0k|        allow_partial_(allow_partial),
  368|  12.0k|        initial_recursion_limit_(recursion_limit),
  369|  12.0k|        recursion_limit_(recursion_limit),
  370|  12.0k|        had_silent_marker_(false),
  371|  12.0k|        had_errors_(false),
  372|  12.0k|        no_op_fields_(no_op_fields) {
  373|       |    // For backwards-compatibility with proto1, we need to allow the 'f' suffix
  374|       |    // for floats.
  375|  12.0k|    tokenizer_.set_allow_f_after_float(true);
  376|       |
  377|       |    // '#' starts a comment.
  378|  12.0k|    tokenizer_.set_comment_style(io::Tokenizer::SH_COMMENT_STYLE);
  379|       |
  380|  12.0k|    if (allow_relaxed_whitespace) {
  ------------------
  |  Branch (380:9): [True: 0, False: 12.0k]
  ------------------
  381|      0|      tokenizer_.set_require_space_after_number(false);
  382|      0|      tokenizer_.set_allow_multiline_strings(true);
  383|      0|    }
  384|       |
  385|       |    // Consume the starting token.
  386|  12.0k|    tokenizer_.Next();
  387|  12.0k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl20ParserErrorCollectorC2EPS3_:
 1411|  12.0k|        : parser_(parser) {}
_ZN6google8protobuf10TextFormat6Parser10ParserImpl20ParserErrorCollector11RecordErrorEiiNSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
 1417|      7|    void RecordError(int line, int column, absl::string_view message) override {
 1418|      7|      parser_->ReportError(line, column, message);
 1419|      7|    }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl13ReportWarningEiiNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEE:
  442|     36|  void ReportWarning(int line, int col, const absl::string_view message) {
  443|     36|    if (error_collector_ == nullptr) {
  ------------------
  |  Branch (443:9): [True: 36, False: 0]
  ------------------
  444|     36|      if (line >= 0) {
  ------------------
  |  Branch (444:11): [True: 36, False: 0]
  ------------------
  445|     48|        ABSL_LOG_EVERY_POW_2(WARNING)
  ------------------
  |  |   57|      6|  ABSL_LOG_INTERNAL_LOG_EVERY_POW_2_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |  104|      6|  ABSL_LOG_INTERNAL_CONDITION##severity(STATEFUL, true)(EveryPow2) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  168|     36|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   86|     36|  for (bool absl_log_internal_stateful_condition_do_log(condition); \
  |  |  |  |  |  |  |  |   87|     72|       absl_log_internal_stateful_condition_do_log;                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (87:8): [True: 36, False: 36]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   88|     36|       absl_log_internal_stateful_condition_do_log = false)         \
  |  |  |  |  |  |  |  |   89|     36|  ABSL_LOG_INTERNAL_STATEFUL_CONDITION_IMPL
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   91|     36|  for (static ::absl::log_internal::Log##kind##State                      \
  |  |  |  |  |  |  |  |  |  |   92|     36|           absl_log_internal_stateful_condition_state;                    \
  |  |  |  |  |  |  |  |  |  |   93|     42|       absl_log_internal_stateful_condition_do_log &&                     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (93:8): [True: 36, False: 6]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   94|     42|       absl_log_internal_stateful_condition_state.ShouldLog(__VA_ARGS__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (94:8): [True: 6, False: 30]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|     36|       absl_log_internal_stateful_condition_do_log = false)               \
  |  |  |  |  |  |  |  |  |  |   96|     36|    for (const uint32_t COUNTER ABSL_ATTRIBUTE_UNUSED =                   \
  |  |  |  |  |  |  |  |  |  |   97|      6|             absl_log_internal_stateful_condition_state.counter();        \
  |  |  |  |  |  |  |  |  |  |   98|     12|         absl_log_internal_stateful_condition_do_log;                     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (98:10): [True: 6, False: 6]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   99|      6|         absl_log_internal_stateful_condition_do_log = false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  105|      6|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|     66|  ::absl::log_internal::LogMessage(       \
  |  |  |  |  |  |   50|     66|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::WarningTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  446|     48|            << "Warning parsing text-format " << root_message_type_->full_name()
  447|     48|            << ": " << (line + 1) << ":" << (col + 1) << " (N = " << COUNTER
  448|     48|            << "): " << message;
  449|     36|      } else {
  450|      0|        ABSL_LOG_EVERY_POW_2(WARNING)
  ------------------
  |  |   57|      0|  ABSL_LOG_INTERNAL_LOG_EVERY_POW_2_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |  104|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATEFUL, true)(EveryPow2) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  168|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   86|      0|  for (bool absl_log_internal_stateful_condition_do_log(condition); \
  |  |  |  |  |  |  |  |   87|      0|       absl_log_internal_stateful_condition_do_log;                 \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (87:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   88|      0|       absl_log_internal_stateful_condition_do_log = false)         \
  |  |  |  |  |  |  |  |   89|      0|  ABSL_LOG_INTERNAL_STATEFUL_CONDITION_IMPL
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   91|      0|  for (static ::absl::log_internal::Log##kind##State                      \
  |  |  |  |  |  |  |  |  |  |   92|      0|           absl_log_internal_stateful_condition_state;                    \
  |  |  |  |  |  |  |  |  |  |   93|      0|       absl_log_internal_stateful_condition_do_log &&                     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (93:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   94|      0|       absl_log_internal_stateful_condition_state.ShouldLog(__VA_ARGS__); \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (94:8): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   95|      0|       absl_log_internal_stateful_condition_do_log = false)               \
  |  |  |  |  |  |  |  |  |  |   96|      0|    for (const uint32_t COUNTER ABSL_ATTRIBUTE_UNUSED =                   \
  |  |  |  |  |  |  |  |  |  |   97|      0|             absl_log_internal_stateful_condition_state.counter();        \
  |  |  |  |  |  |  |  |  |  |   98|      0|         absl_log_internal_stateful_condition_do_log;                     \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (98:10): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   99|      0|         absl_log_internal_stateful_condition_do_log = false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  105|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   49|      0|  ::absl::log_internal::LogMessage(       \
  |  |  |  |  |  |   50|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::WarningTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  451|      0|            << "Warning parsing text-format " << root_message_type_->full_name()
  452|      0|            << " (N = " << COUNTER << "): " << message;
  453|      0|      }
  454|     36|    } else {
  455|      0|      error_collector_->RecordWarning(line, col, message);
  456|      0|    }
  457|     36|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImplD2Ev:
  390|  12.0k|  ~ParserImpl() {}
_ZN6google8protobuf10TextFormat6Parser10ParserImpl5ParseEPNS0_7MessageE:
  396|  12.0k|  bool Parse(Message* output) {
  397|       |    // Consume fields until we cannot do so anymore.
  398|  32.5k|    while (true) {
  ------------------
  |  Branch (398:12): [True: 32.5k, Folded]
  ------------------
  399|  32.5k|      if (LookingAtType(io::Tokenizer::TYPE_END)) {
  ------------------
  |  Branch (399:11): [True: 12.0k, False: 20.5k]
  ------------------
  400|       |        // Ensures recursion limit properly unwinded, but only for success
  401|       |        // cases. This implicitly avoids the check when `Parse` returns false
  402|       |        // via `DO(...)`.
  403|  24.1k|        ABSL_DCHECK(had_errors_ || recursion_limit_ == initial_recursion_limit_)
  ------------------
  |  |   47|      0|  ABSL_LOG_INTERNAL_DCHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   43|  12.0k|  ABSL_LOG_INTERNAL_CHECK_IMPL(true || (condition), "true")
  |  |  |  |  ------------------
  |  |  |  |  |  |   26|      0|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  172|  12.0k|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   65|  24.1k|  switch (0)                                             \
  |  |  |  |  |  |  |  |  |  |   66|  24.1k|  case 0:                                                \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 12.0k, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   67|  12.0k|  default:                                               \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 12.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |   68|  12.0k|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 12.0k, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, Folded]
  |  |  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   27|      0|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |  |  |   28|  12.0k|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   66|  12.0k|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  404|  24.1k|            << "Recursion limit at end of parse should be "
  405|  24.1k|            << initial_recursion_limit_ << ", but was " << recursion_limit_
  406|  24.1k|            << ". Difference of " << initial_recursion_limit_ - recursion_limit_
  407|  24.1k|            << " stack frames not accounted for stack unwind.";
  408|       |
  409|  12.0k|        return !had_errors_;
  410|  12.0k|      }
  411|       |
  412|  20.5k|      DO(ConsumeField(output));
  ------------------
  |  |  329|  20.5k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 20.4k, False: 11]
  |  |  ------------------
  |  |  330|  20.4k|  } else {            \
  |  |  331|     11|    return false;     \
  |  |  332|     11|  }
  ------------------
  413|  20.4k|    }
  414|  12.0k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl13LookingAtTypeENS0_2io9Tokenizer9TokenTypeE:
 1084|   248k|  bool LookingAtType(io::Tokenizer::TokenType token_type) {
 1085|   248k|    return tokenizer_.current().type == token_type;
 1086|   248k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl12ConsumeFieldEPNS0_7MessageE:
  506|  63.5k|  bool ConsumeField(Message* message) {
  507|  63.5k|    const Reflection* reflection = message->GetReflection();
  508|  63.5k|    const Descriptor* descriptor = message->GetDescriptor();
  509|       |
  510|  63.5k|    std::string field_name;
  511|  63.5k|    bool reserved_field = false;
  512|  63.5k|    const FieldDescriptor* field = nullptr;
  513|  63.5k|    int start_line = tokenizer_.current().line;
  514|  63.5k|    int start_column = tokenizer_.current().column;
  515|       |
  516|  63.5k|    const FieldDescriptor* any_type_url_field;
  517|  63.5k|    const FieldDescriptor* any_value_field;
  518|  63.5k|    if (internal::GetAnyFieldDescriptors(*message, &any_type_url_field,
  ------------------
  |  Branch (518:9): [True: 0, False: 63.5k]
  |  Branch (518:9): [True: 0, False: 63.5k]
  ------------------
  519|  63.5k|                                         &any_value_field) &&
  520|      0|        TryConsume("[")) {
  ------------------
  |  Branch (520:9): [True: 0, False: 0]
  ------------------
  521|      0|      std::string full_type_name, prefix;
  522|      0|      DO(ConsumeAnyTypeUrl(&full_type_name, &prefix));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  523|      0|      std::string prefix_and_full_type_name =
  524|      0|          absl::StrCat(prefix, full_type_name);
  525|      0|      DO(ConsumeBeforeWhitespace("]"));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  526|      0|      TryConsumeWhitespace();
  527|       |      // ':' is optional between message labels and values.
  528|      0|      if (TryConsumeBeforeWhitespace(":")) {
  ------------------
  |  Branch (528:11): [True: 0, False: 0]
  ------------------
  529|      0|        TryConsumeWhitespace();
  530|      0|      }
  531|      0|      std::string serialized_value;
  532|      0|      const Descriptor* value_descriptor =
  533|      0|          finder_ ? finder_->FindAnyType(*message, prefix, full_type_name)
  ------------------
  |  Branch (533:11): [True: 0, False: 0]
  ------------------
  534|      0|                  : DefaultFinderFindAnyType(*message, prefix, full_type_name);
  535|      0|      if (value_descriptor == nullptr) {
  ------------------
  |  Branch (535:11): [True: 0, False: 0]
  ------------------
  536|      0|        ReportError(absl::StrCat("Could not find type \"",
  537|      0|                                 prefix_and_full_type_name,
  538|      0|                                 "\" stored in google.protobuf.Any."));
  539|      0|        return false;
  540|      0|      }
  541|      0|      DO(ConsumeAnyValue(value_descriptor, &serialized_value));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  542|      0|      if (singular_overwrite_policy_ == FORBID_SINGULAR_OVERWRITES) {
  ------------------
  |  Branch (542:11): [True: 0, False: 0]
  ------------------
  543|       |        // Fail if any_type_url_field has already been specified.
  544|      0|        if ((!any_type_url_field->is_repeated() &&
  ------------------
  |  Branch (544:14): [True: 0, False: 0]
  ------------------
  545|      0|             reflection->HasField(*message, any_type_url_field)) ||
  ------------------
  |  Branch (545:14): [True: 0, False: 0]
  ------------------
  546|      0|            (!any_value_field->is_repeated() &&
  ------------------
  |  Branch (546:14): [True: 0, False: 0]
  ------------------
  547|      0|             reflection->HasField(*message, any_value_field))) {
  ------------------
  |  Branch (547:14): [True: 0, False: 0]
  ------------------
  548|      0|          ReportError("Non-repeated Any specified multiple times.");
  549|      0|          return false;
  550|      0|        }
  551|      0|      }
  552|      0|      reflection->SetString(message, any_type_url_field,
  553|      0|                            std::move(prefix_and_full_type_name));
  554|      0|      reflection->SetString(message, any_value_field,
  555|      0|                            std::move(serialized_value));
  556|      0|      return true;
  557|      0|    }
  558|  63.5k|    if (TryConsume("[")) {
  ------------------
  |  Branch (558:9): [True: 0, False: 63.5k]
  ------------------
  559|       |      // Extension.
  560|      0|      DO(ConsumeFullTypeName(&field_name));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  561|      0|      DO(ConsumeBeforeWhitespace("]"));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  562|      0|      TryConsumeWhitespace();
  563|       |
  564|      0|      field = finder_ ? finder_->FindExtension(message, field_name)
  ------------------
  |  Branch (564:15): [True: 0, False: 0]
  ------------------
  565|      0|                      : DefaultFinderFindExtension(message, field_name);
  566|       |
  567|      0|      if (field == nullptr) {
  ------------------
  |  Branch (567:11): [True: 0, False: 0]
  ------------------
  568|      0|        if (!allow_unknown_field_ && !allow_unknown_extension_) {
  ------------------
  |  Branch (568:13): [True: 0, False: 0]
  |  Branch (568:38): [True: 0, False: 0]
  ------------------
  569|      0|          ReportError(absl::StrCat("Extension \"", field_name,
  570|      0|                                   "\" is not defined or "
  571|      0|                                   "is not an extension of \"",
  572|      0|                                   descriptor->full_name(), "\"."));
  573|      0|          return false;
  574|      0|        } else {
  575|      0|          ReportWarning(absl::StrCat(
  576|      0|              "Ignoring extension \"", field_name,
  577|      0|              "\" which is not defined or is not an extension of \"",
  578|      0|              descriptor->full_name(), "\"."));
  579|      0|        }
  580|      0|      }
  581|  63.5k|    } else {
  582|  63.5k|      DO(ConsumeIdentifierBeforeWhitespace(&field_name));
  ------------------
  |  |  329|  63.5k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 63.5k, False: 0]
  |  |  ------------------
  |  |  330|  63.5k|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  583|  63.5k|      TryConsumeWhitespace();
  584|       |
  585|  63.5k|      int32_t field_number;
  586|  63.5k|      if (allow_field_number_ && absl::SimpleAtoi(field_name, &field_number)) {
  ------------------
  |  Branch (586:11): [True: 0, False: 63.5k]
  |  Branch (586:34): [True: 0, False: 0]
  ------------------
  587|      0|        if (descriptor->IsExtensionNumber(field_number)) {
  ------------------
  |  Branch (587:13): [True: 0, False: 0]
  ------------------
  588|      0|          field = finder_
  ------------------
  |  Branch (588:19): [True: 0, False: 0]
  ------------------
  589|      0|                      ? finder_->FindExtensionByNumber(descriptor, field_number)
  590|      0|                      : DefaultFinderFindExtensionByNumber(descriptor,
  591|      0|                                                           field_number);
  592|      0|        } else if (descriptor->IsReservedNumber(field_number)) {
  ------------------
  |  Branch (592:20): [True: 0, False: 0]
  ------------------
  593|      0|          reserved_field = true;
  594|      0|        } else {
  595|      0|          field = descriptor->FindFieldByNumber(field_number);
  596|      0|        }
  597|  63.5k|      } else {
  598|  63.5k|        field = descriptor->FindFieldByName(field_name);
  599|       |        // Group-like delimited fields will accept both the capitalized type
  600|       |        // names as well.
  601|  63.5k|        if (field == nullptr) {
  ------------------
  |  Branch (601:13): [True: 36, False: 63.4k]
  ------------------
  602|     36|          std::string lower_field_name = field_name;
  603|     36|          absl::AsciiStrToLower(&lower_field_name);
  604|     36|          field = descriptor->FindFieldByName(lower_field_name);
  605|       |          // If the case-insensitive match worked but the field is NOT a group,
  606|     36|          if (field != nullptr && !internal::cpp::IsGroupLike(*field)) {
  ------------------
  |  Branch (606:15): [True: 0, False: 36]
  |  Branch (606:35): [True: 0, False: 0]
  ------------------
  607|      0|            field = nullptr;
  608|      0|          }
  609|     36|          if (field != nullptr && field->message_type()->name() != field_name) {
  ------------------
  |  Branch (609:15): [True: 0, False: 36]
  |  Branch (609:35): [True: 0, False: 0]
  ------------------
  610|      0|            field = nullptr;
  611|      0|          }
  612|     36|        }
  613|       |
  614|  63.5k|        if (field == nullptr && allow_case_insensitive_field_) {
  ------------------
  |  Branch (614:13): [True: 36, False: 63.4k]
  |  Branch (614:33): [True: 0, False: 36]
  ------------------
  615|      0|          std::string lower_field_name = field_name;
  616|      0|          absl::AsciiStrToLower(&lower_field_name);
  617|      0|          field = descriptor->FindFieldByLowercaseName(lower_field_name);
  618|      0|        }
  619|       |
  620|  63.5k|        if (field == nullptr) {
  ------------------
  |  Branch (620:13): [True: 36, False: 63.4k]
  ------------------
  621|     36|          reserved_field = descriptor->IsReservedName(field_name);
  622|     36|        }
  623|  63.5k|      }
  624|  63.5k|      if (field == nullptr && !reserved_field) {
  ------------------
  |  Branch (624:11): [True: 36, False: 63.4k]
  |  Branch (624:31): [True: 36, False: 0]
  ------------------
  625|     36|        if (!allow_unknown_field_) {
  ------------------
  |  Branch (625:13): [True: 0, False: 36]
  ------------------
  626|      0|          ReportError(absl::StrCat("Message type \"", descriptor->full_name(),
  627|      0|                                   "\" has no field named \"", field_name,
  628|      0|                                   "\"."));
  629|      0|          return false;
  630|     36|        } else {
  631|     36|          ReportWarning(absl::StrCat("Message type \"", descriptor->full_name(),
  632|     36|                                     "\" has no field named \"", field_name,
  633|     36|                                     "\"."));
  634|     36|        }
  635|     36|      }
  636|  63.5k|    }
  637|       |
  638|       |    // Skips unknown or reserved fields.
  639|  63.5k|    if (field == nullptr) {
  ------------------
  |  Branch (639:9): [True: 36, False: 63.4k]
  ------------------
  640|     36|      ABSL_CHECK(allow_unknown_field_ || allow_unknown_extension_ ||
  ------------------
  |  |   41|     36|  ABSL_LOG_INTERNAL_CHECK_IMPL((condition), #condition)
  |  |  ------------------
  |  |  |  |   26|     72|  ABSL_LOG_INTERNAL_CONDITION_FATAL(STATELESS,                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|     36|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     72|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     72|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 36, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     36|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 36]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|    144|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [True: 36, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 36, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  Branch (68:7): [Folded, False: 36]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   27|     72|                                    ABSL_PREDICT_FALSE(!(condition))) \
  |  |  |  |   28|     72|  ABSL_LOG_INTERNAL_CHECK(condition_text).InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   66|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__, failure_message)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  641|     36|                 reserved_field);
  642|       |
  643|       |      // Try to guess the type of this field.
  644|       |      // If this field is not a message, there should be a ":" between the
  645|       |      // field name and the field value and also the field value should not
  646|       |      // start with "{" or "<" which indicates the beginning of a message body.
  647|       |      // If there is no ":" or there is a "{" or "<" after ":", this field has
  648|       |      // to be a message or the input is ill-formed.
  649|     36|      if (TryConsumeBeforeWhitespace(":")) {
  ------------------
  |  Branch (649:11): [True: 23, False: 13]
  ------------------
  650|     23|        TryConsumeWhitespace();
  651|     23|        if (!LookingAt("{") && !LookingAt("<")) {
  ------------------
  |  Branch (651:13): [True: 23, False: 0]
  |  Branch (651:13): [True: 23, False: 0]
  |  Branch (651:32): [True: 23, False: 0]
  ------------------
  652|     23|          return SkipFieldValue();
  653|     23|        }
  654|     23|      }
  655|     13|      return SkipFieldMessage();
  656|     36|    }
  657|       |
  658|  63.4k|    if (field->options().deprecated()) {
  ------------------
  |  Branch (658:9): [True: 0, False: 63.4k]
  ------------------
  659|      0|      ReportWarning(absl::StrCat("text format contains deprecated field \"",
  660|      0|                                 field_name, "\""));
  661|      0|    }
  662|       |
  663|  63.4k|    if (singular_overwrite_policy_ == FORBID_SINGULAR_OVERWRITES) {
  ------------------
  |  Branch (663:9): [True: 63.4k, False: 0]
  ------------------
  664|       |      // Fail if the field is not repeated and it has already been specified.
  665|  63.4k|      if (!field->is_repeated() && reflection->HasField(*message, field)) {
  ------------------
  |  Branch (665:11): [True: 59.1k, False: 4.36k]
  |  Branch (665:36): [True: 0, False: 59.1k]
  ------------------
  666|      0|        ReportError(absl::StrCat("Non-repeated field \"", field_name,
  667|      0|                                 "\" is specified multiple times."));
  668|      0|        return false;
  669|      0|      }
  670|       |      // Fail if the field is a member of a oneof and another member has already
  671|       |      // been specified.
  672|  63.4k|      const OneofDescriptor* oneof = field->containing_oneof();
  673|  63.4k|      if (oneof != nullptr && reflection->HasOneof(*message, oneof)) {
  ------------------
  |  Branch (673:11): [True: 1.46k, False: 62.0k]
  |  Branch (673:31): [True: 0, False: 1.46k]
  ------------------
  674|      0|        const FieldDescriptor* other_field =
  675|      0|            reflection->GetOneofFieldDescriptor(*message, oneof);
  676|      0|        ReportError(absl::StrCat("Field \"", field_name,
  677|      0|                                 "\" is specified along with "
  678|      0|                                 "field \"",
  679|      0|                                 other_field->name(),
  680|      0|                                 "\", another member "
  681|      0|                                 "of oneof \"",
  682|      0|                                 oneof->name(), "\"."));
  683|      0|        return false;
  684|      0|      }
  685|  63.4k|    }
  686|       |
  687|       |    // Perform special handling for embedded message types.
  688|  63.4k|    if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
  ------------------
  |  Branch (688:9): [True: 37.0k, False: 26.3k]
  ------------------
  689|       |      // ':' is optional here.
  690|  37.0k|      bool consumed_semicolon = TryConsumeBeforeWhitespace(":");
  691|  37.0k|      if (consumed_semicolon) {
  ------------------
  |  Branch (691:11): [True: 6, False: 37.0k]
  ------------------
  692|      6|        TryConsumeWhitespace();
  693|      6|      }
  694|  37.0k|      if (consumed_semicolon && field->options().weak() &&
  ------------------
  |  Branch (694:11): [True: 6, False: 37.0k]
  |  Branch (694:33): [True: 0, False: 6]
  ------------------
  695|      0|          LookingAtType(io::Tokenizer::TYPE_STRING)) {
  ------------------
  |  Branch (695:11): [True: 0, False: 0]
  ------------------
  696|       |        // we are getting a bytes string for a weak field.
  697|      0|        std::string tmp;
  698|      0|        DO(ConsumeString(&tmp));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  699|      0|        MessageFactory* factory =
  700|      0|            finder_ ? finder_->FindExtensionFactory(field) : nullptr;
  ------------------
  |  Branch (700:13): [True: 0, False: 0]
  ------------------
  701|      0|        reflection->MutableMessage(message, field, factory)
  702|      0|            ->ParseFromString(tmp);
  703|      0|        goto label_skip_parsing;
  704|      0|      }
  705|  37.0k|    } else {
  706|       |      // ':' is required here.
  707|  26.3k|      DO(ConsumeBeforeWhitespace(":"));
  ------------------
  |  |  329|  26.3k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 26.3k, False: 0]
  |  |  ------------------
  |  |  330|  26.3k|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  708|  26.3k|      TryConsumeWhitespace();
  709|  26.3k|    }
  710|       |
  711|  63.4k|    if (field->is_repeated() && TryConsume("[")) {
  ------------------
  |  Branch (711:9): [True: 4.36k, False: 59.1k]
  |  Branch (711:9): [True: 0, False: 63.4k]
  |  Branch (711:33): [True: 0, False: 4.36k]
  ------------------
  712|       |      // Short repeated format, e.g.  "foo: [1, 2, 3]".
  713|      0|      if (!TryConsume("]")) {
  ------------------
  |  Branch (713:11): [True: 0, False: 0]
  ------------------
  714|       |        // "foo: []" is treated as empty.
  715|      0|        while (true) {
  ------------------
  |  Branch (715:16): [True: 0, Folded]
  ------------------
  716|      0|          if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
  ------------------
  |  Branch (716:15): [True: 0, False: 0]
  ------------------
  717|       |            // Perform special handling for embedded message types.
  718|      0|            DO(ConsumeFieldMessage(message, reflection, field));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  719|      0|          } else {
  720|      0|            DO(ConsumeFieldValue(message, reflection, field));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  721|      0|          }
  722|      0|          if (TryConsume("]")) {
  ------------------
  |  Branch (722:15): [True: 0, False: 0]
  ------------------
  723|      0|            break;
  724|      0|          }
  725|      0|          DO(Consume(","));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  726|      0|        }
  727|      0|      }
  728|  63.4k|    } else if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
  ------------------
  |  Branch (728:16): [True: 37.0k, False: 26.3k]
  ------------------
  729|  37.0k|      DO(ConsumeFieldMessage(message, reflection, field));
  ------------------
  |  |  329|  37.0k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 37.0k, False: 2]
  |  |  ------------------
  |  |  330|  37.0k|  } else {            \
  |  |  331|      2|    return false;     \
  |  |  332|      2|  }
  ------------------
  730|  37.0k|    } else {
  731|  26.3k|      DO(ConsumeFieldValue(message, reflection, field));
  ------------------
  |  |  329|  26.3k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 26.3k, False: 2]
  |  |  ------------------
  |  |  330|  26.3k|  } else {            \
  |  |  331|      2|    return false;     \
  |  |  332|      2|  }
  ------------------
  732|  26.3k|    }
  733|  63.4k|  label_skip_parsing:
  734|       |    // For historical reasons, fields may optionally be separated by commas or
  735|       |    // semicolons.
  736|  63.4k|    TryConsume(";") || TryConsume(",");
  ------------------
  |  Branch (736:5): [True: 8, False: 63.4k]
  |  Branch (736:24): [True: 75, False: 63.3k]
  ------------------
  737|       |
  738|       |    // If a parse info tree exists, add the location for the parsed
  739|       |    // field.
  740|  63.4k|    if (parse_info_tree_ != nullptr) {
  ------------------
  |  Branch (740:9): [True: 0, False: 63.4k]
  ------------------
  741|      0|      int end_line = tokenizer_.previous().line;
  742|      0|      int end_column = tokenizer_.previous().end_column;
  743|       |
  744|      0|      RecordLocation(parse_info_tree_, field,
  745|      0|                     ParseLocationRange(ParseLocation(start_line, start_column),
  746|      0|                                        ParseLocation(end_line, end_column)));
  747|      0|    }
  748|       |
  749|  63.4k|    return true;
  750|  63.4k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl10TryConsumeERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
 1374|   269k|  bool TryConsume(const std::string& value) {
 1375|   269k|    if (tokenizer_.current().text == value) {
  ------------------
  |  Branch (1375:9): [True: 138, False: 268k]
  ------------------
 1376|    138|      tokenizer_.Next();
 1377|    138|      return true;
 1378|   268k|    } else {
 1379|   268k|      return false;
 1380|   268k|    }
 1381|   269k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl17ConsumeIdentifierEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
 1090|  63.5k|  bool ConsumeIdentifier(std::string* identifier) {
 1091|  63.5k|    if (LookingAtType(io::Tokenizer::TYPE_IDENTIFIER)) {
  ------------------
  |  Branch (1091:9): [True: 63.5k, False: 2]
  ------------------
 1092|  63.5k|      *identifier = tokenizer_.current().text;
 1093|  63.5k|      tokenizer_.Next();
 1094|  63.5k|      return true;
 1095|  63.5k|    }
 1096|       |
 1097|       |    // If allow_field_number_ or allow_unknown_field_ is true, we should able
 1098|       |    // to parse integer identifiers.
 1099|      2|    if ((allow_field_number_ || allow_unknown_field_ ||
  ------------------
  |  Branch (1099:10): [True: 0, False: 2]
  |  Branch (1099:33): [True: 2, False: 0]
  ------------------
 1100|      0|         allow_unknown_extension_) &&
  ------------------
  |  Branch (1100:10): [True: 0, False: 0]
  ------------------
 1101|      2|        LookingAtType(io::Tokenizer::TYPE_INTEGER)) {
  ------------------
  |  Branch (1101:9): [True: 1, False: 1]
  ------------------
 1102|      1|      *identifier = tokenizer_.current().text;
 1103|      1|      tokenizer_.Next();
 1104|      1|      return true;
 1105|      1|    }
 1106|       |
 1107|      1|    ReportError(
 1108|      1|        absl::StrCat("Expected identifier, got: ", tokenizer_.current().text));
 1109|      1|    return false;
 1110|      2|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl23ConsumeBeforeWhitespaceERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
 1364|  26.3k|  bool ConsumeBeforeWhitespace(const std::string& value) {
 1365|       |    // Report whitespace after this token, but only once.
 1366|  26.3k|    tokenizer_.set_report_whitespace(true);
 1367|  26.3k|    bool result = Consume(value);
 1368|  26.3k|    tokenizer_.set_report_whitespace(false);
 1369|  26.3k|    return result;
 1370|  26.3k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl20TryConsumeWhitespaceEv:
 1393|  89.9k|  bool TryConsumeWhitespace() {
 1394|  89.9k|    had_silent_marker_ = false;
 1395|  89.9k|    if (LookingAtType(io::Tokenizer::TYPE_WHITESPACE)) {
  ------------------
  |  Branch (1395:9): [True: 62.1k, False: 27.7k]
  ------------------
 1396|  62.1k|      if (tokenizer_.current().text ==
  ------------------
  |  Branch (1396:11): [True: 0, False: 62.1k]
  ------------------
 1397|  62.1k|          absl::StrCat(" ", internal::kDebugStringSilentMarkerForDetection)) {
 1398|      0|        had_silent_marker_ = true;
 1399|      0|      }
 1400|  62.1k|      tokenizer_.Next();
 1401|  62.1k|      return true;
 1402|  62.1k|    }
 1403|  27.7k|    return false;
 1404|  89.9k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl26TryConsumeBeforeWhitespaceERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
 1385|  37.1k|  bool TryConsumeBeforeWhitespace(const std::string& value) {
 1386|       |    // Report whitespace after this token, but only once.
 1387|  37.1k|    tokenizer_.set_report_whitespace(true);
 1388|  37.1k|    bool result = TryConsume(value);
 1389|  37.1k|    tokenizer_.set_report_whitespace(false);
 1390|  37.1k|    return result;
 1391|  37.1k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl11ReportErrorENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEE:
  468|     11|  void ReportError(absl::string_view message) {
  469|     11|    ReportError(tokenizer_.current().line, tokenizer_.current().column,
  470|     11|                message);
  471|     11|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl23ConsumeMessageDelimiterEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
  494|  37.1k|  bool ConsumeMessageDelimiter(std::string* delimiter) {
  495|  37.1k|    if (TryConsume("<")) {
  ------------------
  |  Branch (495:9): [True: 0, False: 37.1k]
  ------------------
  496|      0|      *delimiter = ">";
  497|  37.1k|    } else {
  498|  37.1k|      DO(Consume("{"));
  ------------------
  |  |  329|  37.1k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 37.1k, False: 0]
  |  |  ------------------
  |  |  330|  37.1k|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  499|  37.1k|      *delimiter = "}";
  500|  37.1k|    }
  501|  37.1k|    return true;
  502|  37.1k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl14ConsumeMessageEPNS0_7MessageENSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEE:
  483|  37.0k|  bool ConsumeMessage(Message* message, const std::string delimiter) {
  484|  80.0k|    while (!LookingAt(">") && !LookingAt("}")) {
  ------------------
  |  Branch (484:12): [True: 80.0k, False: 0]
  |  Branch (484:12): [True: 43.0k, False: 37.0k]
  |  Branch (484:31): [True: 43.0k, False: 37.0k]
  ------------------
  485|  43.0k|      DO(ConsumeField(message));
  ------------------
  |  |  329|  43.0k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 43.0k, False: 2]
  |  |  ------------------
  |  |  330|  43.0k|  } else {            \
  |  |  331|      2|    return false;     \
  |  |  332|      2|  }
  ------------------
  486|  43.0k|    }
  487|       |
  488|       |    // Confirm that we have a valid ending delimiter.
  489|  37.0k|    DO(Consume(delimiter));
  ------------------
  |  |  329|  37.0k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 37.0k, False: 0]
  |  |  ------------------
  |  |  330|  37.0k|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  490|  37.0k|    return true;
  491|  37.0k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl13ReportWarningENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEE:
  475|     36|  void ReportWarning(absl::string_view message) {
  476|     36|    ReportWarning(tokenizer_.current().line, tokenizer_.current().column,
  477|     36|                  message);
  478|     36|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl33ConsumeIdentifierBeforeWhitespaceEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
 1114|  63.5k|  bool ConsumeIdentifierBeforeWhitespace(std::string* identifier) {
 1115|  63.5k|    tokenizer_.set_report_whitespace(true);
 1116|  63.5k|    bool result = ConsumeIdentifier(identifier);
 1117|  63.5k|    tokenizer_.set_report_whitespace(false);
 1118|  63.5k|    return result;
 1119|  63.5k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl9LookingAtERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
 1079|   160k|  bool LookingAt(const std::string& text) {
 1080|   160k|    return tokenizer_.current().text == text;
 1081|   160k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl14SkipFieldValueEv:
  993|     36|  bool SkipFieldValue() {
  994|     36|    if (--recursion_limit_ < 0) {
  ------------------
  |  Branch (994:9): [True: 0, False: 36]
  ------------------
  995|      0|      ReportError(
  996|      0|          absl::StrCat("Message is too deep, the parser exceeded the "
  997|      0|                       "configured recursion limit of ",
  998|      0|                       initial_recursion_limit_, "."));
  999|      0|      return false;
 1000|      0|    }
 1001|       |
 1002|     36|    if (LookingAtType(io::Tokenizer::TYPE_STRING)) {
  ------------------
  |  Branch (1002:9): [True: 1, False: 35]
  ------------------
 1003|      2|      while (LookingAtType(io::Tokenizer::TYPE_STRING)) {
  ------------------
  |  Branch (1003:14): [True: 1, False: 1]
  ------------------
 1004|      1|        tokenizer_.Next();
 1005|      1|      }
 1006|      1|      ++recursion_limit_;
 1007|      1|      return true;
 1008|      1|    }
 1009|     35|    if (TryConsume("[")) {
  ------------------
  |  Branch (1009:9): [True: 11, False: 24]
  ------------------
 1010|     11|      if (!TryConsume("]")) {
  ------------------
  |  Branch (1010:11): [True: 11, False: 0]
  ------------------
 1011|     11|        while (true) {
  ------------------
  |  Branch (1011:16): [True: 11, Folded]
  ------------------
 1012|     11|          if (!LookingAt("{") && !LookingAt("<")) {
  ------------------
  |  Branch (1012:15): [True: 11, False: 0]
  |  Branch (1012:15): [True: 11, False: 0]
  |  Branch (1012:34): [True: 11, False: 0]
  ------------------
 1013|     11|            DO(SkipFieldValue());
  ------------------
  |  |  329|     11|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 11]
  |  |  ------------------
  |  |  330|     11|  } else {            \
  |  |  331|     11|    return false;     \
  |  |  332|     11|  }
  ------------------
 1014|      0|          } else {
 1015|      0|            DO(SkipFieldMessage());
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
 1016|      0|          }
 1017|      0|          if (TryConsume("]")) {
  ------------------
  |  Branch (1017:15): [True: 0, False: 0]
  ------------------
 1018|      0|            break;
 1019|      0|          }
 1020|      0|          DO(Consume(","));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
 1021|      0|        }
 1022|     11|      }
 1023|      0|      ++recursion_limit_;
 1024|      0|      return true;
 1025|     11|    }
 1026|       |    // Possible field values other than string:
 1027|       |    //   12345        => TYPE_INTEGER
 1028|       |    //   -12345       => TYPE_SYMBOL + TYPE_INTEGER
 1029|       |    //   1.2345       => TYPE_FLOAT
 1030|       |    //   -1.2345      => TYPE_SYMBOL + TYPE_FLOAT
 1031|       |    //   inf          => TYPE_IDENTIFIER
 1032|       |    //   -inf         => TYPE_SYMBOL + TYPE_IDENTIFIER
 1033|       |    //   TYPE_INTEGER => TYPE_IDENTIFIER
 1034|       |    // Divides them into two group, one with TYPE_SYMBOL
 1035|       |    // and the other without:
 1036|       |    //   Group one:
 1037|       |    //     12345        => TYPE_INTEGER
 1038|       |    //     1.2345       => TYPE_FLOAT
 1039|       |    //     inf          => TYPE_IDENTIFIER
 1040|       |    //     TYPE_INTEGER => TYPE_IDENTIFIER
 1041|       |    //   Group two:
 1042|       |    //     -12345       => TYPE_SYMBOL + TYPE_INTEGER
 1043|       |    //     -1.2345      => TYPE_SYMBOL + TYPE_FLOAT
 1044|       |    //     -inf         => TYPE_SYMBOL + TYPE_IDENTIFIER
 1045|       |    // As we can see, the field value consists of an optional '-' and one of
 1046|       |    // TYPE_INTEGER, TYPE_FLOAT and TYPE_IDENTIFIER.
 1047|     24|    bool has_minus = TryConsume("-");
 1048|     24|    if (!LookingAtType(io::Tokenizer::TYPE_INTEGER) &&
  ------------------
  |  Branch (1048:9): [True: 13, False: 11]
  ------------------
 1049|     13|        !LookingAtType(io::Tokenizer::TYPE_FLOAT) &&
  ------------------
  |  Branch (1049:9): [True: 13, False: 0]
  ------------------
 1050|     13|        !LookingAtType(io::Tokenizer::TYPE_IDENTIFIER)) {
  ------------------
  |  Branch (1050:9): [True: 0, False: 13]
  ------------------
 1051|      0|      std::string text = tokenizer_.current().text;
 1052|      0|      ReportError(
 1053|      0|          absl::StrCat("Cannot skip field value, unexpected token: ", text));
 1054|      0|      ++recursion_limit_;
 1055|      0|      return false;
 1056|      0|    }
 1057|       |    // Combination of '-' and TYPE_IDENTIFIER may result in an invalid field
 1058|       |    // value while other combinations all generate valid values.
 1059|       |    // We check if the value of this combination is valid here.
 1060|       |    // TYPE_IDENTIFIER after a '-' should be one of the float values listed
 1061|       |    // below:
 1062|       |    //   inf, inff, infinity, nan
 1063|     24|    if (has_minus && LookingAtType(io::Tokenizer::TYPE_IDENTIFIER)) {
  ------------------
  |  Branch (1063:9): [True: 13, False: 11]
  |  Branch (1063:22): [True: 13, False: 0]
  ------------------
 1064|     13|      std::string text = tokenizer_.current().text;
 1065|     13|      absl::AsciiStrToLower(&text);
 1066|     13|      if (text != "inf" &&
  ------------------
  |  Branch (1066:11): [True: 12, False: 1]
  ------------------
 1067|     12|          text != "infinity" && text != "nan") {
  ------------------
  |  Branch (1067:11): [True: 8, False: 4]
  |  Branch (1067:33): [True: 8, False: 0]
  ------------------
 1068|      8|        ReportError(absl::StrCat("Invalid float number: ", text));
 1069|      8|        ++recursion_limit_;
 1070|      8|        return false;
 1071|      8|      }
 1072|     13|    }
 1073|     16|    tokenizer_.Next();
 1074|     16|    ++recursion_limit_;
 1075|     16|    return true;
 1076|     24|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl16SkipFieldMessageEv:
  823|     17|  bool SkipFieldMessage() {
  824|     17|    if (--recursion_limit_ < 0) {
  ------------------
  |  Branch (824:9): [True: 0, False: 17]
  ------------------
  825|      0|      ReportError(
  826|      0|          absl::StrCat("Message is too deep, the parser exceeded the "
  827|      0|                       "configured recursion limit of ",
  828|      0|                       initial_recursion_limit_, "."));
  829|      0|      return false;
  830|      0|    }
  831|       |
  832|     17|    std::string delimiter;
  833|     17|    DO(ConsumeMessageDelimiter(&delimiter));
  ------------------
  |  |  329|     17|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 17, False: 0]
  |  |  ------------------
  |  |  330|     17|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  834|     18|    while (!LookingAt(">") && !LookingAt("}")) {
  ------------------
  |  Branch (834:12): [True: 18, False: 0]
  |  Branch (834:12): [True: 7, False: 11]
  |  Branch (834:31): [True: 7, False: 11]
  ------------------
  835|      7|      DO(SkipField());
  ------------------
  |  |  329|      7|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 1, False: 6]
  |  |  ------------------
  |  |  330|      6|  } else {            \
  |  |  331|      6|    return false;     \
  |  |  332|      6|  }
  ------------------
  836|      1|    }
  837|     11|    DO(Consume(delimiter));
  ------------------
  |  |  329|     11|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 11, False: 0]
  |  |  ------------------
  |  |  330|     11|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  838|       |
  839|     11|    ++recursion_limit_;
  840|     11|    return true;
  841|     11|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl9SkipFieldEv:
  753|      7|  bool SkipField() {
  754|      7|    std::string field_name;
  755|      7|    if (TryConsume("[")) {
  ------------------
  |  Branch (755:9): [True: 0, False: 7]
  ------------------
  756|       |      // Extension name or type URL.
  757|      0|      DO(ConsumeTypeUrlOrFullTypeName(&field_name));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  758|      0|      DO(ConsumeBeforeWhitespace("]"));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  759|      7|    } else {
  760|      7|      DO(ConsumeIdentifierBeforeWhitespace(&field_name));
  ------------------
  |  |  329|      7|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 6, False: 1]
  |  |  ------------------
  |  |  330|      6|  } else {            \
  |  |  331|      1|    return false;     \
  |  |  332|      1|  }
  ------------------
  761|      6|    }
  762|      6|    TryConsumeWhitespace();
  763|       |
  764|       |    // Try to guess the type of this field.
  765|       |    // If this field is not a message, there should be a ":" between the
  766|       |    // field name and the field value and also the field value should not
  767|       |    // start with "{" or "<" which indicates the beginning of a message body.
  768|       |    // If there is no ":" or there is a "{" or "<" after ":", this field has
  769|       |    // to be a message or the input is ill-formed.
  770|      6|    if (TryConsumeBeforeWhitespace(":")) {
  ------------------
  |  Branch (770:9): [True: 2, False: 4]
  ------------------
  771|      2|      TryConsumeWhitespace();
  772|      2|      if (!LookingAt("{") && !LookingAt("<")) {
  ------------------
  |  Branch (772:11): [True: 2, False: 0]
  |  Branch (772:11): [True: 2, False: 0]
  |  Branch (772:30): [True: 2, False: 0]
  ------------------
  773|      2|        DO(SkipFieldValue());
  ------------------
  |  |  329|      2|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 1, False: 1]
  |  |  ------------------
  |  |  330|      1|  } else {            \
  |  |  331|      1|    return false;     \
  |  |  332|      1|  }
  ------------------
  774|      1|      } else {
  775|      0|        DO(SkipFieldMessage());
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  776|      0|      }
  777|      4|    } else {
  778|      4|      DO(SkipFieldMessage());
  ------------------
  |  |  329|      4|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 4]
  |  |  ------------------
  |  |  330|      4|  } else {            \
  |  |  331|      4|    return false;     \
  |  |  332|      4|  }
  ------------------
  779|      0|    }
  780|       |    // For historical reasons, fields may optionally be separated by commas or
  781|       |    // semicolons.
  782|      1|    TryConsume(";") || TryConsume(",");
  ------------------
  |  Branch (782:5): [True: 0, False: 1]
  |  Branch (782:24): [True: 0, False: 1]
  ------------------
  783|      1|    return true;
  784|      6|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl13ConsumeStringEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
 1153|  17.9k|  bool ConsumeString(std::string* text) {
 1154|  17.9k|    if (!LookingAtType(io::Tokenizer::TYPE_STRING)) {
  ------------------
  |  Branch (1154:9): [True: 0, False: 17.9k]
  ------------------
 1155|      0|      ReportError(
 1156|      0|          absl::StrCat("Expected string, got: ", tokenizer_.current().text));
 1157|      0|      return false;
 1158|      0|    }
 1159|       |
 1160|  17.9k|    text->clear();
 1161|  35.9k|    while (LookingAtType(io::Tokenizer::TYPE_STRING)) {
  ------------------
  |  Branch (1161:12): [True: 17.9k, False: 17.9k]
  ------------------
 1162|  17.9k|      io::Tokenizer::ParseStringAppend(tokenizer_.current().text, text);
 1163|       |
 1164|  17.9k|      tokenizer_.Next();
 1165|  17.9k|    }
 1166|       |
 1167|  17.9k|    return true;
 1168|  17.9k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl19ConsumeFieldMessageEPNS0_7MessageEPKNS0_10ReflectionEPKNS0_15FieldDescriptorE:
  787|  37.0k|                           const FieldDescriptor* field) {
  788|  37.0k|    if (--recursion_limit_ < 0) {
  ------------------
  |  Branch (788:9): [True: 0, False: 37.0k]
  ------------------
  789|      0|      ReportError(
  790|      0|          absl::StrCat("Message is too deep, the parser exceeded the "
  791|      0|                       "configured recursion limit of ",
  792|      0|                       initial_recursion_limit_, "."));
  793|      0|      return false;
  794|      0|    }
  795|       |    // If the parse information tree is not nullptr, create a nested one
  796|       |    // for the nested message.
  797|  37.0k|    ParseInfoTree* parent = parse_info_tree_;
  798|  37.0k|    if (parent != nullptr) {
  ------------------
  |  Branch (798:9): [True: 0, False: 37.0k]
  ------------------
  799|      0|      parse_info_tree_ = CreateNested(parent, field);
  800|      0|    }
  801|       |
  802|  37.0k|    std::string delimiter;
  803|  37.0k|    DO(ConsumeMessageDelimiter(&delimiter));
  ------------------
  |  |  329|  37.0k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 37.0k, False: 0]
  |  |  ------------------
  |  |  330|  37.0k|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  804|  37.0k|    MessageFactory* factory =
  805|  37.0k|        finder_ ? finder_->FindExtensionFactory(field) : nullptr;
  ------------------
  |  Branch (805:9): [True: 0, False: 37.0k]
  ------------------
  806|  37.0k|    if (field->is_repeated()) {
  ------------------
  |  Branch (806:9): [True: 4.36k, False: 32.7k]
  ------------------
  807|  4.36k|      DO(ConsumeMessage(reflection->AddMessage(message, field, factory),
  ------------------
  |  |  329|  4.36k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 4.36k, False: 0]
  |  |  ------------------
  |  |  330|  4.36k|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  808|  4.36k|                        delimiter));
  809|  32.7k|    } else {
  810|  32.7k|      DO(ConsumeMessage(reflection->MutableMessage(message, field, factory),
  ------------------
  |  |  329|  32.7k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 32.7k, False: 2]
  |  |  ------------------
  |  |  330|  32.7k|  } else {            \
  |  |  331|      2|    return false;     \
  |  |  332|      2|  }
  ------------------
  811|  32.7k|                        delimiter));
  812|  32.7k|    }
  813|       |
  814|  37.0k|    ++recursion_limit_;
  815|       |
  816|       |    // Reset the parse information tree.
  817|  37.0k|    parse_info_tree_ = parent;
  818|  37.0k|    return true;
  819|  37.0k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl17ConsumeFieldValueEPNS0_7MessageEPKNS0_10ReflectionEPKNS0_15FieldDescriptorE:
  844|  26.3k|                         const FieldDescriptor* field) {
  845|       |// Define an easy to use macro for setting fields. This macro checks
  846|       |// to see if the field is repeated (in which case we need to use the Add
  847|       |// methods or not (in which case we need to use the Set methods).
  848|       |// When checking for no-op operations, We verify that both the existing value in
  849|       |// the message and the new value are the default. If the existing field value is
  850|       |// not the default, setting it to the default should not be treated as a no-op.
  851|       |// The pointer of this is kept in no_op_fields_ for bookkeeping.
  852|  26.3k|#define SET_FIELD(CPPTYPE, CPPTYPELCASE, VALUE)                    \
  853|  26.3k|  if (field->is_repeated()) {                                      \
  854|  26.3k|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  855|  26.3k|  } else {                                                         \
  856|  26.3k|    if (no_op_fields_ && !field->has_presence() &&                 \
  857|  26.3k|        field->default_value_##CPPTYPELCASE() ==                   \
  858|  26.3k|            reflection->Get##CPPTYPE(*message, field) &&           \
  859|  26.3k|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  860|  26.3k|      no_op_fields_->ids_.insert(                                  \
  861|  26.3k|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  862|  26.3k|    } else {                                                       \
  863|  26.3k|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  864|  26.3k|    }                                                              \
  865|  26.3k|  }
  866|       |
  867|  26.3k|    switch (field->cpp_type()) {
  ------------------
  |  Branch (867:13): [True: 26.3k, False: 0]
  ------------------
  868|      0|      case FieldDescriptor::CPPTYPE_INT32: {
  ------------------
  |  Branch (868:7): [True: 0, False: 26.3k]
  ------------------
  869|      0|        int64_t value;
  870|      0|        DO(ConsumeSignedInteger(&value, kint32max));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  871|      0|        SET_FIELD(Int32, int32, static_cast<int32_t>(value));
  ------------------
  |  |  853|      0|  if (field->is_repeated()) {                                      \
  |  |  ------------------
  |  |  |  Branch (853:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  854|      0|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  |  |  855|      0|  } else {                                                         \
  |  |  856|      0|    if (no_op_fields_ && !field->has_presence() &&                 \
  |  |  ------------------
  |  |  |  Branch (856:9): [True: 0, False: 0]
  |  |  |  Branch (856:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  857|      0|        field->default_value_##CPPTYPELCASE() ==                   \
  |  |  ------------------
  |  |  |  Branch (857:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  858|      0|            reflection->Get##CPPTYPE(*message, field) &&           \
  |  |  859|      0|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  |  |  ------------------
  |  |  |  Branch (859:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  860|      0|      no_op_fields_->ids_.insert(                                  \
  |  |  861|      0|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  |  |  862|      0|    } else {                                                       \
  |  |  863|      0|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  |  |  864|      0|    }                                                              \
  |  |  865|      0|  }
  ------------------
  872|      0|        break;
  873|      0|      }
  874|       |
  875|  8.42k|      case FieldDescriptor::CPPTYPE_UINT32: {
  ------------------
  |  Branch (875:7): [True: 8.42k, False: 17.9k]
  ------------------
  876|  8.42k|        uint64_t value;
  877|  8.42k|        DO(ConsumeUnsignedInteger(&value, kuint32max));
  ------------------
  |  |  329|  8.42k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 8.42k, False: 0]
  |  |  ------------------
  |  |  330|  8.42k|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  878|  8.42k|        SET_FIELD(UInt32, uint32, static_cast<uint32_t>(value));
  ------------------
  |  |  853|  8.42k|  if (field->is_repeated()) {                                      \
  |  |  ------------------
  |  |  |  Branch (853:7): [True: 0, False: 8.42k]
  |  |  ------------------
  |  |  854|      0|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  |  |  855|  8.42k|  } else {                                                         \
  |  |  856|  8.42k|    if (no_op_fields_ && !field->has_presence() &&                 \
  |  |  ------------------
  |  |  |  Branch (856:9): [True: 0, False: 8.42k]
  |  |  |  Branch (856:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  857|  8.42k|        field->default_value_##CPPTYPELCASE() ==                   \
  |  |  ------------------
  |  |  |  Branch (857:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  858|      0|            reflection->Get##CPPTYPE(*message, field) &&           \
  |  |  859|  8.42k|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  |  |  ------------------
  |  |  |  Branch (859:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  860|      0|      no_op_fields_->ids_.insert(                                  \
  |  |  861|      0|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  |  |  862|  8.42k|    } else {                                                       \
  |  |  863|  8.42k|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  |  |  864|  8.42k|    }                                                              \
  |  |  865|  8.42k|  }
  ------------------
  879|  8.42k|        break;
  880|  8.42k|      }
  881|       |
  882|      0|      case FieldDescriptor::CPPTYPE_INT64: {
  ------------------
  |  Branch (882:7): [True: 0, False: 26.3k]
  ------------------
  883|      0|        int64_t value;
  884|      0|        DO(ConsumeSignedInteger(&value, kint64max));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  885|      0|        SET_FIELD(Int64, int64, value);
  ------------------
  |  |  853|      0|  if (field->is_repeated()) {                                      \
  |  |  ------------------
  |  |  |  Branch (853:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  854|      0|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  |  |  855|      0|  } else {                                                         \
  |  |  856|      0|    if (no_op_fields_ && !field->has_presence() &&                 \
  |  |  ------------------
  |  |  |  Branch (856:9): [True: 0, False: 0]
  |  |  |  Branch (856:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  857|      0|        field->default_value_##CPPTYPELCASE() ==                   \
  |  |  ------------------
  |  |  |  Branch (857:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  858|      0|            reflection->Get##CPPTYPE(*message, field) &&           \
  |  |  859|      0|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  |  |  ------------------
  |  |  |  Branch (859:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  860|      0|      no_op_fields_->ids_.insert(                                  \
  |  |  861|      0|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  |  |  862|      0|    } else {                                                       \
  |  |  863|      0|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  |  |  864|      0|    }                                                              \
  |  |  865|      0|  }
  ------------------
  886|      0|        break;
  887|      0|      }
  888|       |
  889|      0|      case FieldDescriptor::CPPTYPE_UINT64: {
  ------------------
  |  Branch (889:7): [True: 0, False: 26.3k]
  ------------------
  890|      0|        uint64_t value;
  891|      0|        DO(ConsumeUnsignedInteger(&value, kuint64max));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  892|      0|        SET_FIELD(UInt64, uint64, value);
  ------------------
  |  |  853|      0|  if (field->is_repeated()) {                                      \
  |  |  ------------------
  |  |  |  Branch (853:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  854|      0|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  |  |  855|      0|  } else {                                                         \
  |  |  856|      0|    if (no_op_fields_ && !field->has_presence() &&                 \
  |  |  ------------------
  |  |  |  Branch (856:9): [True: 0, False: 0]
  |  |  |  Branch (856:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  857|      0|        field->default_value_##CPPTYPELCASE() ==                   \
  |  |  ------------------
  |  |  |  Branch (857:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  858|      0|            reflection->Get##CPPTYPE(*message, field) &&           \
  |  |  859|      0|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  |  |  ------------------
  |  |  |  Branch (859:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  860|      0|      no_op_fields_->ids_.insert(                                  \
  |  |  861|      0|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  |  |  862|      0|    } else {                                                       \
  |  |  863|      0|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  |  |  864|      0|    }                                                              \
  |  |  865|      0|  }
  ------------------
  893|      0|        break;
  894|      0|      }
  895|       |
  896|      0|      case FieldDescriptor::CPPTYPE_FLOAT: {
  ------------------
  |  Branch (896:7): [True: 0, False: 26.3k]
  ------------------
  897|      0|        double value;
  898|      0|        DO(ConsumeDouble(&value));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  899|      0|        SET_FIELD(Float, float, io::SafeDoubleToFloat(value));
  ------------------
  |  |  853|      0|  if (field->is_repeated()) {                                      \
  |  |  ------------------
  |  |  |  Branch (853:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  854|      0|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  |  |  855|      0|  } else {                                                         \
  |  |  856|      0|    if (no_op_fields_ && !field->has_presence() &&                 \
  |  |  ------------------
  |  |  |  Branch (856:9): [True: 0, False: 0]
  |  |  |  Branch (856:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  857|      0|        field->default_value_##CPPTYPELCASE() ==                   \
  |  |  ------------------
  |  |  |  Branch (857:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  858|      0|            reflection->Get##CPPTYPE(*message, field) &&           \
  |  |  859|      0|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  |  |  ------------------
  |  |  |  Branch (859:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  860|      0|      no_op_fields_->ids_.insert(                                  \
  |  |  861|      0|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  |  |  862|      0|    } else {                                                       \
  |  |  863|      0|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  |  |  864|      0|    }                                                              \
  |  |  865|      0|  }
  ------------------
  900|      0|        break;
  901|      0|      }
  902|       |
  903|      0|      case FieldDescriptor::CPPTYPE_DOUBLE: {
  ------------------
  |  Branch (903:7): [True: 0, False: 26.3k]
  ------------------
  904|      0|        double value;
  905|      0|        DO(ConsumeDouble(&value));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  906|      0|        SET_FIELD(Double, double, value);
  ------------------
  |  |  853|      0|  if (field->is_repeated()) {                                      \
  |  |  ------------------
  |  |  |  Branch (853:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  854|      0|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  |  |  855|      0|  } else {                                                         \
  |  |  856|      0|    if (no_op_fields_ && !field->has_presence() &&                 \
  |  |  ------------------
  |  |  |  Branch (856:9): [True: 0, False: 0]
  |  |  |  Branch (856:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  857|      0|        field->default_value_##CPPTYPELCASE() ==                   \
  |  |  ------------------
  |  |  |  Branch (857:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  858|      0|            reflection->Get##CPPTYPE(*message, field) &&           \
  |  |  859|      0|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  |  |  ------------------
  |  |  |  Branch (859:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  860|      0|      no_op_fields_->ids_.insert(                                  \
  |  |  861|      0|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  |  |  862|      0|    } else {                                                       \
  |  |  863|      0|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  |  |  864|      0|    }                                                              \
  |  |  865|      0|  }
  ------------------
  907|      0|        break;
  908|      0|      }
  909|       |
  910|  17.9k|      case FieldDescriptor::CPPTYPE_STRING: {
  ------------------
  |  Branch (910:7): [True: 17.9k, False: 8.42k]
  ------------------
  911|  17.9k|        std::string value;
  912|  17.9k|        DO(ConsumeString(&value));
  ------------------
  |  |  329|  17.9k|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 17.9k, False: 0]
  |  |  ------------------
  |  |  330|  17.9k|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  913|  17.9k|        SET_FIELD(String, string, std::move(value));
  ------------------
  |  |  853|  17.9k|  if (field->is_repeated()) {                                      \
  |  |  ------------------
  |  |  |  Branch (853:7): [True: 0, False: 17.9k]
  |  |  ------------------
  |  |  854|      0|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  |  |  855|  17.9k|  } else {                                                         \
  |  |  856|  17.9k|    if (no_op_fields_ && !field->has_presence() &&                 \
  |  |  ------------------
  |  |  |  Branch (856:9): [True: 0, False: 17.9k]
  |  |  |  Branch (856:9): [True: 0, False: 17.9k]
  |  |  |  Branch (856:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  857|  17.9k|        field->default_value_##CPPTYPELCASE() ==                   \
  |  |  ------------------
  |  |  |  Branch (857:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  858|      0|            reflection->Get##CPPTYPE(*message, field) &&           \
  |  |  859|  17.9k|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  |  |  ------------------
  |  |  |  Branch (859:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  860|      0|      no_op_fields_->ids_.insert(                                  \
  |  |  861|      0|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  |  |  862|  17.9k|    } else {                                                       \
  |  |  863|  17.9k|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  |  |  864|  17.9k|    }                                                              \
  |  |  865|  17.9k|  }
  ------------------
  914|  17.9k|        break;
  915|  17.9k|      }
  916|       |
  917|      5|      case FieldDescriptor::CPPTYPE_BOOL: {
  ------------------
  |  Branch (917:7): [True: 5, False: 26.3k]
  ------------------
  918|      5|        if (LookingAtType(io::Tokenizer::TYPE_INTEGER)) {
  ------------------
  |  Branch (918:13): [True: 0, False: 5]
  ------------------
  919|      0|          uint64_t value;
  920|      0|          DO(ConsumeUnsignedInteger(&value, 1));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  921|      0|          SET_FIELD(Bool, bool, static_cast<bool>(value));
  ------------------
  |  |  853|      0|  if (field->is_repeated()) {                                      \
  |  |  ------------------
  |  |  |  Branch (853:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  854|      0|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  |  |  855|      0|  } else {                                                         \
  |  |  856|      0|    if (no_op_fields_ && !field->has_presence() &&                 \
  |  |  ------------------
  |  |  |  Branch (856:9): [True: 0, False: 0]
  |  |  |  Branch (856:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  857|      0|        field->default_value_##CPPTYPELCASE() ==                   \
  |  |  ------------------
  |  |  |  Branch (857:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  858|      0|            reflection->Get##CPPTYPE(*message, field) &&           \
  |  |  859|      0|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  |  |  ------------------
  |  |  |  Branch (859:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  860|      0|      no_op_fields_->ids_.insert(                                  \
  |  |  861|      0|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  |  |  862|      0|    } else {                                                       \
  |  |  863|      0|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  |  |  864|      0|    }                                                              \
  |  |  865|      0|  }
  ------------------
  922|      5|        } else {
  923|      5|          std::string value;
  924|      5|          DO(ConsumeIdentifier(&value));
  ------------------
  |  |  329|      5|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 5, False: 0]
  |  |  ------------------
  |  |  330|      5|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  925|      5|          if (value == "true" || value == "True" || value == "t") {
  ------------------
  |  Branch (925:15): [True: 2, False: 3]
  |  Branch (925:34): [True: 0, False: 3]
  |  Branch (925:53): [True: 0, False: 3]
  ------------------
  926|      2|            SET_FIELD(Bool, bool, true);
  ------------------
  |  |  853|      2|  if (field->is_repeated()) {                                      \
  |  |  ------------------
  |  |  |  Branch (853:7): [True: 0, False: 2]
  |  |  ------------------
  |  |  854|      0|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  |  |  855|      2|  } else {                                                         \
  |  |  856|      2|    if (no_op_fields_ && !field->has_presence() &&                 \
  |  |  ------------------
  |  |  |  Branch (856:9): [True: 0, False: 2]
  |  |  |  Branch (856:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  857|      2|        field->default_value_##CPPTYPELCASE() ==                   \
  |  |  ------------------
  |  |  |  Branch (857:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  858|      0|            reflection->Get##CPPTYPE(*message, field) &&           \
  |  |  859|      2|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  |  |  ------------------
  |  |  |  Branch (859:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  860|      0|      no_op_fields_->ids_.insert(                                  \
  |  |  861|      0|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  |  |  862|      2|    } else {                                                       \
  |  |  863|      2|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  |  |  864|      2|    }                                                              \
  |  |  865|      2|  }
  ------------------
  927|      3|          } else if (value == "false" || value == "False" || value == "f") {
  ------------------
  |  Branch (927:22): [True: 0, False: 3]
  |  Branch (927:42): [True: 0, False: 3]
  |  Branch (927:62): [True: 1, False: 2]
  ------------------
  928|      1|            SET_FIELD(Bool, bool, false);
  ------------------
  |  |  853|      1|  if (field->is_repeated()) {                                      \
  |  |  ------------------
  |  |  |  Branch (853:7): [True: 0, False: 1]
  |  |  ------------------
  |  |  854|      0|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  |  |  855|      1|  } else {                                                         \
  |  |  856|      1|    if (no_op_fields_ && !field->has_presence() &&                 \
  |  |  ------------------
  |  |  |  Branch (856:9): [True: 0, False: 1]
  |  |  |  Branch (856:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  857|      1|        field->default_value_##CPPTYPELCASE() ==                   \
  |  |  ------------------
  |  |  |  Branch (857:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  858|      0|            reflection->Get##CPPTYPE(*message, field) &&           \
  |  |  859|      1|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  |  |  ------------------
  |  |  |  Branch (859:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  860|      0|      no_op_fields_->ids_.insert(                                  \
  |  |  861|      0|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  |  |  862|      1|    } else {                                                       \
  |  |  863|      1|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  |  |  864|      1|    }                                                              \
  |  |  865|      1|  }
  ------------------
  929|      2|          } else {
  930|      2|            ReportError(absl::StrCat("Invalid value for boolean field \"",
  931|      2|                                     field->name(), "\". Value: \"", value,
  932|      2|                                     "\"."));
  933|      2|            return false;
  934|      2|          }
  935|      5|        }
  936|      3|        break;
  937|      5|      }
  938|       |
  939|      3|      case FieldDescriptor::CPPTYPE_ENUM: {
  ------------------
  |  Branch (939:7): [True: 0, False: 26.3k]
  ------------------
  940|      0|        std::string value;
  941|      0|        int64_t int_value = kint64max;
  942|      0|        const EnumDescriptor* enum_type = field->enum_type();
  943|      0|        const EnumValueDescriptor* enum_value = nullptr;
  944|       |
  945|      0|        if (LookingAtType(io::Tokenizer::TYPE_IDENTIFIER)) {
  ------------------
  |  Branch (945:13): [True: 0, False: 0]
  ------------------
  946|      0|          DO(ConsumeIdentifier(&value));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  947|       |          // Find the enumeration value.
  948|      0|          enum_value = enum_type->FindValueByName(value);
  949|       |
  950|      0|        } else if (LookingAt("-") ||
  ------------------
  |  Branch (950:20): [True: 0, False: 0]
  |  Branch (950:20): [True: 0, False: 0]
  ------------------
  951|      0|                   LookingAtType(io::Tokenizer::TYPE_INTEGER)) {
  ------------------
  |  Branch (951:20): [True: 0, False: 0]
  ------------------
  952|      0|          DO(ConsumeSignedInteger(&int_value, kint32max));
  ------------------
  |  |  329|      0|  if (STATEMENT) {    \
  |  |  ------------------
  |  |  |  Branch (329:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  330|      0|  } else {            \
  |  |  331|      0|    return false;     \
  |  |  332|      0|  }
  ------------------
  953|      0|          value = absl::StrCat(int_value);  // for error reporting
  954|      0|          enum_value = enum_type->FindValueByNumber(int_value);
  955|      0|        } else {
  956|      0|          ReportError(absl::StrCat("Expected integer or identifier, got: ",
  957|      0|                                   tokenizer_.current().text));
  958|      0|          return false;
  959|      0|        }
  960|       |
  961|      0|        if (enum_value == nullptr) {
  ------------------
  |  Branch (961:13): [True: 0, False: 0]
  ------------------
  962|      0|          if (int_value != kint64max &&
  ------------------
  |  Branch (962:15): [True: 0, False: 0]
  ------------------
  963|      0|              !field->legacy_enum_field_treated_as_closed()) {
  ------------------
  |  Branch (963:15): [True: 0, False: 0]
  ------------------
  964|      0|            SET_FIELD(EnumValue, int64, int_value);
  ------------------
  |  |  853|      0|  if (field->is_repeated()) {                                      \
  |  |  ------------------
  |  |  |  Branch (853:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  854|      0|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  |  |  855|      0|  } else {                                                         \
  |  |  856|      0|    if (no_op_fields_ && !field->has_presence() &&                 \
  |  |  ------------------
  |  |  |  Branch (856:9): [True: 0, False: 0]
  |  |  |  Branch (856:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  857|      0|        field->default_value_##CPPTYPELCASE() ==                   \
  |  |  ------------------
  |  |  |  Branch (857:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  858|      0|            reflection->Get##CPPTYPE(*message, field) &&           \
  |  |  859|      0|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  |  |  ------------------
  |  |  |  Branch (859:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  860|      0|      no_op_fields_->ids_.insert(                                  \
  |  |  861|      0|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  |  |  862|      0|    } else {                                                       \
  |  |  863|      0|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  |  |  864|      0|    }                                                              \
  |  |  865|      0|  }
  ------------------
  965|      0|            return true;
  966|      0|          } else if (!allow_unknown_enum_) {
  ------------------
  |  Branch (966:22): [True: 0, False: 0]
  ------------------
  967|      0|            ReportError(absl::StrCat("Unknown enumeration value of \"", value,
  968|      0|                                     "\" for field \"", field->name(), "\"."));
  969|      0|            return false;
  970|      0|          } else {
  971|      0|            ReportWarning(absl::StrCat("Unknown enumeration value of \"", value,
  972|      0|                                       "\" for field \"", field->name(),
  973|      0|                                       "\"."));
  974|      0|            return true;
  975|      0|          }
  976|      0|        }
  977|       |
  978|      0|        SET_FIELD(Enum, enum, enum_value);
  ------------------
  |  |  853|      0|  if (field->is_repeated()) {                                      \
  |  |  ------------------
  |  |  |  Branch (853:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  854|      0|    reflection->Add##CPPTYPE(message, field, VALUE);               \
  |  |  855|      0|  } else {                                                         \
  |  |  856|      0|    if (no_op_fields_ && !field->has_presence() &&                 \
  |  |  ------------------
  |  |  |  Branch (856:9): [True: 0, False: 0]
  |  |  |  Branch (856:26): [True: 0, False: 0]
  |  |  ------------------
  |  |  857|      0|        field->default_value_##CPPTYPELCASE() ==                   \
  |  |  ------------------
  |  |  |  Branch (857:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  858|      0|            reflection->Get##CPPTYPE(*message, field) &&           \
  |  |  859|      0|        field->default_value_##CPPTYPELCASE() == VALUE) {          \
  |  |  ------------------
  |  |  |  Branch (859:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  860|      0|      no_op_fields_->ids_.insert(                                  \
  |  |  861|      0|          UnsetFieldsMetadata::GetUnsetFieldId(*message, *field)); \
  |  |  862|      0|    } else {                                                       \
  |  |  863|      0|      reflection->Set##CPPTYPE(message, field, std::move(VALUE));  \
  |  |  864|      0|    }                                                              \
  |  |  865|      0|  }
  ------------------
  979|      0|        break;
  980|      0|      }
  981|       |
  982|      0|      case FieldDescriptor::CPPTYPE_MESSAGE: {
  ------------------
  |  Branch (982:7): [True: 0, False: 26.3k]
  ------------------
  983|       |        // We should never get here. Put here instead of a default
  984|       |        // so that if new types are added, we get a nice compiler warning.
  985|      0|        ABSL_LOG(FATAL) << "Reached an unintended state: CPPTYPE_MESSAGE";
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  172|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   55|      0|  ::absl::log_internal::LogMessageFatal(__FILE__, __LINE__)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  986|      0|        break;
  987|      0|      }
  988|  26.3k|    }
  989|  26.3k|#undef SET_FIELD
  990|  26.3k|    return true;
  991|  26.3k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl22ConsumeUnsignedIntegerEPmm:
 1172|  8.42k|  bool ConsumeUnsignedInteger(uint64_t* value, uint64_t max_value) {
 1173|  8.42k|    if (!LookingAtType(io::Tokenizer::TYPE_INTEGER)) {
  ------------------
  |  Branch (1173:9): [True: 0, False: 8.42k]
  ------------------
 1174|      0|      ReportError(
 1175|      0|          absl::StrCat("Expected integer, got: ", tokenizer_.current().text));
 1176|      0|      return false;
 1177|      0|    }
 1178|       |
 1179|  8.42k|    if (!io::Tokenizer::ParseInteger(tokenizer_.current().text, max_value,
  ------------------
  |  Branch (1179:9): [True: 0, False: 8.42k]
  ------------------
 1180|  8.42k|                                     value)) {
 1181|      0|      ReportError(absl::StrCat("Integer out of range (",
 1182|      0|                               tokenizer_.current().text, ")"));
 1183|      0|      return false;
 1184|      0|    }
 1185|       |
 1186|  8.42k|    tokenizer_.Next();
 1187|  8.42k|    return true;
 1188|  8.42k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl7ConsumeERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
 1348|   100k|  bool Consume(const std::string& value) {
 1349|   100k|    const std::string& current_value = tokenizer_.current().text;
 1350|       |
 1351|   100k|    if (current_value != value) {
  ------------------
  |  Branch (1351:9): [True: 0, False: 100k]
  ------------------
 1352|      0|      ReportError(absl::StrCat("Expected \"", value, "\", found \"",
 1353|      0|                               current_value, "\"."));
 1354|      0|      return false;
 1355|      0|    }
 1356|       |
 1357|   100k|    tokenizer_.Next();
 1358|       |
 1359|   100k|    return true;
 1360|   100k|  }
_ZN6google8protobuf10TextFormat6Parser10ParserImpl11ReportErrorEiiNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEE:
  426|     18|  void ReportError(int line, int col, absl::string_view message) {
  427|     18|    had_errors_ = true;
  428|     18|    if (error_collector_ == nullptr) {
  ------------------
  |  Branch (428:9): [True: 18, False: 0]
  ------------------
  429|     18|      if (line >= 0) {
  ------------------
  |  Branch (429:11): [True: 18, False: 0]
  ------------------
  430|     54|        ABSL_LOG(ERROR) << "Error parsing text-format "
  ------------------
  |  |   38|     18|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|     18|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|     18|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|     36|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|     36|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 18, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|     18|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|     18|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 18]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|     18|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|    162|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|    162|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  431|     54|                        << root_message_type_->full_name() << ": " << (line + 1)
  432|     54|                        << ":" << (col + 1) << ": " << message;
  433|     18|      } else {
  434|      0|        ABSL_LOG(ERROR) << "Error parsing text-format "
  ------------------
  |  |   38|      0|#define ABSL_LOG(severity) ABSL_LOG_INTERNAL_LOG_IMPL(_##severity)
  |  |  ------------------
  |  |  |  |   25|      0|  ABSL_LOG_INTERNAL_CONDITION##severity(STATELESS, true) \
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      0|  ABSL_LOG_INTERNAL_##type##_CONDITION(condition)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|  switch (0)                                             \
  |  |  |  |  |  |  |  |   66|      0|  case 0:                                                \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (66:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   67|      0|  default:                                               \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (67:3): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   68|      0|    !(condition) ? (void)0 : ::absl::log_internal::Voidify()&&
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (68:5): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   26|      0|      ABSL_LOGGING_INTERNAL_LOG##severity.InternalStream()
  |  |  |  |  ------------------
  |  |  |  |  |  |   52|      0|  ::absl::log_internal::LogMessage(     \
  |  |  |  |  |  |   53|      0|      __FILE__, __LINE__, ::absl::log_internal::LogMessage::ErrorTag{})
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  435|      0|                        << root_message_type_->full_name() << ": " << message;
  436|      0|      }
  437|     18|    } else {
  438|      0|      error_collector_->RecordError(line, col, message);
  439|      0|    }
  440|     18|  }
text_format.cc:_ZN6google8protobuf12_GLOBAL__N_119CheckParseInputSizeINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEEEbRT_PNS0_2io14ErrorCollectorE:
 1804|  12.0k|bool CheckParseInputSize(T& input, io::ErrorCollector* error_collector) {
 1805|  12.0k|  if (input.size() > INT_MAX) {
  ------------------
  |  Branch (1805:7): [True: 0, False: 12.0k]
  ------------------
 1806|      0|    error_collector->RecordError(
 1807|      0|        -1, 0,
 1808|      0|        absl::StrCat(
 1809|      0|            "Input size too large: ", static_cast<int64_t>(input.size()),
 1810|      0|            " bytes", " > ", INT_MAX, " bytes."));
 1811|      0|    return false;
 1812|      0|  }
 1813|  12.0k|  return true;
 1814|  12.0k|}

_ZN6google8protobuf8internal15ThreadSafeArena17ReturnArrayMemoryEPvm:
   78|     44|  void ReturnArrayMemory(void* p, size_t size) {
   79|     44|    SerialArena* arena;
   80|     44|    if (PROTOBUF_PREDICT_TRUE(GetSerialArenaFast(&arena))) {
  ------------------
  |  |  364|     44|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 44, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 44]
  |  |  |  Branch (364:62): [True: 44, False: 0]
  |  |  ------------------
  ------------------
   81|     44|      arena->ReturnArrayMemory(p, size);
   82|     44|    }
   83|     44|  }
_ZNK6google8protobuf8internal15ThreadSafeArena11AllocPolicyEv:
  158|     21|  const AllocationPolicy* AllocPolicy() const { return alloc_policy_.get(); }
_ZN6google8protobuf8internal15ThreadSafeArena16CacheSerialArenaEPNS1_11SerialArenaE:
  168|      5|  inline void CacheSerialArena(SerialArena* serial) {
  169|      5|    thread_cache().last_serial_arena = serial;
  170|      5|    thread_cache().last_lifecycle_id_seen = tag_and_id_;
  171|      5|  }
_ZN6google8protobuf8internal15ThreadSafeArena18GetSerialArenaFastEPPNS1_11SerialArenaE:
  173|  1.12k|  PROTOBUF_NDEBUG_INLINE bool GetSerialArenaFast(SerialArena** arena) {
  174|       |    // If this thread already owns a block in this arena then try to use that.
  175|       |    // This fast path optimizes the case where multiple threads allocate from
  176|       |    // the same arena.
  177|  1.12k|    ThreadCache* tc = &thread_cache();
  178|  1.12k|    if (PROTOBUF_PREDICT_TRUE(tc->last_lifecycle_id_seen == tag_and_id_)) {
  ------------------
  |  |  364|  1.12k|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 1.12k, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 1.12k]
  |  |  |  Branch (364:62): [True: 1.12k, False: 0]
  |  |  ------------------
  ------------------
  179|  1.12k|      *arena = tc->last_serial_arena;
  180|  1.12k|      return true;
  181|  1.12k|    }
  182|      0|    return false;
  183|  1.12k|  }
_ZN6google8protobuf8internal15ThreadSafeArena12thread_cacheEv:
  257|  1.14k|  static ThreadCache& thread_cache() { return thread_cache_; }
_ZN6google8protobuf8internal15ThreadSafeArena15AllocateAlignedILNS1_16AllocationClientE0EEEPvm:
   69|    436|  void* AllocateAligned(size_t n) {
   70|    436|    SerialArena* arena;
   71|    436|    if (PROTOBUF_PREDICT_TRUE(GetSerialArenaFast(&arena))) {
  ------------------
  |  |  364|    436|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 436, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 436]
  |  |  |  Branch (364:62): [True: 436, False: 0]
  |  |  ------------------
  ------------------
   72|    436|      return arena->AllocateAligned<alloc_client>(n);
   73|    436|    } else {
   74|      0|      return AllocateAlignedFallback<alloc_client>(n);
   75|      0|    }
   76|    436|  }
_ZN6google8protobuf8internal15ThreadSafeArena15AllocateAlignedILNS1_16AllocationClientE1EEEPvm:
   69|    125|  void* AllocateAligned(size_t n) {
   70|    125|    SerialArena* arena;
   71|    125|    if (PROTOBUF_PREDICT_TRUE(GetSerialArenaFast(&arena))) {
  ------------------
  |  |  364|    125|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 125, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 125]
  |  |  |  Branch (364:62): [True: 125, False: 0]
  |  |  ------------------
  ------------------
   72|    125|      return arena->AllocateAligned<alloc_client>(n);
   73|    125|    } else {
   74|      0|      return AllocateAlignedFallback<alloc_client>(n);
   75|      0|    }
   76|    125|  }

_ZNK6google8protobuf15UnknownFieldSet5emptyEv:
  334|     19|inline bool UnknownFieldSet::empty() const { return fields_.empty(); }

_ZN6google8protobuf8internal19ShiftMixParseVarintIjLi10EEEPKcS4_Rl:
   53|    753|                                                              int64_t& res1) {
   54|    753|  using Signed = std::make_signed_t<VarintType>;
   55|    753|  constexpr bool kIs64BitVarint = std::is_same<Signed, int64_t>::value;
   56|    753|  constexpr bool kIs32BitVarint = std::is_same<Signed, int32_t>::value;
   57|    753|  static_assert(kIs64BitVarint || kIs32BitVarint, "");
   58|       |
   59|       |  // The algorithm relies on sign extension for each byte to set all high bits
   60|       |  // when the varint continues. It also relies on asserting all of the lower
   61|       |  // bits for each successive byte read. This allows the result to be aggregated
   62|       |  // using a bitwise AND. For example:
   63|       |  //
   64|       |  //          8       1          64     57 ... 24     17  16      9  8       1
   65|       |  // ptr[0] = 1aaa aaaa ; res1 = 1111 1111 ... 1111 1111  1111 1111  1aaa aaaa
   66|       |  // ptr[1] = 1bbb bbbb ; res2 = 1111 1111 ... 1111 1111  11bb bbbb  b111 1111
   67|       |  // ptr[2] = 0ccc cccc ; res3 = 0000 0000 ... 000c cccc  cc11 1111  1111 1111
   68|       |  //                             ---------------------------------------------
   69|       |  //        res1 & res2 & res3 = 0000 0000 ... 000c cccc  ccbb bbbb  baaa aaaa
   70|       |  //
   71|       |  // On x86-64, a shld from a single register filled with enough 1s in the high
   72|       |  // bits can accomplish all this in one instruction. It so happens that res1
   73|       |  // has 57 high bits of ones, which is enough for the largest shift done.
   74|       |  //
   75|       |  // Just as importantly, by keeping results in res1, res2, and res3, we take
   76|       |  // advantage of the superscalar abilities of the CPU.
   77|    753|  const auto next = [&p] { return static_cast<const int8_t>(*p++); };
   78|    753|  const auto last = [&p] { return static_cast<const int8_t>(p[-1]); };
   79|       |
   80|    753|  int64_t res2, res3;  // accumulated result chunks
   81|    753|  res1 = next();
   82|    753|  if (PROTOBUF_PREDICT_TRUE(res1 >= 0)) return p;
  ------------------
  |  |  364|    753|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 655, False: 98]
  |  |  |  Branch (364:53): [Folded, False: 753]
  |  |  |  Branch (364:62): [True: 655, False: 98]
  |  |  ------------------
  ------------------
   83|     98|  if (limit <= 1) goto limit0;
  ------------------
  |  Branch (83:7): [Folded, False: 98]
  ------------------
   84|       |
   85|       |  // Densify all ops with explicit FALSE predictions from here on, except that
   86|       |  // we predict length = 5 as a common length for fields like timestamp.
   87|     98|  if (PROTOBUF_PREDICT_FALSE(VarintShl<1>(next(), res1, res2))) goto done1;
  ------------------
  |  |  365|     98|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 64, False: 34]
  |  |  |  Branch (365:54): [Folded, False: 98]
  |  |  |  Branch (365:63): [True: 64, False: 34]
  |  |  ------------------
  ------------------
   88|     34|  if (limit <= 2) goto limit1;
  ------------------
  |  Branch (88:7): [Folded, False: 34]
  ------------------
   89|     34|  if (PROTOBUF_PREDICT_FALSE(VarintShl<2>(next(), res1, res3))) goto done2;
  ------------------
  |  |  365|     34|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 6, False: 28]
  |  |  |  Branch (365:54): [Folded, False: 34]
  |  |  |  Branch (365:63): [True: 6, False: 28]
  |  |  ------------------
  ------------------
   90|     28|  if (limit <= 3) goto limit2;
  ------------------
  |  Branch (90:7): [Folded, False: 28]
  ------------------
   91|     28|  if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<3>(next(), res1, res2))) goto done2;
  ------------------
  |  |  365|     28|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 28]
  |  |  |  Branch (365:54): [Folded, False: 28]
  |  |  |  Branch (365:63): [True: 0, False: 28]
  |  |  ------------------
  ------------------
   92|     28|  if (limit <= 4) goto limit2;
  ------------------
  |  Branch (92:7): [Folded, False: 28]
  ------------------
   93|     28|  if (PROTOBUF_PREDICT_TRUE(VarintShlAnd<4>(next(), res1, res3))) goto done2;
  ------------------
  |  |  364|     28|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 28, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 28]
  |  |  |  Branch (364:62): [True: 28, False: 0]
  |  |  ------------------
  ------------------
   94|      0|  if (limit <= 5) goto limit2;
  ------------------
  |  Branch (94:7): [Folded, False: 0]
  ------------------
   95|       |
   96|      0|  if (kIs64BitVarint) {
  ------------------
  |  Branch (96:7): [Folded, False: 0]
  ------------------
   97|      0|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<5>(next(), res1, res2))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   98|      0|    if (limit <= 6) goto limit2;
  ------------------
  |  Branch (98:9): [Folded, False: 0]
  ------------------
   99|      0|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<6>(next(), res1, res3))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  100|      0|    if (limit <= 7) goto limit2;
  ------------------
  |  Branch (100:9): [Folded, False: 0]
  ------------------
  101|      0|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<7>(next(), res1, res2))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  102|      0|    if (limit <= 8) goto limit2;
  ------------------
  |  Branch (102:9): [Folded, False: 0]
  ------------------
  103|      0|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<8>(next(), res1, res3))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  104|      0|    if (limit <= 9) goto limit2;
  ------------------
  |  Branch (104:9): [Folded, False: 0]
  ------------------
  105|      0|  } else {
  106|       |    // An overlong int32 is expected to span the full 10 bytes
  107|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  108|      0|    if (limit <= 6) goto limit2;
  ------------------
  |  Branch (108:9): [Folded, False: 0]
  ------------------
  109|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  110|      0|    if (limit <= 7) goto limit2;
  ------------------
  |  Branch (110:9): [Folded, False: 0]
  ------------------
  111|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  112|      0|    if (limit <= 8) goto limit2;
  ------------------
  |  Branch (112:9): [Folded, False: 0]
  ------------------
  113|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  114|      0|    if (limit <= 9) goto limit2;
  ------------------
  |  Branch (114:9): [Folded, False: 0]
  ------------------
  115|      0|  }
  116|       |
  117|       |  // For valid 64bit varints, the 10th byte/ptr[9] should be exactly 1. In this
  118|       |  // case, the continuation bit of ptr[8] already set the top bit of res3
  119|       |  // correctly, so all we have to do is check that the expected case is true.
  120|      0|  if (PROTOBUF_PREDICT_TRUE(next() == 1)) goto done2;
  ------------------
  |  |  364|      0|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 0]
  |  |  |  Branch (364:62): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  121|       |
  122|      0|  if (PROTOBUF_PREDICT_FALSE(last() & 0x80)) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  123|       |    // If the continue bit is set, it is an unterminated varint.
  124|      0|    return nullptr;
  125|      0|  }
  126|       |
  127|       |  // A zero value of the first bit of the 10th byte represents an
  128|       |  // over-serialized varint. This case should not happen, but if does (say, due
  129|       |  // to a nonconforming serializer), deassert the continuation bit that came
  130|       |  // from ptr[8].
  131|      0|  if (kIs64BitVarint && (last() & 1) == 0) {
  ------------------
  |  Branch (131:7): [Folded, False: 0]
  |  Branch (131:25): [True: 0, False: 0]
  ------------------
  132|      0|    static constexpr int bits = 64 - 1;
  133|      0|#if defined(__GCC_ASM_FLAG_OUTPUTS__) && defined(__x86_64__)
  134|       |    // Use a small instruction since this is an uncommon code path.
  135|      0|    asm("btc %[bits], %[res3]" : [res3] "+r"(res3) : [bits] "i"(bits));
  136|       |#else
  137|       |    res3 ^= int64_t{1} << bits;
  138|       |#endif
  139|      0|  }
  140|       |
  141|     34|done2:
  142|     34|  res2 &= res3;
  143|     98|done1:
  144|     98|  res1 &= res2;
  145|     98|  PROTOBUF_ASSUME(p != nullptr);
  ------------------
  |  |  941|     98|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  146|     98|  return p;
  147|      0|limit2:
  148|      0|  res2 &= res3;
  149|      0|limit1:
  150|      0|  res1 &= res2;
  151|      0|limit0:
  152|      0|  PROTOBUF_ASSUME(p != nullptr);
  ------------------
  |  |  941|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  153|      0|  PROTOBUF_ASSUME(res1 < 0);
  ------------------
  |  |  941|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  154|      0|  return p;
  155|      0|}
_ZZN6google8protobuf8internal19ShiftMixParseVarintIjLi10EEEPKcS4_RlENKUlvE_clEv:
   77|    941|  const auto next = [&p] { return static_cast<const int8_t>(*p++); };
_ZN6google8protobuf8internal9VarintShlILi1EEEbalRl:
   46|    188|                                             int64_t& res) {
   47|    188|  res = VarintShlByte<n>(byte, ones);
   48|    188|  return res >= 0;
   49|    188|}
_ZN6google8protobuf8internal13VarintShlByteILi1EEElal:
   26|    188|inline PROTOBUF_ALWAYS_INLINE int64_t VarintShlByte(int8_t byte, int64_t ones) {
   27|    188|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   28|    188|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   29|    188|}
_ZN6google8protobuf8internal9VarintShlILi2EEEbalRl:
   46|     34|                                             int64_t& res) {
   47|     34|  res = VarintShlByte<n>(byte, ones);
   48|     34|  return res >= 0;
   49|     34|}
_ZN6google8protobuf8internal13VarintShlByteILi2EEElal:
   26|     34|inline PROTOBUF_ALWAYS_INLINE int64_t VarintShlByte(int8_t byte, int64_t ones) {
   27|     34|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   28|     34|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   29|     34|}
_ZN6google8protobuf8internal12VarintShlAndILi3EEEbalRl:
   36|     28|                                                int64_t& res) {
   37|     28|  res &= VarintShlByte<n>(byte, ones);
   38|     28|  return res >= 0;
   39|     28|}
_ZN6google8protobuf8internal13VarintShlByteILi3EEElal:
   26|     28|inline PROTOBUF_ALWAYS_INLINE int64_t VarintShlByte(int8_t byte, int64_t ones) {
   27|     28|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   28|     28|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   29|     28|}
_ZN6google8protobuf8internal12VarintShlAndILi4EEEbalRl:
   36|     28|                                                int64_t& res) {
   37|     28|  res &= VarintShlByte<n>(byte, ones);
   38|     28|  return res >= 0;
   39|     28|}
_ZN6google8protobuf8internal13VarintShlByteILi4EEElal:
   26|     28|inline PROTOBUF_ALWAYS_INLINE int64_t VarintShlByte(int8_t byte, int64_t ones) {
   27|     28|  return static_cast<int64_t>((static_cast<uint64_t>(byte) << n * 7) |
   28|     28|                              (static_cast<uint64_t>(ones) >> (64 - n * 7)));
   29|     28|}
_ZN6google8protobuf8internal19ShiftMixParseVarintImLi10EEEPKcS4_Rl:
   53|    184|                                                              int64_t& res1) {
   54|    184|  using Signed = std::make_signed_t<VarintType>;
   55|    184|  constexpr bool kIs64BitVarint = std::is_same<Signed, int64_t>::value;
   56|    184|  constexpr bool kIs32BitVarint = std::is_same<Signed, int32_t>::value;
   57|    184|  static_assert(kIs64BitVarint || kIs32BitVarint, "");
   58|       |
   59|       |  // The algorithm relies on sign extension for each byte to set all high bits
   60|       |  // when the varint continues. It also relies on asserting all of the lower
   61|       |  // bits for each successive byte read. This allows the result to be aggregated
   62|       |  // using a bitwise AND. For example:
   63|       |  //
   64|       |  //          8       1          64     57 ... 24     17  16      9  8       1
   65|       |  // ptr[0] = 1aaa aaaa ; res1 = 1111 1111 ... 1111 1111  1111 1111  1aaa aaaa
   66|       |  // ptr[1] = 1bbb bbbb ; res2 = 1111 1111 ... 1111 1111  11bb bbbb  b111 1111
   67|       |  // ptr[2] = 0ccc cccc ; res3 = 0000 0000 ... 000c cccc  cc11 1111  1111 1111
   68|       |  //                             ---------------------------------------------
   69|       |  //        res1 & res2 & res3 = 0000 0000 ... 000c cccc  ccbb bbbb  baaa aaaa
   70|       |  //
   71|       |  // On x86-64, a shld from a single register filled with enough 1s in the high
   72|       |  // bits can accomplish all this in one instruction. It so happens that res1
   73|       |  // has 57 high bits of ones, which is enough for the largest shift done.
   74|       |  //
   75|       |  // Just as importantly, by keeping results in res1, res2, and res3, we take
   76|       |  // advantage of the superscalar abilities of the CPU.
   77|    184|  const auto next = [&p] { return static_cast<const int8_t>(*p++); };
   78|    184|  const auto last = [&p] { return static_cast<const int8_t>(p[-1]); };
   79|       |
   80|    184|  int64_t res2, res3;  // accumulated result chunks
   81|    184|  res1 = next();
   82|    184|  if (PROTOBUF_PREDICT_TRUE(res1 >= 0)) return p;
  ------------------
  |  |  364|    184|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 94, False: 90]
  |  |  |  Branch (364:53): [Folded, False: 184]
  |  |  |  Branch (364:62): [True: 94, False: 90]
  |  |  ------------------
  ------------------
   83|     90|  if (limit <= 1) goto limit0;
  ------------------
  |  Branch (83:7): [Folded, False: 90]
  ------------------
   84|       |
   85|       |  // Densify all ops with explicit FALSE predictions from here on, except that
   86|       |  // we predict length = 5 as a common length for fields like timestamp.
   87|     90|  if (PROTOBUF_PREDICT_FALSE(VarintShl<1>(next(), res1, res2))) goto done1;
  ------------------
  |  |  365|     90|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 90, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 90]
  |  |  |  Branch (365:63): [True: 90, False: 0]
  |  |  ------------------
  ------------------
   88|      0|  if (limit <= 2) goto limit1;
  ------------------
  |  Branch (88:7): [Folded, False: 0]
  ------------------
   89|      0|  if (PROTOBUF_PREDICT_FALSE(VarintShl<2>(next(), res1, res3))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   90|      0|  if (limit <= 3) goto limit2;
  ------------------
  |  Branch (90:7): [Folded, False: 0]
  ------------------
   91|      0|  if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<3>(next(), res1, res2))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   92|      0|  if (limit <= 4) goto limit2;
  ------------------
  |  Branch (92:7): [Folded, False: 0]
  ------------------
   93|      0|  if (PROTOBUF_PREDICT_TRUE(VarintShlAnd<4>(next(), res1, res3))) goto done2;
  ------------------
  |  |  364|      0|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 0]
  |  |  |  Branch (364:62): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   94|      0|  if (limit <= 5) goto limit2;
  ------------------
  |  Branch (94:7): [Folded, False: 0]
  ------------------
   95|       |
   96|      0|  if (kIs64BitVarint) {
  ------------------
  |  Branch (96:7): [True: 0, Folded]
  ------------------
   97|      0|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<5>(next(), res1, res2))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   98|      0|    if (limit <= 6) goto limit2;
  ------------------
  |  Branch (98:9): [Folded, False: 0]
  ------------------
   99|      0|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<6>(next(), res1, res3))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  100|      0|    if (limit <= 7) goto limit2;
  ------------------
  |  Branch (100:9): [Folded, False: 0]
  ------------------
  101|      0|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<7>(next(), res1, res2))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  102|      0|    if (limit <= 8) goto limit2;
  ------------------
  |  Branch (102:9): [Folded, False: 0]
  ------------------
  103|      0|    if (PROTOBUF_PREDICT_FALSE(VarintShlAnd<8>(next(), res1, res3))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  104|      0|    if (limit <= 9) goto limit2;
  ------------------
  |  Branch (104:9): [Folded, False: 0]
  ------------------
  105|      0|  } else {
  106|       |    // An overlong int32 is expected to span the full 10 bytes
  107|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  108|      0|    if (limit <= 6) goto limit2;
  ------------------
  |  Branch (108:9): [Folded, False: 0]
  ------------------
  109|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  110|      0|    if (limit <= 7) goto limit2;
  ------------------
  |  Branch (110:9): [Folded, False: 0]
  ------------------
  111|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  112|      0|    if (limit <= 8) goto limit2;
  ------------------
  |  Branch (112:9): [Folded, False: 0]
  ------------------
  113|      0|    if (PROTOBUF_PREDICT_FALSE(!(next() & 0x80))) goto done2;
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  114|      0|    if (limit <= 9) goto limit2;
  ------------------
  |  Branch (114:9): [Folded, False: 0]
  ------------------
  115|      0|  }
  116|       |
  117|       |  // For valid 64bit varints, the 10th byte/ptr[9] should be exactly 1. In this
  118|       |  // case, the continuation bit of ptr[8] already set the top bit of res3
  119|       |  // correctly, so all we have to do is check that the expected case is true.
  120|      0|  if (PROTOBUF_PREDICT_TRUE(next() == 1)) goto done2;
  ------------------
  |  |  364|      0|# define PROTOBUF_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (364:35): [True: 0, False: 0]
  |  |  |  Branch (364:53): [Folded, False: 0]
  |  |  |  Branch (364:62): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  121|       |
  122|      0|  if (PROTOBUF_PREDICT_FALSE(last() & 0x80)) {
  ------------------
  |  |  365|      0|# define PROTOBUF_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (365:36): [True: 0, False: 0]
  |  |  |  Branch (365:54): [Folded, False: 0]
  |  |  |  Branch (365:63): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  123|       |    // If the continue bit is set, it is an unterminated varint.
  124|      0|    return nullptr;
  125|      0|  }
  126|       |
  127|       |  // A zero value of the first bit of the 10th byte represents an
  128|       |  // over-serialized varint. This case should not happen, but if does (say, due
  129|       |  // to a nonconforming serializer), deassert the continuation bit that came
  130|       |  // from ptr[8].
  131|      0|  if (kIs64BitVarint && (last() & 1) == 0) {
  ------------------
  |  Branch (131:7): [True: 0, Folded]
  |  Branch (131:25): [True: 0, False: 0]
  ------------------
  132|      0|    static constexpr int bits = 64 - 1;
  133|      0|#if defined(__GCC_ASM_FLAG_OUTPUTS__) && defined(__x86_64__)
  134|       |    // Use a small instruction since this is an uncommon code path.
  135|      0|    asm("btc %[bits], %[res3]" : [res3] "+r"(res3) : [bits] "i"(bits));
  136|       |#else
  137|       |    res3 ^= int64_t{1} << bits;
  138|       |#endif
  139|      0|  }
  140|       |
  141|      0|done2:
  142|      0|  res2 &= res3;
  143|     90|done1:
  144|     90|  res1 &= res2;
  145|     90|  PROTOBUF_ASSUME(p != nullptr);
  ------------------
  |  |  941|     90|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  146|     90|  return p;
  147|      0|limit2:
  148|      0|  res2 &= res3;
  149|      0|limit1:
  150|      0|  res1 &= res2;
  151|      0|limit0:
  152|      0|  PROTOBUF_ASSUME(p != nullptr);
  ------------------
  |  |  941|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  153|      0|  PROTOBUF_ASSUME(res1 < 0);
  ------------------
  |  |  941|      0|#define PROTOBUF_ASSUME(pred) __builtin_assume(pred)
  ------------------
  154|      0|  return p;
  155|      0|}
_ZZN6google8protobuf8internal19ShiftMixParseVarintImLi10EEEPKcS4_RlENKUlvE_clEv:
   77|    274|  const auto next = [&p] { return static_cast<const int8_t>(*p++); };

_ZN6google8protobuf8internal14WireFormatLite20InternalWriteMessageEiRKNS0_11MessageLiteEiPhPNS0_2io19EpsCopyOutputStreamE:
  537|    237|                                              io::EpsCopyOutputStream* stream) {
  538|    237|  target = stream->EnsureSpace(target);
  539|    237|  target = WriteTagToArray(field_number, WIRETYPE_LENGTH_DELIMITED, target);
  540|    237|  target = io::CodedOutputStream::WriteVarint32ToArray(
  541|    237|      static_cast<uint32_t>(cached_size), target);
  542|    237|  return value._InternalSerialize(target, stream);
  543|    237|}
_ZN6google8protobuf8internal14WireFormatLite8EnumSizeERKNS0_13RepeatedFieldIiEE:
  753|     17|size_t WireFormatLite::EnumSize(const RepeatedField<int>& value) {
  754|       |  // On ILP64, sizeof(int) == 8, which would require a different template.
  755|     17|  return VarintSize<false, true>(value.data(), value.size());
  756|     17|}
wire_format_lite.cc:_ZN6google8protobuf8internalL10VarintSizeILb0ELb1EiEEmPKT1_i:
  635|     17|static size_t VarintSize(const T* data, const int n) {
  636|     17|  static_assert(sizeof(T) == 4, "This routine only works for 32 bit integers");
  637|       |  // is_unsigned<T> => !ZigZag
  638|     17|  static_assert(
  639|     17|      (std::is_unsigned<T>::value ^ ZigZag) || std::is_signed<T>::value,
  640|     17|      "Cannot ZigZag encode unsigned types");
  641|       |  // is_unsigned<T> => !SignExtended
  642|     17|  static_assert(
  643|     17|      (std::is_unsigned<T>::value ^ SignExtended) || std::is_signed<T>::value,
  644|     17|      "Cannot SignExtended unsigned types");
  645|     17|  static_assert(!(SignExtended && ZigZag),
  646|     17|                "Cannot SignExtended and ZigZag on the same type");
  647|       |  // This approach is only faster when vectorized, and the vectorized
  648|       |  // implementation only works in units of the platform's vector width, and is
  649|       |  // only faster once a certain number of iterations are used. Normally the
  650|       |  // compiler generates two loops - one partially unrolled vectorized loop that
  651|       |  // processes big chunks, and a second "epilogue" scalar loop to finish up the
  652|       |  // remainder. This is done manually here so that the faster scalar
  653|       |  // implementation is used for small inputs and for the epilogue.
  654|     17|  int vectorN = n & -32;
  655|     17|  uint32_t sum = vectorN;
  656|     17|  uint32_t msb_sum = 0;
  657|     17|  int i = 0;
  658|     17|  for (; i < vectorN; i++) {
  ------------------
  |  Branch (658:10): [True: 0, False: 17]
  ------------------
  659|      0|    uint32_t x = data[i];
  660|      0|    if (ZigZag) {
  ------------------
  |  Branch (660:9): [Folded, False: 0]
  ------------------
  661|      0|      x = WireFormatLite::ZigZagEncode32(x);
  662|      0|    } else if (SignExtended) {
  ------------------
  |  Branch (662:16): [True: 0, Folded]
  ------------------
  663|      0|      msb_sum += x >> 31;
  664|      0|    }
  665|       |    // clang is so smart that it produces optimal SIMD sequence unrolling
  666|       |    // the loop 8 ints at a time. With a sequence of 4
  667|       |    // cmpres = cmpgt x, sizeclass  ( -1 or 0)
  668|       |    // sum = sum - cmpres
  669|      0|    if (x > 0x7F) sum++;
  ------------------
  |  Branch (669:9): [True: 0, False: 0]
  ------------------
  670|      0|    if (x > 0x3FFF) sum++;
  ------------------
  |  Branch (670:9): [True: 0, False: 0]
  ------------------
  671|      0|    if (x > 0x1FFFFF) sum++;
  ------------------
  |  Branch (671:9): [True: 0, False: 0]
  ------------------
  672|      0|    if (x > 0xFFFFFFF) sum++;
  ------------------
  |  Branch (672:9): [True: 0, False: 0]
  ------------------
  673|      0|  }
  674|     17|#ifdef __clang__
  675|       |// Clang is not smart enough to see that this loop doesn't run many times
  676|       |// NOLINTNEXTLINE(google3-runtime-pragma-loop-hint): b/315043579
  677|     17|#pragma clang loop vectorize(disable) unroll(disable) interleave(disable)
  678|     17|#endif
  679|     36|  for (; i < n; i++) {
  ------------------
  |  Branch (679:10): [True: 19, False: 17]
  ------------------
  680|     19|    uint32_t x = data[i];
  681|     19|    if (ZigZag) {
  ------------------
  |  Branch (681:9): [Folded, False: 19]
  ------------------
  682|      0|      sum += WireFormatLite::SInt32Size(x);
  683|     19|    } else if (SignExtended) {
  ------------------
  |  Branch (683:16): [True: 19, Folded]
  ------------------
  684|     19|      sum += WireFormatLite::Int32Size(x);
  685|     19|    } else {
  686|      0|      sum += WireFormatLite::UInt32Size(x);
  687|      0|    }
  688|     19|  }
  689|     17|  if (SignExtended) sum += msb_sum * 5;
  ------------------
  |  Branch (689:7): [True: 17, Folded]
  ------------------
  690|     17|  return sum;
  691|     17|}

_ZN6google8protobuf8internal14WireFormatLite20WireTypeForFieldTypeENS2_9FieldTypeE:
  141|      8|      WireFormatLite::FieldType type) {
  142|      8|    return kWireTypeForFieldType[type];
  143|      8|  }
_ZN6google8protobuf8internal14WireFormatLite18FieldTypeToCppTypeENS2_9FieldTypeE:
  823|  1.10k|    FieldType type) {
  824|  1.10k|  return kFieldTypeToCppTypeMap[type];
  825|  1.10k|}
_ZN6google8protobuf8internal14WireFormatLite7TagSizeEiNS2_9FieldTypeE:
  841|    416|                                      WireFormatLite::FieldType type) {
  842|    416|  size_t result = io::CodedOutputStream::VarintSize32(
  843|    416|      static_cast<uint32_t>(field_number << kTagTypeBits));
  844|    416|  if (type == TYPE_GROUP) {
  ------------------
  |  Branch (844:7): [True: 0, False: 416]
  ------------------
  845|       |    // Groups have both a start and an end tag.
  846|      0|    return result * 2;
  847|    416|  } else {
  848|    416|    return result;
  849|    416|  }
  850|    416|}
_ZN6google8protobuf8internal14WireFormatLite21WriteEnumNoTagToArrayEiPh:
 1480|  1.52k|                                                      uint8_t* target) {
 1481|  1.52k|  return io::CodedOutputStream::WriteVarint32SignExtendedToArray(value, target);
 1482|  1.52k|}
_ZN6google8protobuf8internal14WireFormatLite16WriteEnumToArrayEiiPh:
 1653|  1.52k|                                                 uint8_t* target) {
 1654|  1.52k|  target = WriteTagToArray(field_number, WIRETYPE_VARINT, target);
 1655|  1.52k|  return WriteEnumNoTagToArray(value, target);
 1656|  1.52k|}
_ZN6google8protobuf8internal14WireFormatLite9Int32SizeEi:
 1781|     19|inline size_t WireFormatLite::Int32Size(int32_t value) {
 1782|     19|  return io::CodedOutputStream::VarintSize32SignExtended(value);
 1783|     19|}
_ZN6google8protobuf8internal14WireFormatLite8EnumSizeEi:
 1799|  1.51k|inline size_t WireFormatLite::EnumSize(int value) {
 1800|  1.51k|  return io::CodedOutputStream::VarintSize32SignExtended(value);
 1801|  1.51k|}
_ZN6google8protobuf8internal14WireFormatLite11MessageSizeINS0_27FieldOptions_EditionDefaultEEEmRKT_:
 1855|     18|inline size_t WireFormatLite::MessageSize(const MessageType& value) {
 1856|     18|  return LengthDelimitedSize(value.ByteSizeLong());
 1857|     18|}
_ZN6google8protobuf8internal14WireFormatLite11MessageSizeINS0_27FieldOptions_FeatureSupportEEEmRKT_:
 1855|      9|inline size_t WireFormatLite::MessageSize(const MessageType& value) {
 1856|      9|  return LengthDelimitedSize(value.ByteSizeLong());
 1857|      9|}

feature_resolver.cc:_ZN4absl12lts_2024011613c_upper_boundIKN6google8protobuf16RepeatedPtrFieldINS3_43FeatureSetDefaults_FeatureSetEditionDefaultEEES5_RZNS3_15FeatureResolver6CreateENS3_7EditionERKNS3_18FeatureSetDefaultsEE3$_0EEDTcl5beginclsr3stdE7declvalIRT_EEEESG_RKT0_OT1_:
 1086|      4|    Sequence& sequence, const T& value, LessThan&& comp) {
 1087|      4|  return std::upper_bound(container_algorithm_internal::c_begin(sequence),
 1088|      4|                          container_algorithm_internal::c_end(sequence), value,
 1089|      4|                          std::forward<LessThan>(comp));
 1090|      4|}
_ZN4absl12lts_2024011628container_algorithm_internal7c_beginIKN6google8protobuf16RepeatedPtrFieldINS4_43FeatureSetDefaults_FeatureSetEditionDefaultEEEEEDTcl5beginclsr3stdE7declvalIRT_EEEESA_:
  100|      4|ContainerIter<C> c_begin(C& c) {
  101|      4|  return begin(c);
  102|      4|}
_ZN4absl12lts_2024011628container_algorithm_internal5c_endIKN6google8protobuf16RepeatedPtrFieldINS4_43FeatureSetDefaults_FeatureSetEditionDefaultEEEEEDTcl5beginclsr3stdE7declvalIRT_EEEESA_:
  105|      4|ContainerIter<C> c_end(C& c) {
  106|      4|  return end(c);
  107|      4|}

_ZN4absl12lts_202401169once_flagC2Ev:
   89|     57|  constexpr once_flag() : control_(0) {}
_ZN4absl12lts_2024011613base_internal16SchedulingHelperC2ENS1_14SchedulingModeE:
  116|      5|  explicit SchedulingHelper(base_internal::SchedulingMode mode) : mode_(mode) {
  117|      5|    if (mode_ == base_internal::SCHEDULE_KERNEL_ONLY) {
  ------------------
  |  Branch (117:9): [True: 0, False: 5]
  ------------------
  118|      0|      guard_result_ = base_internal::SchedulingGuard::DisableRescheduling();
  119|      0|    }
  120|      5|  }
_ZN4absl12lts_2024011613base_internal16SchedulingHelperD2Ev:
  122|      5|  ~SchedulingHelper() {
  123|      5|    if (mode_ == base_internal::SCHEDULE_KERNEL_ONLY) {
  ------------------
  |  Branch (123:9): [True: 0, False: 5]
  ------------------
  124|      0|      base_internal::SchedulingGuard::EnableRescheduling(guard_result_);
  125|      0|    }
  126|      5|  }
_ZN4absl12lts_2024011613base_internal11ControlWordEPNS0_9once_flagE:
  193|   595k|    absl::Nonnull<once_flag*> flag) {
  194|   595k|  return &flag->control_;
  195|   595k|}
generated_message_reflection.cc:_ZN4absl12lts_202401169call_onceIZN6google8protobuf8internal17AssignDescriptorsEPKNS4_15DescriptorTableEE3$_0JEEEvRNS0_9once_flagEOT_DpOT0_:
  212|      1|void call_once(absl::once_flag& flag, Callable&& fn, Args&&... args) {
  213|      1|  std::atomic<uint32_t>* once = base_internal::ControlWord(&flag);
  214|      1|  uint32_t s = once->load(std::memory_order_acquire);
  215|      1|  if (ABSL_PREDICT_FALSE(s != base_internal::kOnceDone)) {
  ------------------
  |  |  178|      1|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 1]
  |  |  |  Branch (178:49): [Folded, False: 1]
  |  |  |  Branch (178:58): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  216|      0|    base_internal::CallOnceImpl(
  217|      0|        once, base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL,
  218|      0|        std::forward<Callable>(fn), std::forward<Args>(args)...);
  219|      0|  }
  220|      1|}
message.cc:_ZN4absl12lts_202401169call_onceIZN6google8protobuf7Message15GetMetadataImplERKNS3_8internal13ClassDataFullEE3$_0JEEEvRNS0_9once_flagEOT_DpOT0_:
  212|   595k|void call_once(absl::once_flag& flag, Callable&& fn, Args&&... args) {
  213|   595k|  std::atomic<uint32_t>* once = base_internal::ControlWord(&flag);
  214|   595k|  uint32_t s = once->load(std::memory_order_acquire);
  215|   595k|  if (ABSL_PREDICT_FALSE(s != base_internal::kOnceDone)) {
  ------------------
  |  |  178|   595k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 4, False: 595k]
  |  |  |  Branch (178:49): [Folded, False: 595k]
  |  |  |  Branch (178:58): [True: 4, False: 595k]
  |  |  ------------------
  ------------------
  216|      4|    base_internal::CallOnceImpl(
  217|      4|        once, base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL,
  218|      4|        std::forward<Callable>(fn), std::forward<Args>(args)...);
  219|      4|  }
  220|   595k|}
message.cc:_ZN4absl12lts_2024011613base_internal12CallOnceImplIZN6google8protobuf7Message15GetMetadataImplERKNS4_8internal13ClassDataFullEE3$_0JEEEvPNSt3__16atomicIjEENS1_14SchedulingModeEOT_DpOT0_:
  153|      4|    Args&&... args) {
  154|       |#ifndef NDEBUG
  155|       |  {
  156|       |    uint32_t old_control = control->load(std::memory_order_relaxed);
  157|       |    if (old_control != kOnceInit &&
  158|       |        old_control != kOnceRunning &&
  159|       |        old_control != kOnceWaiter &&
  160|       |        old_control != kOnceDone) {
  161|       |      ABSL_RAW_LOG(FATAL, "Unexpected value for control word: 0x%lx",
  162|       |                   static_cast<unsigned long>(old_control));  // NOLINT
  163|       |    }
  164|       |  }
  165|       |#endif  // NDEBUG
  166|      4|  static const base_internal::SpinLockWaitTransition trans[] = {
  167|      4|      {kOnceInit, kOnceRunning, true},
  168|      4|      {kOnceRunning, kOnceWaiter, false},
  169|      4|      {kOnceDone, kOnceDone, true}};
  170|       |
  171|       |  // Must do this before potentially modifying control word's state.
  172|      4|  base_internal::SchedulingHelper maybe_disable_scheduling(scheduling_mode);
  173|       |  // Short circuit the simplest case to avoid procedure call overhead.
  174|       |  // The base_internal::SpinLockWait() call returns either kOnceInit or
  175|       |  // kOnceDone. If it returns kOnceDone, it must have loaded the control word
  176|       |  // with std::memory_order_acquire and seen a value of kOnceDone.
  177|      4|  uint32_t old_control = kOnceInit;
  178|      4|  if (control->compare_exchange_strong(old_control, kOnceRunning,
  ------------------
  |  Branch (178:7): [True: 4, False: 0]
  ------------------
  179|      4|                                       std::memory_order_relaxed) ||
  180|      0|      base_internal::SpinLockWait(control, ABSL_ARRAYSIZE(trans), trans,
  ------------------
  |  |   45|      0|  (sizeof(::absl::macros_internal::ArraySizeHelper(array)))
  ------------------
  |  Branch (180:7): [True: 0, False: 0]
  ------------------
  181|      4|                                  scheduling_mode) == kOnceInit) {
  182|      4|    base_internal::invoke(std::forward<Callable>(fn),
  183|      4|                          std::forward<Args>(args)...);
  184|      4|    old_control =
  185|      4|        control->exchange(base_internal::kOnceDone, std::memory_order_release);
  186|      4|    if (old_control == base_internal::kOnceWaiter) {
  ------------------
  |  Branch (186:9): [True: 0, False: 4]
  ------------------
  187|      0|      base_internal::SpinLockWake(control, true);
  188|      0|    }
  189|      4|  }  // else *control is already kOnceDone
  190|      4|}
log_sink_set.cc:_ZN4absl12lts_202401169call_onceIZNS0_12log_internal12_GLOBAL__N_113StderrLogSink4SendERKNS0_8LogEntryEEUlvE_JEEEvRNS0_9once_flagEOT_DpOT0_:
  212|     24|void call_once(absl::once_flag& flag, Callable&& fn, Args&&... args) {
  213|     24|  std::atomic<uint32_t>* once = base_internal::ControlWord(&flag);
  214|     24|  uint32_t s = once->load(std::memory_order_acquire);
  215|     24|  if (ABSL_PREDICT_FALSE(s != base_internal::kOnceDone)) {
  ------------------
  |  |  178|     24|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 1, False: 23]
  |  |  |  Branch (178:49): [Folded, False: 24]
  |  |  |  Branch (178:58): [True: 1, False: 23]
  |  |  ------------------
  ------------------
  216|      1|    base_internal::CallOnceImpl(
  217|      1|        once, base_internal::SCHEDULE_COOPERATIVE_AND_KERNEL,
  218|      1|        std::forward<Callable>(fn), std::forward<Args>(args)...);
  219|      1|  }
  220|     24|}
log_sink_set.cc:_ZN4absl12lts_2024011613base_internal12CallOnceImplIZNS0_12log_internal12_GLOBAL__N_113StderrLogSink4SendERKNS0_8LogEntryEEUlvE_JEEEvPNSt3__16atomicIjEENS1_14SchedulingModeEOT_DpOT0_:
  153|      1|    Args&&... args) {
  154|       |#ifndef NDEBUG
  155|       |  {
  156|       |    uint32_t old_control = control->load(std::memory_order_relaxed);
  157|       |    if (old_control != kOnceInit &&
  158|       |        old_control != kOnceRunning &&
  159|       |        old_control != kOnceWaiter &&
  160|       |        old_control != kOnceDone) {
  161|       |      ABSL_RAW_LOG(FATAL, "Unexpected value for control word: 0x%lx",
  162|       |                   static_cast<unsigned long>(old_control));  // NOLINT
  163|       |    }
  164|       |  }
  165|       |#endif  // NDEBUG
  166|      1|  static const base_internal::SpinLockWaitTransition trans[] = {
  167|      1|      {kOnceInit, kOnceRunning, true},
  168|      1|      {kOnceRunning, kOnceWaiter, false},
  169|      1|      {kOnceDone, kOnceDone, true}};
  170|       |
  171|       |  // Must do this before potentially modifying control word's state.
  172|      1|  base_internal::SchedulingHelper maybe_disable_scheduling(scheduling_mode);
  173|       |  // Short circuit the simplest case to avoid procedure call overhead.
  174|       |  // The base_internal::SpinLockWait() call returns either kOnceInit or
  175|       |  // kOnceDone. If it returns kOnceDone, it must have loaded the control word
  176|       |  // with std::memory_order_acquire and seen a value of kOnceDone.
  177|      1|  uint32_t old_control = kOnceInit;
  178|      1|  if (control->compare_exchange_strong(old_control, kOnceRunning,
  ------------------
  |  Branch (178:7): [True: 1, False: 0]
  ------------------
  179|      1|                                       std::memory_order_relaxed) ||
  180|      0|      base_internal::SpinLockWait(control, ABSL_ARRAYSIZE(trans), trans,
  ------------------
  |  |   45|      0|  (sizeof(::absl::macros_internal::ArraySizeHelper(array)))
  ------------------
  |  Branch (180:7): [True: 0, False: 0]
  ------------------
  181|      1|                                  scheduling_mode) == kOnceInit) {
  182|      1|    base_internal::invoke(std::forward<Callable>(fn),
  183|      1|                          std::forward<Args>(args)...);
  184|      1|    old_control =
  185|      1|        control->exchange(base_internal::kOnceDone, std::memory_order_release);
  186|      1|    if (old_control == base_internal::kOnceWaiter) {
  ------------------
  |  Branch (186:9): [True: 0, False: 1]
  ------------------
  187|      0|      base_internal::SpinLockWake(control, true);
  188|      0|    }
  189|      1|  }  // else *control is already kOnceDone
  190|      1|}

_ZN4absl12lts_202401168bit_castIPKvN6google8protobuf8internal12ExtensionSet9Extension7PointerETnNSt3__19enable_ifIXaaaaeqstT_stT0_sr3std21is_trivially_copyableISD_EE5valuesr3std21is_trivially_copyableISC_EE5valueEiE4typeELi0EEESC_RKSD_:
  163|  1.51k|inline constexpr Dest bit_cast(const Source& source) {
  164|  1.51k|  return __builtin_bit_cast(Dest, source);
  165|  1.51k|}

_ZN4absl12lts_2024011613little_endian10FromHost32Ej:
  110|     24|inline uint32_t FromHost32(uint32_t x) { return x; }
_ZN4absl12lts_2024011613little_endian10FromHost64Em:
  113|     24|inline uint64_t FromHost64(uint64_t x) { return x; }
_ZN4absl12lts_2024011613little_endian7Store32EPvj:
  176|     24|inline void Store32(absl::Nonnull<void *> p, uint32_t v) {
  177|     24|  ABSL_INTERNAL_UNALIGNED_STORE32(p, FromHost32(v));
  ------------------
  |  |   83|     24|  (absl::base_internal::UnalignedStore32(_p, _val))
  ------------------
  178|     24|}
_ZN4absl12lts_2024011613little_endian7Store64EPvm:
  184|     24|inline void Store64(absl::Nonnull<void *> p, uint64_t v) {
  185|     24|  ABSL_INTERNAL_UNALIGNED_STORE64(p, FromHost64(v));
  ------------------
  |  |   85|     24|  (absl::base_internal::UnalignedStore64(_p, _val))
  ------------------
  186|     24|}

_ZN4absl12lts_2024011613base_internal10ErrnoSaverC2Ev:
   31|     24|  ErrnoSaver() : saved_errno_(errno) {}
_ZN4absl12lts_2024011613base_internal10ErrnoSaverD2Ev:
   32|     24|  ~ErrnoSaver() { errno = saved_errno_; }

_ZN4absl12lts_2024011613base_internal6GetTIDEv:
  396|      1|pid_t GetTID() {
  397|       |  return static_cast<pid_t>(syscall(SYS_gettid));
  398|      1|}
_ZN4absl12lts_2024011613base_internal12GetCachedTIDEv:
  478|     24|pid_t GetCachedTID() {
  479|     24|#ifdef ABSL_HAVE_THREAD_LOCAL
  480|     24|  static thread_local pid_t thread_id = GetTID();
  481|     24|  return thread_id;
  482|       |#else
  483|       |  return GetTID();
  484|       |#endif  // ABSL_HAVE_THREAD_LOCAL
  485|     24|}

_ZN4absl12lts_2024011613base_internal15UnalignedLoad32EPKv:
   45|   516k|inline uint32_t UnalignedLoad32(absl::Nonnull<const void *> p) {
   46|   516k|  uint32_t t;
   47|   516k|  memcpy(&t, p, sizeof t);
   48|   516k|  return t;
   49|   516k|}
_ZN4absl12lts_2024011613base_internal15UnalignedLoad64EPKv:
   51|  13.2k|inline uint64_t UnalignedLoad64(absl::Nonnull<const void *> p) {
   52|  13.2k|  uint64_t t;
   53|  13.2k|  memcpy(&t, p, sizeof t);
   54|  13.2k|  return t;
   55|  13.2k|}
_ZN4absl12lts_2024011613base_internal16UnalignedStore32EPvj:
   61|     24|inline void UnalignedStore32(absl::Nonnull<void *> p, uint32_t v) {
   62|     24|  memcpy(p, &v, sizeof v);
   63|     24|}
_ZN4absl12lts_2024011613base_internal16UnalignedStore64EPvm:
   65|     24|inline void UnalignedStore64(absl::Nonnull<void *> p, uint64_t v) {
   66|     24|  memcpy(p, &v, sizeof v);
   67|     24|}

_ZN4absl12lts_2024011615LogSeverityNameENS0_11LogSeverityE:
  101|     24|constexpr const char* LogSeverityName(absl::LogSeverity s) {
  102|     24|  switch (s) {
  ------------------
  |  Branch (102:11): [True: 24, False: 0]
  ------------------
  103|      0|    case absl::LogSeverity::kInfo: return "INFO";
  ------------------
  |  Branch (103:5): [True: 0, False: 24]
  ------------------
  104|      6|    case absl::LogSeverity::kWarning: return "WARNING";
  ------------------
  |  Branch (104:5): [True: 6, False: 18]
  ------------------
  105|     18|    case absl::LogSeverity::kError: return "ERROR";
  ------------------
  |  Branch (105:5): [True: 18, False: 6]
  ------------------
  106|      0|    case absl::LogSeverity::kFatal: return "FATAL";
  ------------------
  |  Branch (106:5): [True: 0, False: 24]
  ------------------
  107|     24|  }
  108|      0|  return "UNKNOWN";
  109|     24|}
_ZN4absl12lts_2024011620NormalizeLogSeverityENS0_11LogSeverityE:
  115|     24|constexpr absl::LogSeverity NormalizeLogSeverity(absl::LogSeverity s) {
  116|     24|  absl::LogSeverity n = s;
  117|     24|  if (n < absl::LogSeverity::kInfo) n = absl::LogSeverity::kInfo;
  ------------------
  |  Branch (117:7): [True: 0, False: 24]
  ------------------
  118|     24|  if (n > absl::LogSeverity::kFatal) n = absl::LogSeverity::kError;
  ------------------
  |  Branch (118:7): [True: 0, False: 24]
  ------------------
  119|     24|  return n;
  120|     24|}
_ZN4absl12lts_20240116ltENS0_11LogSeverityENS0_18LogSeverityAtLeastE:
  165|     48|  constexpr bool operator op2(absl::LogSeverity lhs, absl::T rhs) { \
  166|     48|    return lhs op2 static_cast<absl::LogSeverity>(rhs);             \
  167|     48|  }

log_sink_set.cc:_ZN4absl12lts_2024011612NoDestructorINS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSetEEC2IJETnNSt3__19enable_ifIXntsr3std7is_sameIFvDpRu7__decayIT_EEFvRS5_EEE5valueEiE4typeELi0EEEDpOS9_:
  127|      1|      : impl_(std::forward<Ts>(args)...) {}
log_sink_set.cc:_ZN4absl12lts_2024011612NoDestructorINS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSetEE13PlacementImplC2IJEEEDpOT_:
  165|      1|    explicit PlacementImpl(Args&&... args) {
  166|      1|      new (&space_) T(std::forward<Args>(args)...);
  167|      1|    }
log_sink_set.cc:_ZN4absl12lts_2024011612NoDestructorINS0_12log_internal12_GLOBAL__N_113StderrLogSinkEEC2IJETnNSt3__19enable_ifIXntsr3std7is_sameIFvDpRu7__decayIT_EEFvRS5_EEE5valueEiE4typeELi0EEEDpOS9_:
  127|      1|      : impl_(std::forward<Ts>(args)...) {}
log_sink_set.cc:_ZN4absl12lts_2024011612NoDestructorINS0_12log_internal12_GLOBAL__N_113StderrLogSinkEE13PlacementImplC2IJEEEDpOT_:
  165|      1|    explicit PlacementImpl(Args&&... args) {
  166|      1|      new (&space_) T(std::forward<Args>(args)...);
  167|      1|    }
log_sink_set.cc:_ZN4absl12lts_2024011612NoDestructorINS0_12log_internal12_GLOBAL__N_113StderrLogSinkEE3getEv:
  144|      1|  T* get() { return impl_.get(); }
log_sink_set.cc:_ZN4absl12lts_2024011612NoDestructorINS0_12log_internal12_GLOBAL__N_113StderrLogSinkEE13PlacementImpl3getEv:
  171|      1|    T* get() { return Launder(reinterpret_cast<T*>(&space_)); }
log_sink_set.cc:_ZN4absl12lts_2024011612NoDestructorINS0_12log_internal12_GLOBAL__N_113StderrLogSinkEE13PlacementImpl7LaunderIS4_EEPT_S9_:
  175|      1|    static P* Launder(P* p) {
  176|      1|#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606L
  177|      1|      return std::launder(p);
  178|       |#elif ABSL_HAVE_BUILTIN(__builtin_launder)
  179|       |      return __builtin_launder(p);
  180|       |#else
  181|       |      // When `std::launder` or equivalent are not available, we rely on
  182|       |      // undefined behavior, which works as intended on Abseil's officially
  183|       |      // supported platforms as of Q3 2023.
  184|       |#if defined(__GNUC__) && !defined(__clang__)
  185|       |#pragma GCC diagnostic push
  186|       |#pragma GCC diagnostic ignored "-Wstrict-aliasing"
  187|       |#endif
  188|       |      return p;
  189|       |#if defined(__GNUC__) && !defined(__clang__)
  190|       |#pragma GCC diagnostic pop
  191|       |#endif
  192|       |#endif
  193|      1|    }
log_sink_set.cc:_ZN4absl12lts_2024011612NoDestructorINS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSetEEdeEv:
  142|     24|  T& operator*() { return *get(); }
log_sink_set.cc:_ZN4absl12lts_2024011612NoDestructorINS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSetEE3getEv:
  144|     24|  T* get() { return impl_.get(); }
log_sink_set.cc:_ZN4absl12lts_2024011612NoDestructorINS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSetEE13PlacementImpl3getEv:
  171|     24|    T* get() { return Launder(reinterpret_cast<T*>(&space_)); }
log_sink_set.cc:_ZN4absl12lts_2024011612NoDestructorINS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSetEE13PlacementImpl7LaunderIS4_EEPT_S9_:
  175|     24|    static P* Launder(P* p) {
  176|     24|#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606L
  177|     24|      return std::launder(p);
  178|       |#elif ABSL_HAVE_BUILTIN(__builtin_launder)
  179|       |      return __builtin_launder(p);
  180|       |#else
  181|       |      // When `std::launder` or equivalent are not available, we rely on
  182|       |      // undefined behavior, which works as intended on Abseil's officially
  183|       |      // supported platforms as of Q3 2023.
  184|       |#if defined(__GNUC__) && !defined(__clang__)
  185|       |#pragma GCC diagnostic push
  186|       |#pragma GCC diagnostic ignored "-Wstrict-aliasing"
  187|       |#endif
  188|       |      return p;
  189|       |#if defined(__GNUC__) && !defined(__clang__)
  190|       |#pragma GCC diagnostic pop
  191|       |#endif
  192|       |#endif
  193|     24|    }

_ZN4absl12lts_2024011623PrefetchToLocalCacheNtaEPKv:
  151|    448|    const void* addr) {
  152|    448|  __builtin_prefetch(addr, 0, 0);
  153|    448|}
_ZN4absl12lts_2024011628PrefetchToLocalCacheForWriteEPKv:
  156|  13.8k|    const void* addr) {
  157|       |  // [x86] gcc/clang don't generate PREFETCHW for __builtin_prefetch(.., 1)
  158|       |  // unless -march=broadwell or newer; this is not generally the default, so we
  159|       |  // manually emit prefetchw. PREFETCHW is recognized as a no-op on older Intel
  160|       |  // processors and has been present on AMD processors since the K6-2.
  161|  13.8k|#if defined(__x86_64__) && !defined(__PRFCHW__)
  162|  13.8k|  asm("prefetchw %0" : : "m"(*reinterpret_cast<const char*>(addr)));
  163|       |#else
  164|       |  __builtin_prefetch(addr, 1, 3);
  165|       |#endif
  166|  13.8k|}

descriptor.cc:_ZN4absl12lts_2024011611MakeCleanupIJEZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0EENS0_7CleanupINS0_16cleanup_internal3TagET0_EES9_:
  127|     28|absl::Cleanup<cleanup_internal::Tag, Callback> MakeCleanup(Callback callback) {
  128|     28|  static_assert(cleanup_internal::WasDeduced<cleanup_internal::Tag, Args...>(),
  129|     28|                "Explicit template parameters are not supported.");
  130|       |
  131|     28|  static_assert(cleanup_internal::ReturnsVoid<Callback>(),
  132|     28|                "Callbacks that return values are not supported.");
  133|       |
  134|     28|  return {std::move(callback)};
  135|     28|}
descriptor.cc:_ZN4absl12lts_202401167CleanupINS0_16cleanup_internal3TagEZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0EC2ES7_:
   89|     28|  Cleanup(Callback callback) : storage_(std::move(callback)) {}  // NOLINT
descriptor.cc:_ZN4absl12lts_202401167CleanupINS0_16cleanup_internal3TagEZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0ED2Ev:
  104|     28|  ~Cleanup() {
  105|     28|    if (storage_.IsCallbackEngaged()) {
  ------------------
  |  Branch (105:9): [True: 28, False: 0]
  ------------------
  106|     28|      storage_.InvokeCallback();
  107|     28|      storage_.DestroyCallback();
  108|     28|    }
  109|     28|  }
log_sink_set.cc:_ZN4absl12lts_2024011611MakeCleanupIJEZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_EENS0_7CleanupINS0_16cleanup_internal3TagET0_EESG_:
  127|     24|absl::Cleanup<cleanup_internal::Tag, Callback> MakeCleanup(Callback callback) {
  128|     24|  static_assert(cleanup_internal::WasDeduced<cleanup_internal::Tag, Args...>(),
  129|     24|                "Explicit template parameters are not supported.");
  130|       |
  131|     24|  static_assert(cleanup_internal::ReturnsVoid<Callback>(),
  132|     24|                "Callbacks that return values are not supported.");
  133|       |
  134|     24|  return {std::move(callback)};
  135|     24|}
log_sink_set.cc:_ZN4absl12lts_202401167CleanupINS0_16cleanup_internal3TagEZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_EC2ESE_:
   89|     24|  Cleanup(Callback callback) : storage_(std::move(callback)) {}  // NOLINT
log_sink_set.cc:_ZN4absl12lts_202401167CleanupINS0_16cleanup_internal3TagEZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_ED2Ev:
  104|     24|  ~Cleanup() {
  105|     24|    if (storage_.IsCallbackEngaged()) {
  ------------------
  |  Branch (105:9): [True: 24, False: 0]
  ------------------
  106|     24|      storage_.InvokeCallback();
  107|     24|      storage_.DestroyCallback();
  108|     24|    }
  109|     24|  }

descriptor.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0EC2ES6_:
   50|     28|  explicit Storage(Callback callback) {
   51|       |    // Placement-new into a character buffer is used for eager destruction when
   52|       |    // the cleanup is invoked or cancelled. To ensure this optimizes well, the
   53|       |    // behavior is implemented locally instead of using an absl::optional.
   54|     28|    ::new (GetCallbackBuffer()) Callback(std::move(callback));
   55|     28|    is_callback_engaged_ = true;
   56|     28|  }
descriptor.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0E17GetCallbackBufferEv:
   73|     84|  void* GetCallbackBuffer() { return static_cast<void*>(+callback_buffer_); }
descriptor.cc:_ZNK4absl12lts_2024011616cleanup_internal7StorageIZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0E17IsCallbackEngagedEv:
   79|     28|  bool IsCallbackEngaged() const { return is_callback_engaged_; }
descriptor.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0E14InvokeCallbackEv:
   86|     28|  void InvokeCallback() ABSL_NO_THREAD_SAFETY_ANALYSIS {
   87|     28|    std::move(GetCallback())();
   88|     28|  }
descriptor.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0E11GetCallbackEv:
   75|     56|  Callback& GetCallback() {
   76|     56|    return *reinterpret_cast<Callback*>(GetCallbackBuffer());
   77|     56|  }
descriptor.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZN6google8protobuf12_GLOBAL__N_115DisableTrackingEvE3$_0E15DestroyCallbackEv:
   81|     28|  void DestroyCallback() {
   82|     28|    is_callback_engaged_ = false;
   83|     28|    GetCallback().~Callback();
   84|     28|  }
log_sink_set.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_EC2ESD_:
   50|     24|  explicit Storage(Callback callback) {
   51|       |    // Placement-new into a character buffer is used for eager destruction when
   52|       |    // the cleanup is invoked or cancelled. To ensure this optimizes well, the
   53|       |    // behavior is implemented locally instead of using an absl::optional.
   54|     24|    ::new (GetCallbackBuffer()) Callback(std::move(callback));
   55|     24|    is_callback_engaged_ = true;
   56|     24|  }
log_sink_set.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_E17GetCallbackBufferEv:
   73|     72|  void* GetCallbackBuffer() { return static_cast<void*>(+callback_buffer_); }
log_sink_set.cc:_ZNK4absl12lts_2024011616cleanup_internal7StorageIZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_E17IsCallbackEngagedEv:
   79|     24|  bool IsCallbackEngaged() const { return is_callback_engaged_; }
log_sink_set.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_E14InvokeCallbackEv:
   86|     24|  void InvokeCallback() ABSL_NO_THREAD_SAFETY_ANALYSIS {
   87|     24|    std::move(GetCallback())();
   88|     24|  }
log_sink_set.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_E11GetCallbackEv:
   75|     48|  Callback& GetCallback() {
   76|     48|    return *reinterpret_cast<Callback*>(GetCallbackBuffer());
   77|     48|  }
log_sink_set.cc:_ZN4absl12lts_2024011616cleanup_internal7StorageIZNS0_12log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbEUlvE_E15DestroyCallbackEv:
   81|     24|  void DestroyCallback() {
   82|     24|    is_callback_engaged_ = false;
   83|     24|    GetCallback().~Callback();
   84|     24|  }

_ZN4absl12lts_202401169btree_mapINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS5_15FieldDescriptorENS2_4lessIS9_EENS2_9allocatorINS3_IKS9_SC_EEEEEC2Ev:
  134|      2|  btree_map() {}
_ZN4absl12lts_2024011618container_internal10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS6_15FieldDescriptorENS3_4lessISA_EENS3_9allocatorINS4_IKSA_SD_EEEELi256ELb0EE3keyISI_EEDTdtfp_5firstERKT_:
  869|      1|      -> decltype((value.first)) {
  870|      1|    return value.first;
  871|      1|  }

_ZN4absl12lts_2024011618container_internal10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS6_11FileCompareENSt3__19allocatorIS7_EELi256ELb0EE3keyEPKS7_:
  812|      7|  static const Key &key(const slot_type *slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEE9constructINSt3__19allocatorIS7_EEJS7_EEEvPT_PS7_DpOT0_:
  778|     13|  static void construct(Alloc *alloc, slot_type *slot, Args &&...args) {
  779|     13|    absl::allocator_traits<Alloc>::construct(*alloc, slot,
  780|     13|                                             std::forward<Args>(args)...);
  781|     13|  }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEE7elementEPS7_:
  774|     13|  static value_type &element(slot_type *slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEE7destroyINSt3__19allocatorIS7_EEEEvPT_PS7_:
  794|     11|  static void destroy(Alloc *alloc, slot_type *slot) {
  795|     11|    absl::allocator_traits<Alloc>::destroy(*alloc, slot);
  796|     11|  }
_ZN4absl12lts_2024011618container_internal10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS6_11FileCompareENSt3__19allocatorIS7_EELi256ELb0EE3keyIS7_EERKT_SG_:
  809|      6|  static const V &key(const V &value) {
  810|      6|    return value;
  811|      6|  }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEE9constructINSt3__19allocatorIS7_EEJS7_EEEvPT_PS7_DpOT0_:
  778|      1|  static void construct(Alloc *alloc, slot_type *slot, Args &&...args) {
  779|      1|    absl::allocator_traits<Alloc>::construct(*alloc, slot,
  780|      1|                                             std::forward<Args>(args)...);
  781|      1|  }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEE7elementEPS7_:
  774|      1|  static value_type &element(slot_type *slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEE7destroyINSt3__19allocatorIS7_EEEEvPT_PS7_:
  794|      1|  static void destroy(Alloc *alloc, slot_type *slot) {
  795|      1|    absl::allocator_traits<Alloc>::destroy(*alloc, slot);
  796|      1|  }
_ZN4absl12lts_2024011618container_internal10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS6_16ExtensionCompareENSt3__19allocatorIS7_EELi256ELb0EE3keyIS7_EERKT_SG_:
  809|      1|  static const V &key(const V &value) {
  810|      1|    return value;
  811|      1|  }
_ZN4absl12lts_2024011618container_internal10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS6_13SymbolCompareENSt3__19allocatorIS7_EELi256ELb0EE3keyEPKS7_:
  812|    271|  static const Key &key(const slot_type *slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEE7elementEPKS7_:
  775|     83|  static const value_type &element(const slot_type *slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEE9constructINSt3__19allocatorIS7_EEJS7_EEEvPT_PS7_DpOT0_:
  778|    183|  static void construct(Alloc *alloc, slot_type *slot, Args &&...args) {
  779|    183|    absl::allocator_traits<Alloc>::construct(*alloc, slot,
  780|    183|                                             std::forward<Args>(args)...);
  781|    183|  }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEE7elementEPS7_:
  774|    247|  static value_type &element(slot_type *slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEE7destroyINSt3__19allocatorIS7_EEEEvPT_PS7_:
  794|    226|  static void destroy(Alloc *alloc, slot_type *slot) {
  795|    226|    absl::allocator_traits<Alloc>::destroy(*alloc, slot);
  796|    226|  }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEE9constructINSt3__19allocatorIS7_EEEEvPT_PS7_SF_:
  784|      6|  static void construct(Alloc *alloc, slot_type *slot, slot_type *other) {
  785|      6|    absl::allocator_traits<Alloc>::construct(*alloc, slot, std::move(*other));
  786|      6|  }
_ZN4absl12lts_2024011618container_internal15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEE9constructINSt3__19allocatorIS7_EEJRKS7_EEEvPT_PS7_DpOT0_:
  778|     48|  static void construct(Alloc *alloc, slot_type *slot, Args &&...args) {
  779|     48|    absl::allocator_traits<Alloc>::construct(*alloc, slot,
  780|     48|                                             std::forward<Args>(args)...);
  781|     48|  }
_ZN4absl12lts_2024011618container_internal10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS6_13SymbolCompareENSt3__19allocatorIS7_EELi256ELb0EE3keyIS7_EERKT_SG_:
  809|     48|  static const V &key(const V &value) {
  810|     48|    return value;
  811|     48|  }

_ZN4absl12lts_2024011613flat_hash_mapIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS3_14DescriptorPool18DeferredValidation13LifetimesInfoENS7_9allocatorISB_EEEENS0_18container_internal6HashEqIS6_vE4HashENSH_2EqENSC_INS7_4pairIKS6_SE_EEEEEC2Ev:
  159|      5|  flat_hash_map() {}
_ZN4absl12lts_2024011613flat_hash_mapINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeENS0_18container_internal10StringHashENSD_8StringEqENS6_INS2_4pairIKS8_SC_EEEEEC2Ev:
  159|      2|  flat_hash_map() {}
_ZN4absl12lts_2024011613flat_hash_mapINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS2_10unique_ptrIN6google8protobuf10FeatureSetENS2_14default_deleteISC_EEEENS0_18container_internal10StringHashENSG_8StringEqENS6_INS2_4pairIKS8_SF_EEEEEC2Ev:
  159|      2|  flat_hash_map() {}
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE5applyINS1_12raw_hash_setISE_NS1_10StringHashENS1_8StringEqENS7_INS3_4pairIKS9_SD_EEEEE19EmplaceDecomposableEJRKNSJ_IS9_SD_EEEEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSS_DpOST_:
  590|     32|  apply(F&& f, Args&&... args) {
  591|     32|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  592|     32|                                                   std::forward<Args>(args)...);
  593|     32|  }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE5applyINS1_12raw_hash_setISE_NS1_10StringHashENS1_8StringEqENS7_INS3_4pairIKS9_SD_EEEEE12EqualElementIS9_EEJRSL_EEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSR_DpOSS_:
  590|      8|  apply(F&& f, Args&&... args) {
  591|      8|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  592|      8|                                                   std::forward<Args>(args)...);
  593|      8|  }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE7elementEPNS1_13map_slot_typeIS9_SD_EE:
  597|     37|  static std::pair<const K, V>& element(slot_type* slot) { return slot->value; }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE8transferINS7_INS3_4pairIKS9_SD_EEEEEEDaPT_PNS1_13map_slot_typeIS9_SD_EESO_:
  583|     50|                       slot_type* old_slot) {
  584|     50|    return slot_policy::transfer(alloc, new_slot, old_slot);
  585|     50|  }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE5applyINS1_12raw_hash_setISE_NS1_10StringHashENS1_8StringEqENS7_INS3_4pairIKS9_SD_EEEEE11HashElementEJRSL_EEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSQ_DpOSR_:
  590|     28|  apply(F&& f, Args&&... args) {
  591|     28|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  592|     28|                                                   std::forward<Args>(args)...);
  593|     28|  }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE9constructINS7_INS3_4pairIKS9_SD_EEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJRSH_EEENSN_IJRKSD_EEEEEEvPT_PNS1_13map_slot_typeIS9_SD_EEDpOT0_:
  572|     32|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  573|     32|    slot_policy::construct(alloc, slot, std::forward<Args>(args)...);
  574|     32|  }
_ZN4absl12lts_2024011613flat_hash_mapINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKN6google8protobuf23SourceCodeInfo_LocationENS0_18container_internal10StringHashENSE_8StringEqENS6_INS2_4pairIKS8_SD_EEEEEC2Ev:
  159|      4|  flat_hash_map() {}
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE5valueEPNS3_4pairIKS9_SG_EE:
  599|    210|  static V& value(std::pair<const K, V>* kv) { return kv->second; }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE7elementEPNS1_13map_slot_typeIS9_SG_EE:
  597|    416|  static std::pair<const K, V>& element(slot_type* slot) { return slot->value; }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE5applyINS1_12raw_hash_setISH_NS1_10StringHashENS1_8StringEqENS7_INS3_4pairIKS9_SG_EEEEE12EqualElementIS9_EEJRSO_EEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSU_DpOSV_:
  590|    206|  apply(F&& f, Args&&... args) {
  591|    206|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  592|    206|                                                   std::forward<Args>(args)...);
  593|    206|  }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE8transferINS7_INS3_4pairIKS9_SG_EEEEEEDaPT_PNS1_13map_slot_typeIS9_SG_EESR_:
  583|      4|                       slot_type* old_slot) {
  584|      4|    return slot_policy::transfer(alloc, new_slot, old_slot);
  585|      4|  }
_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE9constructINS7_INS3_4pairIKS9_SG_EEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJOS9_EEENSQ_IJEEEEEEvPT_PNS1_13map_slot_typeIS9_SG_EEDpOT0_:
  572|      4|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  573|      4|    slot_policy::construct(alloc, slot, std::forward<Args>(args)...);
  574|      4|  }
_ZN4absl12lts_2024011613flat_hash_mapINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbNS0_18container_internal10StringHashENS9_8StringEqENS6_INS2_4pairIKS8_bEEEEEC2Ev:
  159|      2|  flat_hash_map() {}
_ZN4absl12lts_2024011613flat_hash_mapIPKN6google8protobuf10DescriptorENS3_17DescriptorBuilder12MessageHintsENS0_18container_internal6HashEqIS6_vE4HashENSB_2EqENSt3__19allocatorINSE_4pairIKS6_S8_EEEEEC2Ev:
  159|      4|  flat_hash_map() {}
_ZN4absl12lts_2024011613flat_hash_mapINSt3__16vectorIiNS2_9allocatorIiEEEES6_NS0_13hash_internal4HashIS6_EENS2_8equal_toIS6_EENS4_INS2_4pairIKS6_S6_EEEEEC2Ev:
  159|      4|  flat_hash_map() {}
_ZN4absl12lts_2024011613flat_hash_mapINSt3__16vectorIiNS2_9allocatorIiEEEEiNS0_13hash_internal4HashIS6_EENS2_8equal_toIS6_EENS4_INS2_4pairIKS6_iEEEEEC2Ev:
  159|      4|  flat_hash_map() {}
_ZN4absl12lts_2024011613flat_hash_mapIPKN6google8protobuf10DescriptorEPKNS3_21DynamicMessageFactory8TypeInfoENS0_18container_internal6HashEqIS6_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS6_SA_EEEEEC2Ev:
  159|      6|  flat_hash_map() {}
message.cc:_ZN4absl12lts_2024011613flat_hash_mapIPKN6google8protobuf10DescriptorENS3_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrENS0_18container_internal6HashEqIS6_vE4HashENSC_2EqENSt3__19allocatorINSF_4pairIKS6_S9_EEEEEC2Ev:
  159|      2|  flat_hash_map() {}
message.cc:_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS4_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEE7elementEPNS1_13map_slot_typeIS7_SA_EE:
  597|  7.97k|  static std::pair<const K, V>& element(slot_type* slot) { return slot->value; }
message.cc:_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS4_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEE5applyINS1_12raw_hash_setISB_NS1_6HashEqIS7_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS7_SA_EEEEE12EqualElementIS7_EEJRSM_EEEDTclsr4absl18container_internalE13DecomposePairclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSS_DpOST_:
  590|  3.98k|  apply(F&& f, Args&&... args) {
  591|  3.98k|    return absl::container_internal::DecomposePair(std::forward<F>(f),
  592|  3.98k|                                                   std::forward<Args>(args)...);
  593|  3.98k|  }
message.cc:_ZN4absl12lts_2024011618container_internal17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS4_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEE9constructINSt3__19allocatorINSD_4pairIKS7_SA_EEEEJRKNSD_21piecewise_construct_tENSD_5tupleIJRSG_EEENSM_IJRPKNS4_7MessageEEEEEEEvPT_PNS1_13map_slot_typeIS7_SA_EEDpOT0_:
  572|     10|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  573|     10|    slot_policy::construct(alloc, slot, std::forward<Args>(args)...);
  574|     10|  }

descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS5_EEE12EqualElementINS9_13FullNameQueryEEEJRS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSK_DpOSL_:
  486|    102|  apply(F&& f, Args&&... args) {
  487|    102|    return absl::container_internal::DecomposeValue(
  488|    102|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    102|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE7elementEPS5_:
  481|   129k|  static T& element(slot_type* slot) { return *slot; }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_121DescriptorsByNameHashIS5_EENSB_19DescriptorsByNameEqIS5_EENSt3__19allocatorIS7_EEE12EqualElementINSG_17basic_string_viewIcNSG_11char_traitsIcEEEEEEJRS7_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSR_DpOSS_:
  486|      6|  apply(F&& f, Args&&... args) {
  487|      6|    return absl::container_internal::DecomposeValue(
  488|      6|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      6|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEE7elementEPS7_:
  481|     12|  static T& element(slot_type* slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEE7elementEPS7_:
  481|    298|  static T& element(slot_type* slot) { return *slot; }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS5_EEE12EqualElementINS9_15ParentNameQueryEEEJRS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSK_DpOSL_:
  486|  63.4k|  apply(F&& f, Args&&... args) {
  487|  63.4k|    return absl::container_internal::DecomposeValue(
  488|  63.4k|        std::forward<F>(f), std::forward<Args>(args)...);
  489|  63.4k|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEE7elementEPS7_:
  481|     42|  static T& element(slot_type* slot) { return *slot; }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEE7destroyINS3_9allocatorIS7_EEEEvPT_PS7_:
  477|      3|  static void destroy(Allocator* alloc, slot_type* slot) {
  478|      3|    absl::allocator_traits<Allocator>::destroy(*alloc, slot);
  479|      3|  }
_ZN4absl12lts_2024011613flat_hash_setINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS0_18container_internal10StringHashENS9_8StringEqENS6_IS8_EEEC2Ev:
  151|      4|  flat_hash_set() {}
_ZN4absl12lts_2024011613flat_hash_setIPKN6google8protobuf10DescriptorENS0_18container_internal6HashEqIS6_vE4HashENS9_2EqENSt3__19allocatorIS6_EEEC2Ev:
  151|      2|  flat_hash_set() {}
descriptor.cc:_ZN4absl12lts_2024011613flat_hash_setIN6google8protobuf6SymbolENS3_12_GLOBAL__N_120SymbolByFullNameHashENS5_18SymbolByFullNameEqENSt3__19allocatorIS4_EEEC2Ev:
  151|      2|  flat_hash_set() {}
descriptor.cc:_ZN4absl12lts_2024011613flat_hash_setIPKN6google8protobuf14FileDescriptorENS3_12_GLOBAL__N_121DescriptorsByNameHashIS4_EENS7_19DescriptorsByNameEqIS4_EENSt3__19allocatorIS6_EEEC2Ev:
  151|      2|  flat_hash_set() {}
descriptor.cc:_ZN4absl12lts_2024011613flat_hash_setIN6google8protobuf6SymbolENS3_12_GLOBAL__N_118SymbolByParentHashENS5_16SymbolByParentEqENSt3__19allocatorIS4_EEEC2Ev:
  151|      4|  flat_hash_set() {}
descriptor.cc:_ZN4absl12lts_2024011613flat_hash_setIPKN6google8protobuf15FieldDescriptorENS3_12_GLOBAL__N_116ParentNumberHashENS7_14ParentNumberEqENSt3__19allocatorIS6_EEEC2Ev:
  151|      4|  flat_hash_set() {}
descriptor.cc:_ZN4absl12lts_2024011613flat_hash_setIPKN6google8protobuf19EnumValueDescriptorENS3_12_GLOBAL__N_116ParentNumberHashENS7_14ParentNumberEqENSt3__19allocatorIS6_EEEC2Ev:
  151|      8|  flat_hash_set() {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS5_EEE12EqualElementIS5_EEJRS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSJ_DpOSK_:
  486|     33|  apply(F&& f, Args&&... args) {
  487|     33|    return absl::container_internal::DecomposeValue(
  488|     33|        std::forward<F>(f), std::forward<Args>(args)...);
  489|     33|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS7_EEE19EmplaceDecomposableEJRKPS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSM_DpOSN_:
  486|     15|  apply(F&& f, Args&&... args) {
  487|     15|    return absl::container_internal::DecomposeValue(
  488|     15|        std::forward<F>(f), std::forward<Args>(args)...);
  489|     15|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS7_EEE11HashElementEJRS7_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSK_DpOSL_:
  486|     14|  apply(F&& f, Args&&... args) {
  487|     14|    return absl::container_internal::DecomposeValue(
  488|     14|        std::forward<F>(f), std::forward<Args>(args)...);
  489|     14|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEE9constructINSt3__19allocatorIS7_EEJRKPS5_EEEvPT_PS7_DpOT0_:
  471|     15|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|     15|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|     15|                                                 std::forward<Args>(args)...);
  474|     15|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS5_EEE19EmplaceDecomposableEJRKS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSJ_DpOSK_:
  486|    362|  apply(F&& f, Args&&... args) {
  487|    362|    return absl::container_internal::DecomposeValue(
  488|    362|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    362|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS5_EEE11HashElementEJRS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSI_DpOSJ_:
  486|    434|  apply(F&& f, Args&&... args) {
  487|    434|    return absl::container_internal::DecomposeValue(
  488|    434|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    434|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE9constructINSt3__19allocatorIS5_EEJRKS5_EEEvPT_PS5_DpOT0_:
  471|    805|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|    805|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|    805|                                                 std::forward<Args>(args)...);
  474|    805|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS5_EEE19EmplaceDecomposableEJRKS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSJ_DpOSK_:
  486|    443|  apply(F&& f, Args&&... args) {
  487|    443|    return absl::container_internal::DecomposeValue(
  488|    443|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    443|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS5_EEE12EqualElementIS5_EEJRS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSJ_DpOSK_:
  486|     43|  apply(F&& f, Args&&... args) {
  487|     43|    return absl::container_internal::DecomposeValue(
  488|     43|        std::forward<F>(f), std::forward<Args>(args)...);
  489|     43|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf6SymbolEE5applyINS1_12raw_hash_setIS6_NS4_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS5_EEE11HashElementEJRS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSI_DpOSJ_:
  486|    476|  apply(F&& f, Args&&... args) {
  487|    476|    return absl::container_internal::DecomposeValue(
  488|    476|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    476|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_121DescriptorsByNameHashIS5_EENSB_19DescriptorsByNameEqIS5_EENSt3__19allocatorIS7_EEE19EmplaceDecomposableEJRKS7_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSN_DpOSO_:
  486|      4|  apply(F&& f, Args&&... args) {
  487|      4|    return absl::container_internal::DecomposeValue(
  488|      4|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      4|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEE9constructINSt3__19allocatorIS7_EEJRKS7_EEEvPT_PS7_DpOT0_:
  471|      4|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|      4|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|      4|                                                 std::forward<Args>(args)...);
  474|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS7_EEE19EmplaceDecomposableEJRKPS5_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSM_DpOSN_:
  486|    100|  apply(F&& f, Args&&... args) {
  487|    100|    return absl::container_internal::DecomposeValue(
  488|    100|        std::forward<F>(f), std::forward<Args>(args)...);
  489|    100|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS7_EEE12EqualElementIPS5_EEJRS7_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSM_DpOSN_:
  486|      4|  apply(F&& f, Args&&... args) {
  487|      4|    return absl::container_internal::DecomposeValue(
  488|      4|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEE5applyINS1_12raw_hash_setIS8_NS4_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS7_EEE11HashElementEJRS7_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSK_DpOSL_:
  486|     98|  apply(F&& f, Args&&... args) {
  487|     98|    return absl::container_internal::DecomposeValue(
  488|     98|        std::forward<F>(f), std::forward<Args>(args)...);
  489|     98|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEE9constructINSt3__19allocatorIS7_EEJRKPS5_EEEvPT_PS7_DpOT0_:
  471|    100|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|    100|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|    100|                                                 std::forward<Args>(args)...);
  474|    100|  }
_ZN4absl12lts_2024011613flat_hash_setIPKN6google8protobuf14FileDescriptorENS0_18container_internal6HashEqIS6_vE4HashENS9_2EqENSt3__19allocatorIS6_EEEC2Ev:
  151|      8|  flat_hash_set() {}
_ZN4absl12lts_2024011613flat_hash_setINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEENS0_18container_internal10StringHashENS7_8StringEqENS2_9allocatorIS6_EEEC2Ev:
  151|     67|  flat_hash_set() {}
_ZN4absl12lts_2024011613flat_hash_setIiNS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS5_9allocatorIiEEEC2Ev:
  151|      4|  flat_hash_set() {}
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEE5applyINS1_12raw_hash_setIS8_NS1_10StringHashENS1_8StringEqENS3_9allocatorIS7_EEE19EmplaceDecomposableEJRKNS3_12basic_stringIcS6_NSD_IcEEEEEEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSM_DpOSN_:
  486|      3|  apply(F&& f, Args&&... args) {
  487|      3|    return absl::container_internal::DecomposeValue(
  488|      3|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      3|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEE9constructINS3_9allocatorIS7_EEJRKNS3_12basic_stringIcS6_NSA_IcEEEEEEEvPT_PS7_DpOT0_:
  471|      3|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|      3|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|      3|                                                 std::forward<Args>(args)...);
  474|      3|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_115ExtensionHasherENSA_11ExtensionEqENSt3__19allocatorIS6_EEE12EqualElementINSA_16ExtensionInfoKeyEEEJRS6_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSL_DpOSM_:
  486|      8|  apply(F&& f, Args&&... args) {
  487|      8|    return absl::container_internal::DecomposeValue(
  488|      8|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      8|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEE7elementEPS6_:
  481|     16|  static T& element(slot_type* slot) { return *slot; }
extension_set.cc:_ZN4absl12lts_2024011613flat_hash_setIN6google8protobuf8internal13ExtensionInfoENS4_12_GLOBAL__N_115ExtensionHasherENS6_11ExtensionEqENSt3__19allocatorIS5_EEEC2Ev:
  151|      1|  flat_hash_set() {}
extension_set.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_115ExtensionHasherENSA_11ExtensionEqENSt3__19allocatorIS6_EEE19EmplaceDecomposableEJRKS6_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSK_DpOSL_:
  486|      1|  apply(F&& f, Args&&... args) {
  487|      1|    return absl::container_internal::DecomposeValue(
  488|      1|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      1|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEE9constructINSt3__19allocatorIS6_EEJRKS6_EEEvPT_PS6_DpOT0_:
  471|      1|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|      1|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|      1|                                                 std::forward<Args>(args)...);
  474|      1|  }
message.cc:_ZN4absl12lts_2024011613flat_hash_setIPKN6google8protobuf8internal15DescriptorTableENS3_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS9_18DescriptorByNameEqENSt3__19allocatorIS7_EEEC2Ev:
  151|      2|  flat_hash_set() {}
message.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEE5applyINS1_12raw_hash_setIS9_NS4_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSD_18DescriptorByNameEqENSt3__19allocatorIS8_EEE12EqualElementINSG_17basic_string_viewIcNSG_11char_traitsIcEEEEEEJRS8_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSR_DpOSS_:
  486|      1|  apply(F&& f, Args&&... args) {
  487|      1|    return absl::container_internal::DecomposeValue(
  488|      1|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      1|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEE7elementEPS8_:
  481|      2|  static T& element(slot_type* slot) { return *slot; }
message.cc:_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEE5applyINS1_12raw_hash_setIS9_NS4_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSD_18DescriptorByNameEqENSt3__19allocatorIS8_EEE19EmplaceDecomposableEJRKS8_EEEDTclsr4absl18container_internalE14DecomposeValueclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT0_EEEEOSN_DpOSO_:
  486|      6|  apply(F&& f, Args&&... args) {
  487|      6|    return absl::container_internal::DecomposeValue(
  488|      6|        std::forward<F>(f), std::forward<Args>(args)...);
  489|      6|  }
_ZN4absl12lts_2024011618container_internal17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEE9constructINSt3__19allocatorIS8_EEJRKS8_EEEvPT_PS8_DpOT0_:
  471|      6|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  472|      6|    absl::allocator_traits<Allocator>::construct(*alloc, slot,
  473|      6|                                                 std::forward<Args>(args)...);
  474|      6|  }

_ZN4absl12lts_2024011613InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS3_EEE4dataEv:
  344|     24|  pointer data() noexcept ABSL_ATTRIBUTE_LIFETIME_BOUND {
  345|     24|    return storage_.GetIsAllocated() ? storage_.GetAllocatedData()
  ------------------
  |  Branch (345:12): [True: 0, False: 24]
  ------------------
  346|     24|                                     : storage_.GetInlinedData();
  347|     24|  }
_ZNK4absl12lts_2024011613InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS3_EEE4sizeEv:
  310|     24|  size_type size() const noexcept { return storage_.GetSize(); }
_ZN4absl12lts_2024011613InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS3_EEEC2Ev:
  124|     24|  InlinedVector() noexcept(noexcept(allocator_type())) : storage_() {}
_ZN4absl12lts_2024011613InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS3_EEED2Ev:
  296|     24|  ~InlinedVector() {}

_ZN4absl12lts_2024011618container_internal39btree_iterator_generation_info_disabledC2Ej:
 1096|    319|  explicit btree_iterator_generation_info_disabled(uint32_t) {}
_ZN4absl12lts_2024011618container_internal39btree_iterator_generation_info_disabled17update_generationEPKv:
 1097|    123|  static void update_generation(const void *) {}
_ZN4absl12lts_2024011618container_internal39btree_iterator_generation_info_disabled10generationEv:
 1098|     48|  static uint32_t generation() { return 0; }
_ZN4absl12lts_2024011618container_internal39btree_iterator_generation_info_disabled23assert_valid_generationEPKv:
 1099|    940|  static void assert_valid_generation(const void *) {}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE5emptyEv:
 1583|      1|  bool empty() const { return size_ == 0; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE7is_leafEv:
  685|      4|  bool is_leaf() const { return GetField<2>()[3] != kInternalNodeMaxCount; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8GetFieldILm2EEEPKNS4_13tuple_elementIXT_ENS4_5tupleIJPSM_jhNS1_13map_slot_typeISB_SE_EESQ_EEEE4typeEv:
  665|     12|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|     12|    return InternalLayout().template Pointer<N>(
  668|     12|        reinterpret_cast<const char *>(this));
  669|     12|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE14InternalLayoutEv:
  640|     23|  constexpr static layout_type InternalLayout() {
  641|     23|    return Layout(kNodeSlots, kNodeSlots + 1);
  642|     23|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE6LayoutEmm:
  627|     24|                                      const size_type child_count) {
  628|     24|    return layout_type(
  629|     24|        /*parent*/ 1,
  630|     24|        /*generation*/ BtreeGenerationsEnabled() ? 1 : 0,
  ------------------
  |  Branch (630:24): [Folded, False: 24]
  ------------------
  631|     24|        /*position, start, finish, max_count*/ 4,
  632|     24|        /*slots*/ slot_count,
  633|     24|        /*children*/ child_count);
  634|     24|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE15next_generationEv:
  747|      1|  void next_generation() {
  748|      1|    if (BtreeGenerationsEnabled()) ++*get_root_generation();
  ------------------
  |  Branch (748:9): [Folded, False: 1]
  ------------------
  749|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE4slotEm:
  672|      4|  slot_type *slot(size_type i) { return &GetField<3>()[i]; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8GetFieldILm3EEEPNS4_13tuple_elementIXT_ENS4_5tupleIJPSM_jhNS1_13map_slot_typeISB_SE_EESQ_EEEE4typeEv:
  659|      4|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      4|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      4|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE5startEv:
  694|      4|  field_type start() const {
  695|       |    // TODO(ezb): when floating storage is implemented, return GetField<2>()[1];
  696|       |    assert(GetField<2>()[1] == 0);
  697|      4|    return 0;
  698|      4|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE5countEv:
  704|      1|  field_type count() const {
  705|       |    assert(finish() >= start());
  706|      1|    return finish() - start();
  707|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8LeafSizeEm:
  643|      1|  constexpr static size_type LeafSize(const size_type slot_count = kNodeSlots) {
  644|      1|    return LeafLayout(slot_count).AllocSize();
  645|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE10LeafLayoutEm:
  637|      1|      const size_type slot_count = kNodeSlots) {
  638|      1|    return Layout(slot_count, 0);
  639|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE9max_countEv:
  708|      1|  field_type max_count() const {
  709|       |    // Internal nodes have max_count==kInternalNodeMaxCount.
  710|       |    // Leaf nodes have max_count in [1, kNodeSlots].
  711|      1|    const field_type max_count = GetField<2>()[3];
  712|      1|    return max_count == field_type{kInternalNodeMaxCount}
  ------------------
  |  Branch (712:12): [True: 0, False: 1]
  ------------------
  713|      1|               ? field_type{kNodeSlots}
  714|      1|               : max_count;
  715|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE6parentEv:
  718|      1|  btree_node *parent() const { return *GetField<0>(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8GetFieldILm0EEEPKNS4_13tuple_elementIXT_ENS4_5tupleIJPSM_jhNS1_13map_slot_typeISB_SE_EESQ_EEEE4typeEv:
  665|      1|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|      1|    return InternalLayout().template Pointer<N>(
  668|      1|        reinterpret_cast<const char *>(this));
  669|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE11is_internalEv:
  688|      2|  bool is_internal() const { return !is_leaf(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8positionEv:
  691|      1|  field_type position() const { return GetField<2>()[0]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE6finishEv:
  701|      6|  field_type finish() const { return GetField<2>()[2]; }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE17mutable_allocatorEv:
 1676|      2|  allocator_type *mutable_allocator() noexcept {
 1677|      2|    return &rightmost_.template get<1>();
 1678|      2|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE9EmptyNodeEv:
 1340|      4|  static node_type *EmptyNode() {
 1341|      4|    alignas(node_type::Alignment()) static constexpr EmptyNodeType empty_node;
 1342|      4|    return const_cast<EmptyNodeType *>(&empty_node);
 1343|      4|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE17mutable_rightmostEv:
 1664|      1|  node_type *&mutable_rightmost() noexcept {
 1665|      1|    return rightmost_.template get<2>();
 1666|      1|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE12mutable_rootEv:
 1661|      1|  node_type *&mutable_root() noexcept { return root_; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE10generationEv:
  738|      1|  uint32_t generation() const {
  739|      1|    return BtreeGenerationsEnabled() ? *get_root_generation() : 0;
  ------------------
  |  Branch (739:12): [Folded, False: 1]
  ------------------
  740|      1|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE15internal_locateISB_EENS1_12SearchResultINS1_14btree_iteratorINS1_10btree_nodeISL_EERSJ_PSJ_EELb0EEERKT_:
 2898|      1|    -> SearchResult<iterator, is_key_compare_to::value> {
 2899|      1|  iterator iter(const_cast<node_type *>(root()));
 2900|      1|  for (;;) {
 2901|      1|    SearchResult<size_type, is_key_compare_to::value> res =
 2902|      1|        iter.node_->lower_bound(key, key_comp());
 2903|      1|    iter.position_ = static_cast<int>(res.value);
 2904|      1|    if (res.IsEq()) {
  ------------------
  |  Branch (2904:9): [Folded, False: 1]
  ------------------
 2905|      0|      return {iter, MatchKind::kEq};
 2906|      0|    }
 2907|       |    // Note: in the non-key-compare-to case, we don't need to walk all the way
 2908|       |    // down the tree if the keys are equal, but determining equality would
 2909|       |    // require doing an extra comparison on each node on the way down, and we
 2910|       |    // will need to go all the way to the leaf node in the expected case.
 2911|      1|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2911:9): [True: 1, False: 0]
  ------------------
 2912|      1|      break;
 2913|      1|    }
 2914|      0|    iter.node_ = iter.node_->child(static_cast<field_type>(iter.position_));
 2915|      0|  }
 2916|       |  // Note: in the non-key-compare-to case, the key may actually be equivalent
 2917|       |  // here (and the MatchKind::kNe is ignored).
 2918|      1|  return {iter, MatchKind::kNe};
 2919|      1|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE4rootEv:
 1660|      1|  const node_type *root() const { return root_; }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEERSK_PSK_EC2EPSN_:
 1142|      1|  explicit btree_iterator(Node *n) : btree_iterator(n, n->start()) {}
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEERSK_PSK_EC2EPSN_i:
 1144|      1|      : btree_iterator_generation_info(n != nullptr ? n->generation()
  ------------------
  |  Branch (1144:40): [True: 1, False: 0]
  ------------------
 1145|      1|                                                    : ~uint32_t{}),
 1146|      1|        node_(n),
 1147|      1|        position_(p) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE11lower_boundISB_EENS1_12SearchResultImLb0EEERKT_RKNS1_19key_compare_adapterISG_SB_E15checked_compareE:
  781|      1|      const K &k, const key_compare &comp) const {
  782|      1|    return use_linear_search::value ? linear_search(k, comp)
  ------------------
  |  Branch (782:12): [Folded, False: 1]
  ------------------
  783|      1|                                    : binary_search(k, comp);
  784|      1|  }
_ZN4absl12lts_2024011618container_internal12SearchResultImLb0EEC2Em:
  479|    101|  explicit SearchResult(V v) : value(v) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE13binary_searchISB_NS1_19key_compare_adapterISG_SB_E15checked_compareEEENS1_12SearchResultImXsr23btree_is_key_compare_toIT0_SB_EE5valueEEERKT_RKSS_:
  802|      1|  binary_search(const K &k, const Compare &comp) const {
  803|      1|    return binary_search_impl(k, start(), finish(), comp,
  804|      1|                              btree_is_key_compare_to<Compare, key_type>());
  805|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE18binary_search_implISB_NS1_19key_compare_adapterISG_SB_E15checked_compareEEENS1_12SearchResultImLb0EEERKT_mmRKT0_NS4_17integral_constantIbLb0EEE:
  845|      1|      std::false_type /* IsCompareTo */) const {
  846|      1|    while (s != e) {
  ------------------
  |  Branch (846:12): [True: 0, False: 1]
  ------------------
  847|      0|      const size_type mid = (s + e) >> 1;
  848|      0|      if (comp(key(mid), k)) {
  ------------------
  |  Branch (848:11): [True: 0, False: 0]
  ------------------
  849|      0|        s = mid + 1;
  850|      0|      } else {
  851|      0|        e = mid;
  852|      0|      }
  853|      0|    }
  854|      1|    return SearchResult<size_type, false>{s};
  855|      1|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8key_compEv:
 1565|      1|  const key_compare &key_comp() const noexcept {
 1566|      1|    return rightmost_.template get<0>();
 1567|      1|  }
_ZN4absl12lts_2024011618container_internal12SearchResultINS1_14btree_iteratorINS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS9_15FieldDescriptorENS6_4lessISD_EENS6_9allocatorINS7_IKSD_SG_EEEELi256ELb0EEEEERSL_PSL_EELb0EEC2ESR_NS1_9MatchKindE:
  480|      1|  SearchResult(V v, MatchKind /*match*/) : value(v) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE13internal_lastINS1_14btree_iteratorINS1_10btree_nodeISL_EERSJ_PSJ_EEEET_SU_:
 2802|      1|inline IterType btree<P>::internal_last(IterType iter) {
 2803|      1|  assert(iter.node_ != nullptr);
 2804|      1|  while (iter.position_ == iter.node_->finish()) {
  ------------------
  |  Branch (2804:10): [True: 1, False: 0]
  ------------------
 2805|      1|    iter.position_ = iter.node_->position();
 2806|      1|    iter.node_ = iter.node_->parent();
 2807|      1|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2807:9): [True: 1, False: 0]
  ------------------
 2808|      1|      iter.node_ = nullptr;
 2809|      1|      break;
 2810|      1|    }
 2811|      1|  }
 2812|      1|  iter.update_generation();
 2813|      1|  return iter;
 2814|      1|}
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEERSK_PSK_E17update_generationEv:
 1304|      2|  void update_generation() {
 1305|      2|    btree_iterator_generation_info::update_generation(node_);
 1306|      2|  }
_ZN4absl12lts_2024011618container_internal19key_compare_adapterINSt3__14lessINS3_4pairIPKN6google8protobuf10DescriptorEiEEEESB_E15checked_compareC2ESC_:
  227|      2|    checked_compare(Compare comp) : Base(std::move(comp)) {}  // NOLINT
_ZN4absl12lts_2024011618container_internal20checked_compare_baseINSt3__14lessINS3_4pairIPKN6google8protobuf10DescriptorEiEEEELb1EEC2ESC_:
  174|      2|  explicit checked_compare_base(Compare c) : Compare(std::move(c)) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEEC2ERKNS1_19key_compare_adapterISG_SB_E15checked_compareERKSK_:
 1402|      2|      : root_(EmptyNode()), rightmost_(comp, alloc, EmptyNode()), size_(0) {}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE12set_positionEh:
  676|      1|  void set_position(field_type v) { GetField<2>()[0] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8GetFieldILm2EEEPNS4_13tuple_elementIXT_ENS4_5tupleIJPSM_jhNS1_13map_slot_typeISB_SE_EESQ_EEEE4typeEv:
  659|      5|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      5|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      5|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE10set_finishEh:
  678|      2|  void set_finish(field_type v) { GetField<2>()[2] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE14set_generationEj:
  743|      1|  void set_generation(uint32_t generation) {
  744|      1|    if (BtreeGenerationsEnabled()) GetField<1>()[0] = generation;
  ------------------
  |  Branch (744:9): [Folded, False: 1]
  ------------------
  745|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE10set_parentEPSM_:
  670|      1|  void set_parent(btree_node *p) { *GetField<0>() = p; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8GetFieldILm0EEEPNS4_13tuple_elementIXT_ENS4_5tupleIJPSM_jhNS1_13map_slot_typeISB_SE_EESQ_EEEE4typeEv:
  659|      1|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      1|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      1|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE13insert_uniqueISB_JSJ_EEENS5_INS1_14btree_iteratorINS1_10btree_nodeISL_EERSJ_PSJ_EEbEERKT_DpOT0_:
 2278|      1|    -> std::pair<iterator, bool> {
 2279|      1|  if (empty()) {
  ------------------
  |  Branch (2279:7): [True: 1, False: 0]
  ------------------
 2280|      1|    mutable_root() = mutable_rightmost() = new_leaf_root_node(1);
 2281|      1|  }
 2282|       |
 2283|      1|  SearchResult<iterator, is_key_compare_to::value> res = internal_locate(key);
 2284|      1|  iterator iter = res.value;
 2285|       |
 2286|      1|  if (res.HasMatch()) {
  ------------------
  |  Branch (2286:7): [Folded, False: 1]
  ------------------
 2287|      0|    if (res.IsEq()) {
  ------------------
  |  Branch (2287:9): [Folded, False: 0]
  ------------------
 2288|       |      // The key already exists in the tree, do nothing.
 2289|      0|      return {iter, false};
 2290|      0|    }
 2291|      1|  } else {
 2292|      1|    iterator last = internal_last(iter);
 2293|      1|    if (last.node_ && !compare_keys(key, last.key())) {
  ------------------
  |  Branch (2293:9): [True: 0, False: 1]
  |  Branch (2293:23): [True: 0, False: 0]
  ------------------
 2294|       |      // The key already exists in the tree, do nothing.
 2295|      0|      return {last, false};
 2296|      0|    }
 2297|      1|  }
 2298|      1|  return {internal_emplace(iter, std::forward<Args>(args)...), true};
 2299|      1|}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE18new_leaf_root_nodeEh:
 1702|      1|  node_type *new_leaf_root_node(field_type max_count) {
 1703|      1|    node_type *n = allocate(node_type::LeafSize(max_count));
 1704|      1|    n->init_leaf(/*position=*/0, max_count, /*parent=*/n);
 1705|      1|    return n;
 1706|      1|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE8allocateEm:
 1685|      1|  node_type *allocate(size_type size) {
 1686|      1|    return reinterpret_cast<node_type *>(
 1687|      1|        absl::container_internal::Allocate<node_type::Alignment()>(
 1688|      1|            mutable_allocator(), size));
 1689|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE9init_leafEhhPSM_:
  954|      1|                 btree_node *parent) {
  955|      1|    set_generation(0);
  956|      1|    set_parent(parent);
  957|      1|    set_position(position);
  958|      1|    set_start(0);
  959|      1|    set_finish(0);
  960|      1|    set_max_count(max_count);
  961|      1|    absl::container_internal::SanitizerPoisonMemoryRegion(
  962|      1|        start_slot(), max_count * sizeof(slot_type));
  963|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE9set_startEh:
  677|      1|  void set_start(field_type v) { GetField<2>()[1] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE13set_max_countEh:
  680|      1|  void set_max_count(field_type v) { GetField<2>()[3] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE10start_slotEv:
  673|      1|  slot_type *start_slot() { return slot(start()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE16internal_emplaceIJSJ_EEENS1_14btree_iteratorINS1_10btree_nodeISL_EERSJ_PSJ_EEST_DpOT_:
 2819|      1|    -> iterator {
 2820|      1|  if (iter.node_->is_internal()) {
  ------------------
  |  Branch (2820:7): [True: 0, False: 1]
  ------------------
 2821|       |    // We can't insert on an internal node. Instead, we'll insert after the
 2822|       |    // previous value which is guaranteed to be on a leaf node.
 2823|      0|    --iter;
 2824|      0|    ++iter.position_;
 2825|      0|  }
 2826|      1|  const field_type max_count = iter.node_->max_count();
 2827|      1|  allocator_type *alloc = mutable_allocator();
 2828|       |
 2829|      1|  const auto transfer_and_delete = [&](node_type *old_node,
 2830|      1|                                       node_type *new_node) {
 2831|      1|    new_node->transfer_n(old_node->count(), new_node->start(),
 2832|      1|                         old_node->start(), old_node, alloc);
 2833|      1|    new_node->set_finish(old_node->finish());
 2834|      1|    old_node->set_finish(old_node->start());
 2835|      1|    new_node->set_generation(old_node->generation());
 2836|      1|    node_type::clear_and_delete(old_node, alloc);
 2837|      1|  };
 2838|      1|  const auto replace_leaf_root_node = [&](field_type new_node_size) {
 2839|      1|    assert(iter.node_ == root());
 2840|      1|    node_type *old_root = iter.node_;
 2841|      1|    node_type *new_root = iter.node_ = new_leaf_root_node(new_node_size);
 2842|      1|    transfer_and_delete(old_root, new_root);
 2843|      1|    mutable_root() = mutable_rightmost() = new_root;
 2844|      1|  };
 2845|       |
 2846|      1|  bool replaced_node = false;
 2847|      1|  if (iter.node_->count() == max_count) {
  ------------------
  |  Branch (2847:7): [True: 0, False: 1]
  ------------------
 2848|       |    // Make room in the leaf for the new item.
 2849|      0|    if (max_count < kNodeSlots) {
  ------------------
  |  Branch (2849:9): [True: 0, False: 0]
  ------------------
 2850|       |      // Insertion into the root where the root is smaller than the full node
 2851|       |      // size. Simply grow the size of the root node.
 2852|      0|      replace_leaf_root_node(static_cast<field_type>(
 2853|      0|          (std::min)(static_cast<int>(kNodeSlots), 2 * max_count)));
 2854|      0|      replaced_node = true;
 2855|      0|    } else {
 2856|      0|      rebalance_or_split(&iter);
 2857|      0|    }
 2858|      0|  }
 2859|      1|  (void)replaced_node;
 2860|       |#if defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
 2861|       |    defined(ABSL_HAVE_HWADDRESS_SANITIZER)
 2862|       |  if (!replaced_node) {
 2863|       |    assert(iter.node_->is_leaf());
 2864|       |    if (iter.node_->is_root()) {
 2865|       |      replace_leaf_root_node(max_count);
 2866|       |    } else {
 2867|       |      node_type *old_node = iter.node_;
 2868|       |      const bool was_rightmost = rightmost() == old_node;
 2869|       |      const bool was_leftmost = leftmost() == old_node;
 2870|       |      node_type *parent = old_node->parent();
 2871|       |      const field_type position = old_node->position();
 2872|       |      node_type *new_node = iter.node_ = new_leaf_node(position, parent);
 2873|       |      parent->set_child_noupdate_position(position, new_node);
 2874|       |      transfer_and_delete(old_node, new_node);
 2875|       |      if (was_rightmost) mutable_rightmost() = new_node;
 2876|       |      // The leftmost node is stored as the parent of the root node.
 2877|       |      if (was_leftmost) root()->set_parent(new_node);
 2878|       |    }
 2879|       |  }
 2880|       |#endif
 2881|      1|  iter.node_->emplace_value(static_cast<field_type>(iter.position_), alloc,
 2882|      1|                            std::forward<Args>(args)...);
 2883|       |  assert(
 2884|      1|      iter.node_->is_ordered_correctly(static_cast<field_type>(iter.position_),
 2885|      1|                                       original_key_compare(key_comp())) &&
 2886|      1|      "If this assert fails, then either (1) the comparator may violate "
 2887|      1|      "transitivity, i.e. comp(a,b) && comp(b,c) -> comp(a,c) (see "
 2888|      1|      "https://en.cppreference.com/w/cpp/named_req/Compare), or (2) a "
 2889|      1|      "key may have been mutated after it was inserted into the tree.");
 2890|      1|  ++size_;
 2891|      1|  iter.update_generation();
 2892|      1|  return iter;
 2893|      1|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE13emplace_valueIJSJ_EEEvhPSK_DpOT_:
 1807|      1|                                         Args &&...args) {
 1808|      1|  assert(i >= start());
 1809|      1|  assert(i <= finish());
 1810|       |  // Shift old values to create space for new value and then construct it in
 1811|       |  // place.
 1812|      1|  if (i < finish()) {
  ------------------
  |  Branch (1812:7): [True: 0, False: 1]
  ------------------
 1813|      0|    transfer_n_backward(finish() - i, /*dest_i=*/i + 1, /*src_i=*/i, this,
 1814|      0|                        alloc);
 1815|      0|  }
 1816|      1|  value_init(static_cast<field_type>(i), alloc, std::forward<Args>(args)...);
 1817|      1|  set_finish(finish() + 1);
 1818|       |
 1819|      1|  if (is_internal() && finish() > i + 1) {
  ------------------
  |  Branch (1819:7): [True: 0, False: 1]
  |  Branch (1819:24): [True: 0, False: 0]
  ------------------
 1820|      0|    for (field_type j = finish(); j > i + 1; --j) {
  ------------------
  |  Branch (1820:35): [True: 0, False: 0]
  ------------------
 1821|      0|      set_child(j, child(j - 1));
 1822|      0|    }
 1823|      0|    clear_child(i + 1);
 1824|      0|  }
 1825|      1|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE10value_initIJSJ_EEEvhPSK_DpOT_:
  984|      1|  void value_init(const field_type i, allocator_type *alloc, Args &&...args) {
  985|      1|    next_generation();
  986|      1|    absl::container_internal::SanitizerUnpoisonObject(slot(i));
  987|      1|    params_type::construct(alloc, slot(i), std::forward<Args>(args)...);
  988|      1|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEERSK_PSK_EptEv:
 1196|      1|  pointer operator->() const { return &operator*(); }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEERSK_PSK_EdeEv:
 1186|      1|  reference operator*() const {
 1187|      1|    ABSL_HARDENING_ASSERT(node_ != nullptr);
  ------------------
  |  |  128|      1|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      1|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|      1|    assert_valid_generation(node_);
 1189|      1|    ABSL_HARDENING_ASSERT(position_ >= node_->start());
  ------------------
  |  |  128|      1|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      1|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|      1|    if (position_ >= node_->finish()) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 1]
  ------------------
 1191|      0|      ABSL_HARDENING_ASSERT(!IsEndIterator() && "Dereferencing end() iterator");
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1192|      0|      ABSL_HARDENING_ASSERT(position_ < node_->finish());
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1193|      0|    }
 1194|      1|    return node_->value(static_cast<field_type>(position_));
 1195|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorENS4_4lessISB_EENS4_9allocatorINS5_IKSB_SE_EEEELi256ELb0EEEE5valueEm:
  753|      1|  reference value(size_type i) { return params_type::element(slot(i)); }
_ZN4absl12lts_2024011618container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS6_9FileEntryEE15checked_compareC2ES7_:
  227|      2|    checked_compare(Compare comp) : Base(std::move(comp)) {}  // NOLINT
_ZN4absl12lts_2024011618container_internal20checked_compare_baseIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareELb1EEC2ES7_:
  174|      2|  explicit checked_compare_base(Compare c) : Compare(std::move(c)) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEEC2ERKNS1_19key_compare_adapterIS9_S8_E15checked_compareERKSC_:
 1402|      2|      : root_(EmptyNode()), rightmost_(comp, alloc, EmptyNode()), size_(0) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9EmptyNodeEv:
 1340|      6|  static node_type *EmptyNode() {
 1341|      6|    alignas(node_type::Alignment()) static constexpr EmptyNodeType empty_node;
 1342|      6|    return const_cast<EmptyNodeType *>(&empty_node);
 1343|      6|  }
_ZN4absl12lts_2024011618container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS6_11SymbolEntryEE15checked_compareC2ES7_:
  227|      2|    checked_compare(Compare comp) : Base(std::move(comp)) {}  // NOLINT
_ZN4absl12lts_2024011618container_internal20checked_compare_baseIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareELb1EEC2ES7_:
  174|      2|  explicit checked_compare_base(Compare c) : Compare(std::move(c)) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEEC2ERKNS1_19key_compare_adapterIS9_S8_E15checked_compareERKSC_:
 1402|      2|      : root_(EmptyNode()), rightmost_(comp, alloc, EmptyNode()), size_(0) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9EmptyNodeEv:
 1340|      6|  static node_type *EmptyNode() {
 1341|      6|    alignas(node_type::Alignment()) static constexpr EmptyNodeType empty_node;
 1342|      6|    return const_cast<EmptyNodeType *>(&empty_node);
 1343|      6|  }
_ZN4absl12lts_2024011618container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS6_14ExtensionEntryEE15checked_compareC2ES7_:
  227|      2|    checked_compare(Compare comp) : Base(std::move(comp)) {}  // NOLINT
_ZN4absl12lts_2024011618container_internal20checked_compare_baseIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareELb1EEC2ES7_:
  174|      2|  explicit checked_compare_base(Compare c) : Compare(std::move(c)) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEEC2ERKNS1_19key_compare_adapterIS9_S8_E15checked_compareERKSC_:
 1402|      2|      : root_(EmptyNode()), rightmost_(comp, alloc, EmptyNode()), size_(0) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9EmptyNodeEv:
 1340|      5|  static node_type *EmptyNode() {
 1341|      5|    alignas(node_type::Alignment()) static constexpr EmptyNodeType empty_node;
 1342|      5|    return const_cast<EmptyNodeType *>(&empty_node);
 1343|      5|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13insert_uniqueIS8_JS8_EEENSA_4pairINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSK_EEbEERKT_DpOT0_:
 2278|      6|    -> std::pair<iterator, bool> {
 2279|      6|  if (empty()) {
  ------------------
  |  Branch (2279:7): [True: 3, False: 3]
  ------------------
 2280|      3|    mutable_root() = mutable_rightmost() = new_leaf_root_node(1);
 2281|      3|  }
 2282|       |
 2283|      6|  SearchResult<iterator, is_key_compare_to::value> res = internal_locate(key);
 2284|      6|  iterator iter = res.value;
 2285|       |
 2286|      6|  if (res.HasMatch()) {
  ------------------
  |  Branch (2286:7): [Folded, False: 6]
  ------------------
 2287|      0|    if (res.IsEq()) {
  ------------------
  |  Branch (2287:9): [Folded, False: 0]
  ------------------
 2288|       |      // The key already exists in the tree, do nothing.
 2289|      0|      return {iter, false};
 2290|      0|    }
 2291|      6|  } else {
 2292|      6|    iterator last = internal_last(iter);
 2293|      6|    if (last.node_ && !compare_keys(key, last.key())) {
  ------------------
  |  Branch (2293:9): [True: 3, False: 3]
  |  Branch (2293:23): [True: 0, False: 3]
  ------------------
 2294|       |      // The key already exists in the tree, do nothing.
 2295|      0|      return {last, false};
 2296|      0|    }
 2297|      6|  }
 2298|      6|  return {internal_emplace(iter, std::forward<Args>(args)...), true};
 2299|      6|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5emptyEv:
 1583|     12|  bool empty() const { return size_ == 0; }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18new_leaf_root_nodeEh:
 1702|      6|  node_type *new_leaf_root_node(field_type max_count) {
 1703|      6|    node_type *n = allocate(node_type::LeafSize(max_count));
 1704|      6|    n->init_leaf(/*position=*/0, max_count, /*parent=*/n);
 1705|      6|    return n;
 1706|      6|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8allocateEm:
 1685|      6|  node_type *allocate(size_type size) {
 1686|      6|    return reinterpret_cast<node_type *>(
 1687|      6|        absl::container_internal::Allocate<node_type::Alignment()>(
 1688|      6|            mutable_allocator(), size));
 1689|      6|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17mutable_allocatorEv:
 1676|     14|  allocator_type *mutable_allocator() noexcept {
 1677|     14|    return &rightmost_.template get<1>();
 1678|     14|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8LeafSizeEm:
  643|     11|  constexpr static size_type LeafSize(const size_type slot_count = kNodeSlots) {
  644|     11|    return LeafLayout(slot_count).AllocSize();
  645|     11|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10LeafLayoutEm:
  637|     11|      const size_type slot_count = kNodeSlots) {
  638|     11|    return Layout(slot_count, 0);
  639|     11|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6LayoutEmm:
  627|    221|                                      const size_type child_count) {
  628|    221|    return layout_type(
  629|    221|        /*parent*/ 1,
  630|    221|        /*generation*/ BtreeGenerationsEnabled() ? 1 : 0,
  ------------------
  |  Branch (630:24): [Folded, False: 221]
  ------------------
  631|    221|        /*position, start, finish, max_count*/ 4,
  632|    221|        /*slots*/ slot_count,
  633|    221|        /*children*/ child_count);
  634|    221|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9init_leafEhhPSE_:
  954|      6|                 btree_node *parent) {
  955|      6|    set_generation(0);
  956|      6|    set_parent(parent);
  957|      6|    set_position(position);
  958|      6|    set_start(0);
  959|      6|    set_finish(0);
  960|      6|    set_max_count(max_count);
  961|      6|    absl::container_internal::SanitizerPoisonMemoryRegion(
  962|      6|        start_slot(), max_count * sizeof(slot_type));
  963|      6|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14set_generationEj:
  743|      9|  void set_generation(uint32_t generation) {
  744|      9|    if (BtreeGenerationsEnabled()) GetField<1>()[0] = generation;
  ------------------
  |  Branch (744:9): [Folded, False: 9]
  ------------------
  745|      9|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10set_parentEPSE_:
  670|      6|  void set_parent(btree_node *p) { *GetField<0>() = p; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm0EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|      6|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      6|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      6|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14InternalLayoutEv:
  640|    210|  constexpr static layout_type InternalLayout() {
  641|    210|    return Layout(kNodeSlots, kNodeSlots + 1);
  642|    210|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12set_positionEh:
  676|      6|  void set_position(field_type v) { GetField<2>()[0] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm2EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|     36|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|     36|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|     36|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9set_startEh:
  677|      6|  void set_start(field_type v) { GetField<2>()[1] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10set_finishEh:
  678|     18|  void set_finish(field_type v) { GetField<2>()[2] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13set_max_countEh:
  680|      6|  void set_max_count(field_type v) { GetField<2>()[3] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10start_slotEv:
  673|      6|  slot_type *start_slot() { return slot(start()); }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4slotEm:
  672|     46|  slot_type *slot(size_type i) { return &GetField<3>()[i]; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm3EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|     46|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|     46|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|     46|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5startEv:
  694|     48|  field_type start() const {
  695|       |    // TODO(ezb): when floating storage is implemented, return GetField<2>()[1];
  696|       |    assert(GetField<2>()[1] == 0);
  697|     48|    return 0;
  698|     48|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17mutable_rightmostEv:
 1664|      8|  node_type *&mutable_rightmost() noexcept {
 1665|      8|    return rightmost_.template get<2>();
 1666|      8|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12mutable_rootEv:
 1661|      8|  node_type *&mutable_root() noexcept { return root_; }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15internal_locateIS8_EENS1_12SearchResultINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSK_EELb0EEERKT_:
 2898|      6|    -> SearchResult<iterator, is_key_compare_to::value> {
 2899|      6|  iterator iter(const_cast<node_type *>(root()));
 2900|      6|  for (;;) {
 2901|      6|    SearchResult<size_type, is_key_compare_to::value> res =
 2902|      6|        iter.node_->lower_bound(key, key_comp());
 2903|      6|    iter.position_ = static_cast<int>(res.value);
 2904|      6|    if (res.IsEq()) {
  ------------------
  |  Branch (2904:9): [Folded, False: 6]
  ------------------
 2905|      0|      return {iter, MatchKind::kEq};
 2906|      0|    }
 2907|       |    // Note: in the non-key-compare-to case, we don't need to walk all the way
 2908|       |    // down the tree if the keys are equal, but determining equality would
 2909|       |    // require doing an extra comparison on each node on the way down, and we
 2910|       |    // will need to go all the way to the leaf node in the expected case.
 2911|      6|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2911:9): [True: 6, False: 0]
  ------------------
 2912|      6|      break;
 2913|      6|    }
 2914|      0|    iter.node_ = iter.node_->child(static_cast<field_type>(iter.position_));
 2915|      0|  }
 2916|       |  // Note: in the non-key-compare-to case, the key may actually be equivalent
 2917|       |  // here (and the MatchKind::kNe is ignored).
 2918|      6|  return {iter, MatchKind::kNe};
 2919|      6|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4rootEv:
 1660|      6|  const node_type *root() const { return root_; }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2EPSF_:
 1142|      8|  explicit btree_iterator(Node *n) : btree_iterator(n, n->start()) {}
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2EPSF_i:
 1144|     10|      : btree_iterator_generation_info(n != nullptr ? n->generation()
  ------------------
  |  Branch (1144:40): [True: 10, False: 0]
  ------------------
 1145|     10|                                                    : ~uint32_t{}),
 1146|     10|        node_(n),
 1147|     10|        position_(p) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10generationEv:
  738|     13|  uint32_t generation() const {
  739|     13|    return BtreeGenerationsEnabled() ? *get_root_generation() : 0;
  ------------------
  |  Branch (739:12): [Folded, False: 13]
  ------------------
  740|     13|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11lower_boundIS8_EENS1_12SearchResultImLb0EEERKT_RKNS1_19key_compare_adapterIS9_S8_E15checked_compareE:
  781|      6|      const K &k, const key_compare &comp) const {
  782|      6|    return use_linear_search::value ? linear_search(k, comp)
  ------------------
  |  Branch (782:12): [Folded, False: 6]
  ------------------
  783|      6|                                    : binary_search(k, comp);
  784|      6|  }
_ZNK4absl12lts_2024011618container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS6_9FileEntryEE15checked_compareclIS8_S8_TnNSt3__19enable_ifIXsr3std7is_sameIbNS0_20type_traits_internal9result_ofIFKS7_RKT_RKT0_EE4typeEEE5valueEiE4typeELi0EEEbSJ_SM_:
  236|      7|    bool operator()(const T &lhs, const U &rhs) const {
  237|       |      // NOTE: if any of these assertions fail, then the comparator does not
  238|       |      // establish a strict-weak-ordering (see
  239|       |      // https://en.cppreference.com/w/cpp/named_req/Compare).
  240|      7|      assert(is_self_equivalent(lhs));
  241|      7|      assert(is_self_equivalent(rhs));
  242|      7|      const bool lhs_comp_rhs = comp()(lhs, rhs);
  243|       |      assert(!lhs_comp_rhs || !comp()(rhs, lhs));
  244|      7|      return lhs_comp_rhs;
  245|      7|    }
_ZNK4absl12lts_2024011618container_internal20checked_compare_baseIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareELb1EE4compEv:
  175|      7|  const Compare &comp() const { return *this; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE3keyEm:
  752|      7|  const key_type &key(size_type i) const { return params_type::key(slot(i)); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4slotEm:
  675|      7|  const slot_type *slot(size_type i) const { return &GetField<3>()[i]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm3EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|      7|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|      7|    return InternalLayout().template Pointer<N>(
  668|      7|        reinterpret_cast<const char *>(this));
  669|      7|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6finishEv:
  701|     60|  field_type finish() const { return GetField<2>()[2]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm2EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|    108|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|    108|    return InternalLayout().template Pointer<N>(
  668|    108|        reinterpret_cast<const char *>(this));
  669|    108|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13binary_searchIS8_NS1_19key_compare_adapterIS9_S8_E15checked_compareEEENS1_12SearchResultImXsr23btree_is_key_compare_toIT0_S8_EE5valueEEERKT_RKSK_:
  802|      6|  binary_search(const K &k, const Compare &comp) const {
  803|      6|    return binary_search_impl(k, start(), finish(), comp,
  804|      6|                              btree_is_key_compare_to<Compare, key_type>());
  805|      6|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18binary_search_implIS8_NS1_19key_compare_adapterIS9_S8_E15checked_compareEEENS1_12SearchResultImLb0EEERKT_mmRKT0_NSA_17integral_constantIbLb0EEE:
  845|      6|      std::false_type /* IsCompareTo */) const {
  846|     10|    while (s != e) {
  ------------------
  |  Branch (846:12): [True: 4, False: 6]
  ------------------
  847|      4|      const size_type mid = (s + e) >> 1;
  848|      4|      if (comp(key(mid), k)) {
  ------------------
  |  Branch (848:11): [True: 1, False: 3]
  ------------------
  849|      1|        s = mid + 1;
  850|      3|      } else {
  851|      3|        e = mid;
  852|      3|      }
  853|      4|    }
  854|      6|    return SearchResult<size_type, false>{s};
  855|      6|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8key_compEv:
 1565|     21|  const key_compare &key_comp() const noexcept {
 1566|     21|    return rightmost_.template get<0>();
 1567|     21|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE7is_leafEv:
  685|     34|  bool is_leaf() const { return GetField<2>()[3] != kInternalNodeMaxCount; }
_ZN4absl12lts_2024011618container_internal12SearchResultINS1_14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS9_11FileCompareENSt3__19allocatorISA_EELi256ELb0EEEEERKSA_PSH_EELb0EEC2ESK_NS1_9MatchKindE:
  480|      6|  SearchResult(V v, MatchKind /*match*/) : value(v) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13internal_lastINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EEEET_SN_:
 2802|      6|inline IterType btree<P>::internal_last(IterType iter) {
 2803|      6|  assert(iter.node_ != nullptr);
 2804|      6|  while (iter.position_ == iter.node_->finish()) {
  ------------------
  |  Branch (2804:10): [True: 3, False: 3]
  ------------------
 2805|      3|    iter.position_ = iter.node_->position();
 2806|      3|    iter.node_ = iter.node_->parent();
 2807|      3|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2807:9): [True: 3, False: 0]
  ------------------
 2808|      3|      iter.node_ = nullptr;
 2809|      3|      break;
 2810|      3|    }
 2811|      3|  }
 2812|      6|  iter.update_generation();
 2813|      6|  return iter;
 2814|      6|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8positionEv:
  691|      3|  field_type position() const { return GetField<2>()[0]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6parentEv:
  718|      7|  btree_node *parent() const { return *GetField<0>(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm0EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|      7|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|      7|    return InternalLayout().template Pointer<N>(
  668|      7|        reinterpret_cast<const char *>(this));
  669|      7|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E17update_generationEv:
 1304|     12|  void update_generation() {
 1305|     12|    btree_iterator_generation_info::update_generation(node_);
 1306|     12|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12compare_keysIS8_S8_EEbRKT_RKT0_:
 1569|      3|  bool compare_keys(const K1 &a, const K2 &b) const {
 1570|      3|    return compare_internal::compare_result_as_less_than(key_comp()(a, b));
 1571|      3|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E3keyEv:
 1297|      3|  const key_type &key() const {
 1298|      3|    return node_->key(static_cast<size_type>(position_));
 1299|      3|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EESM_DpOT_:
 2819|      6|    -> iterator {
 2820|      6|  if (iter.node_->is_internal()) {
  ------------------
  |  Branch (2820:7): [True: 0, False: 6]
  ------------------
 2821|       |    // We can't insert on an internal node. Instead, we'll insert after the
 2822|       |    // previous value which is guaranteed to be on a leaf node.
 2823|      0|    --iter;
 2824|      0|    ++iter.position_;
 2825|      0|  }
 2826|      6|  const field_type max_count = iter.node_->max_count();
 2827|      6|  allocator_type *alloc = mutable_allocator();
 2828|       |
 2829|      6|  const auto transfer_and_delete = [&](node_type *old_node,
 2830|      6|                                       node_type *new_node) {
 2831|      6|    new_node->transfer_n(old_node->count(), new_node->start(),
 2832|      6|                         old_node->start(), old_node, alloc);
 2833|      6|    new_node->set_finish(old_node->finish());
 2834|      6|    old_node->set_finish(old_node->start());
 2835|      6|    new_node->set_generation(old_node->generation());
 2836|      6|    node_type::clear_and_delete(old_node, alloc);
 2837|      6|  };
 2838|      6|  const auto replace_leaf_root_node = [&](field_type new_node_size) {
 2839|      6|    assert(iter.node_ == root());
 2840|      6|    node_type *old_root = iter.node_;
 2841|      6|    node_type *new_root = iter.node_ = new_leaf_root_node(new_node_size);
 2842|      6|    transfer_and_delete(old_root, new_root);
 2843|      6|    mutable_root() = mutable_rightmost() = new_root;
 2844|      6|  };
 2845|       |
 2846|      6|  bool replaced_node = false;
 2847|      6|  if (iter.node_->count() == max_count) {
  ------------------
  |  Branch (2847:7): [True: 3, False: 3]
  ------------------
 2848|       |    // Make room in the leaf for the new item.
 2849|      3|    if (max_count < kNodeSlots) {
  ------------------
  |  Branch (2849:9): [True: 3, False: 0]
  ------------------
 2850|       |      // Insertion into the root where the root is smaller than the full node
 2851|       |      // size. Simply grow the size of the root node.
 2852|      3|      replace_leaf_root_node(static_cast<field_type>(
 2853|      3|          (std::min)(static_cast<int>(kNodeSlots), 2 * max_count)));
 2854|      3|      replaced_node = true;
 2855|      3|    } else {
 2856|      0|      rebalance_or_split(&iter);
 2857|      0|    }
 2858|      3|  }
 2859|      6|  (void)replaced_node;
 2860|       |#if defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
 2861|       |    defined(ABSL_HAVE_HWADDRESS_SANITIZER)
 2862|       |  if (!replaced_node) {
 2863|       |    assert(iter.node_->is_leaf());
 2864|       |    if (iter.node_->is_root()) {
 2865|       |      replace_leaf_root_node(max_count);
 2866|       |    } else {
 2867|       |      node_type *old_node = iter.node_;
 2868|       |      const bool was_rightmost = rightmost() == old_node;
 2869|       |      const bool was_leftmost = leftmost() == old_node;
 2870|       |      node_type *parent = old_node->parent();
 2871|       |      const field_type position = old_node->position();
 2872|       |      node_type *new_node = iter.node_ = new_leaf_node(position, parent);
 2873|       |      parent->set_child_noupdate_position(position, new_node);
 2874|       |      transfer_and_delete(old_node, new_node);
 2875|       |      if (was_rightmost) mutable_rightmost() = new_node;
 2876|       |      // The leftmost node is stored as the parent of the root node.
 2877|       |      if (was_leftmost) root()->set_parent(new_node);
 2878|       |    }
 2879|       |  }
 2880|       |#endif
 2881|      6|  iter.node_->emplace_value(static_cast<field_type>(iter.position_), alloc,
 2882|      6|                            std::forward<Args>(args)...);
 2883|       |  assert(
 2884|      6|      iter.node_->is_ordered_correctly(static_cast<field_type>(iter.position_),
 2885|      6|                                       original_key_compare(key_comp())) &&
 2886|      6|      "If this assert fails, then either (1) the comparator may violate "
 2887|      6|      "transitivity, i.e. comp(a,b) && comp(b,c) -> comp(a,c) (see "
 2888|      6|      "https://en.cppreference.com/w/cpp/named_req/Compare), or (2) a "
 2889|      6|      "key may have been mutated after it was inserted into the tree.");
 2890|      6|  ++size_;
 2891|      6|  iter.update_generation();
 2892|      6|  return iter;
 2893|      6|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11is_internalEv:
  688|     12|  bool is_internal() const { return !is_leaf(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE7is_rootEv:
  722|      2|  bool is_root() const { return parent()->is_leaf(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9max_countEv:
  708|     11|  field_type max_count() const {
  709|       |    // Internal nodes have max_count==kInternalNodeMaxCount.
  710|       |    // Leaf nodes have max_count in [1, kNodeSlots].
  711|     11|    const field_type max_count = GetField<2>()[3];
  712|     11|    return max_count == field_type{kInternalNodeMaxCount}
  ------------------
  |  Branch (712:12): [True: 0, False: 11]
  ------------------
  713|     11|               ? field_type{kNodeSlots}
  714|     11|               : max_count;
  715|     11|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5countEv:
  704|     14|  field_type count() const {
  705|       |    assert(finish() >= start());
  706|     14|    return finish() - start();
  707|     14|  }
_ZZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EESM_DpOT_ENKUlhE_clEh:
 2838|      3|  const auto replace_leaf_root_node = [&](field_type new_node_size) {
 2839|       |    assert(iter.node_ == root());
 2840|      3|    node_type *old_root = iter.node_;
 2841|      3|    node_type *new_root = iter.node_ = new_leaf_root_node(new_node_size);
 2842|      3|    transfer_and_delete(old_root, new_root);
 2843|      3|    mutable_root() = mutable_rightmost() = new_root;
 2844|      3|  };
_ZZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EESM_DpOT_ENKUlPSI_SQ_E_clESQ_SQ_:
 2830|      3|                                       node_type *new_node) {
 2831|      3|    new_node->transfer_n(old_node->count(), new_node->start(),
 2832|      3|                         old_node->start(), old_node, alloc);
 2833|      3|    new_node->set_finish(old_node->finish());
 2834|      3|    old_node->set_finish(old_node->start());
 2835|      3|    new_node->set_generation(old_node->generation());
 2836|      3|    node_type::clear_and_delete(old_node, alloc);
 2837|      3|  };
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10transfer_nEmmmPSE_PSC_:
 1020|      3|                  allocator_type *alloc) {
 1021|      3|    next_generation();
 1022|      3|    for (slot_type *src = src_node->slot(src_i), *end = src + n,
 1023|      3|                   *dest = slot(dest_i);
 1024|      7|         src != end; ++src, ++dest) {
  ------------------
  |  Branch (1024:10): [True: 4, False: 3]
  ------------------
 1025|      4|      transfer(dest, src, alloc);
 1026|      4|    }
 1027|      3|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15next_generationEv:
  747|     17|  void next_generation() {
  748|     17|    if (BtreeGenerationsEnabled()) ++*get_root_generation();
  ------------------
  |  Branch (748:9): [Folded, False: 17]
  ------------------
  749|     17|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8transferEPS8_SF_PSC_:
 1003|      7|  static void transfer(slot_type *dest, slot_type *src, allocator_type *alloc) {
 1004|      7|    absl::container_internal::SanitizerUnpoisonObject(dest);
 1005|      7|    params_type::transfer(alloc, dest, src);
 1006|      7|    absl::container_internal::SanitizerPoisonObject(src);
 1007|      7|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16clear_and_deleteEPSE_PSC_:
 2008|      5|void btree_node<P>::clear_and_delete(btree_node *node, allocator_type *alloc) {
 2009|      5|  if (node->is_leaf()) {
  ------------------
  |  Branch (2009:7): [True: 5, False: 0]
  ------------------
 2010|      5|    node->value_destroy_n(node->start(), node->count(), alloc);
 2011|      5|    deallocate(LeafSize(node->max_count()), node, alloc);
 2012|      5|    return;
 2013|      5|  }
 2014|      0|  if (node->count() == 0) {
  ------------------
  |  Branch (2014:7): [True: 0, False: 0]
  ------------------
 2015|      0|    deallocate(InternalSize(), node, alloc);
 2016|      0|    return;
 2017|      0|  }
 2018|       |
 2019|       |  // The parent of the root of the subtree we are deleting.
 2020|      0|  btree_node *delete_root_parent = node->parent();
 2021|       |
 2022|       |  // Navigate to the leftmost leaf under node, and then delete upwards.
 2023|      0|  while (node->is_internal()) node = node->start_child();
  ------------------
  |  Branch (2023:10): [True: 0, False: 0]
  ------------------
 2024|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2025|       |  // When generations are enabled, we delete the leftmost leaf last in case it's
 2026|       |  // the parent of the root and we need to check whether it's a leaf before we
 2027|       |  // can update the root's generation.
 2028|       |  // TODO(ezb): if we change btree_node::is_root to check a bool inside the node
 2029|       |  // instead of checking whether the parent is a leaf, we can remove this logic.
 2030|       |  btree_node *leftmost_leaf = node;
 2031|       |#endif
 2032|       |  // Use `size_type` because `pos` needs to be able to hold `kNodeSlots+1`,
 2033|       |  // which isn't guaranteed to be a valid `field_type`.
 2034|      0|  size_type pos = node->position();
 2035|      0|  btree_node *parent = node->parent();
 2036|      0|  for (;;) {
 2037|       |    // In each iteration of the next loop, we delete one leaf node and go right.
 2038|      0|    assert(pos <= parent->finish());
 2039|      0|    do {
 2040|      0|      node = parent->child(static_cast<field_type>(pos));
 2041|      0|      if (node->is_internal()) {
  ------------------
  |  Branch (2041:11): [True: 0, False: 0]
  ------------------
 2042|       |        // Navigate to the leftmost leaf under node.
 2043|      0|        while (node->is_internal()) node = node->start_child();
  ------------------
  |  Branch (2043:16): [True: 0, False: 0]
  ------------------
 2044|      0|        pos = node->position();
 2045|      0|        parent = node->parent();
 2046|      0|      }
 2047|      0|      node->value_destroy_n(node->start(), node->count(), alloc);
 2048|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2049|       |      if (leftmost_leaf != node)
 2050|       |#endif
 2051|      0|        deallocate(LeafSize(node->max_count()), node, alloc);
 2052|      0|      ++pos;
 2053|      0|    } while (pos <= parent->finish());
  ------------------
  |  Branch (2053:14): [True: 0, False: 0]
  ------------------
 2054|       |
 2055|       |    // Once we've deleted all children of parent, delete parent and go up/right.
 2056|      0|    assert(pos > parent->finish());
 2057|      0|    do {
 2058|      0|      node = parent;
 2059|      0|      pos = node->position();
 2060|      0|      parent = node->parent();
 2061|      0|      node->value_destroy_n(node->start(), node->count(), alloc);
 2062|      0|      deallocate(InternalSize(), node, alloc);
 2063|      0|      if (parent == delete_root_parent) {
  ------------------
  |  Branch (2063:11): [True: 0, False: 0]
  ------------------
 2064|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2065|       |        deallocate(LeafSize(leftmost_leaf->max_count()), leftmost_leaf, alloc);
 2066|       |#endif
 2067|      0|        return;
 2068|      0|      }
 2069|      0|      ++pos;
 2070|      0|    } while (pos > parent->finish());
  ------------------
  |  Branch (2070:14): [True: 0, False: 0]
  ------------------
 2071|      0|  }
 2072|      0|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15value_destroy_nEhhPSC_:
  995|      5|                       allocator_type *alloc) {
  996|      5|    next_generation();
  997|      9|    for (slot_type *s = slot(i), *end = slot(i + n); s != end; ++s) {
  ------------------
  |  Branch (997:54): [True: 4, False: 5]
  ------------------
  998|      4|      params_type::destroy(alloc, s);
  999|      4|      absl::container_internal::SanitizerPoisonObject(s);
 1000|      4|    }
 1001|      5|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10deallocateEmPSE_PSC_:
  974|      5|                         allocator_type *alloc) {
  975|      5|    absl::container_internal::SanitizerUnpoisonMemoryRegion(node, size);
  976|      5|    absl::container_internal::Deallocate<Alignment()>(alloc, node, size);
  977|      5|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4rootEv:
 1659|      4|  node_type *root() { return root_; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE19transfer_n_backwardEmmmPSE_PSC_:
 1033|      3|                           allocator_type *alloc) {
 1034|      3|    next_generation();
 1035|      3|    for (slot_type *src = src_node->slot(src_i + n), *end = src - n,
 1036|      3|                   *dest = slot(dest_i + n);
 1037|      6|         src != end; --src, --dest) {
  ------------------
  |  Branch (1037:10): [True: 3, False: 3]
  ------------------
 1038|       |      // If we modified the loop index calculations above to avoid the -1s here,
 1039|       |      // it would result in UB in the computation of `end` (and possibly `src`
 1040|       |      // as well, if n == 0), since slot() is effectively an array index and it
 1041|       |      // is UB to compute the address of any out-of-bounds array element except
 1042|       |      // for one-past-the-end.
 1043|      3|      transfer(dest - 1, src - 1, alloc);
 1044|      3|    }
 1045|      3|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9rightmostEv:
 1662|      4|  node_type *rightmost() { return rightmost_.template get<2>(); }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13emplace_valueIJS8_EEEvhPSC_DpOT_:
 1807|      6|                                         Args &&...args) {
 1808|      6|  assert(i >= start());
 1809|      6|  assert(i <= finish());
 1810|       |  // Shift old values to create space for new value and then construct it in
 1811|       |  // place.
 1812|      6|  if (i < finish()) {
  ------------------
  |  Branch (1812:7): [True: 3, False: 3]
  ------------------
 1813|      3|    transfer_n_backward(finish() - i, /*dest_i=*/i + 1, /*src_i=*/i, this,
 1814|      3|                        alloc);
 1815|      3|  }
 1816|      6|  value_init(static_cast<field_type>(i), alloc, std::forward<Args>(args)...);
 1817|      6|  set_finish(finish() + 1);
 1818|       |
 1819|      6|  if (is_internal() && finish() > i + 1) {
  ------------------
  |  Branch (1819:7): [True: 0, False: 6]
  |  Branch (1819:24): [True: 0, False: 0]
  ------------------
 1820|      0|    for (field_type j = finish(); j > i + 1; --j) {
  ------------------
  |  Branch (1820:35): [True: 0, False: 0]
  ------------------
 1821|      0|      set_child(j, child(j - 1));
 1822|      0|    }
 1823|      0|    clear_child(i + 1);
 1824|      0|  }
 1825|      6|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10value_initIJS8_EEEvhPSC_DpOT_:
  984|      6|  void value_init(const field_type i, allocator_type *alloc, Args &&...args) {
  985|      6|    next_generation();
  986|      6|    absl::container_internal::SanitizerUnpoisonObject(slot(i));
  987|      6|    params_type::construct(alloc, slot(i), std::forward<Args>(args)...);
  988|      6|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13insert_uniqueIS8_JS8_EEENSA_4pairINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSK_EEbEERKT_DpOT0_:
 2278|      1|    -> std::pair<iterator, bool> {
 2279|      1|  if (empty()) {
  ------------------
  |  Branch (2279:7): [True: 1, False: 0]
  ------------------
 2280|      1|    mutable_root() = mutable_rightmost() = new_leaf_root_node(1);
 2281|      1|  }
 2282|       |
 2283|      1|  SearchResult<iterator, is_key_compare_to::value> res = internal_locate(key);
 2284|      1|  iterator iter = res.value;
 2285|       |
 2286|      1|  if (res.HasMatch()) {
  ------------------
  |  Branch (2286:7): [Folded, False: 1]
  ------------------
 2287|      0|    if (res.IsEq()) {
  ------------------
  |  Branch (2287:9): [Folded, False: 0]
  ------------------
 2288|       |      // The key already exists in the tree, do nothing.
 2289|      0|      return {iter, false};
 2290|      0|    }
 2291|      1|  } else {
 2292|      1|    iterator last = internal_last(iter);
 2293|      1|    if (last.node_ && !compare_keys(key, last.key())) {
  ------------------
  |  Branch (2293:9): [True: 0, False: 1]
  |  Branch (2293:23): [True: 0, False: 0]
  ------------------
 2294|       |      // The key already exists in the tree, do nothing.
 2295|      0|      return {last, false};
 2296|      0|    }
 2297|      1|  }
 2298|      1|  return {internal_emplace(iter, std::forward<Args>(args)...), true};
 2299|      1|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5emptyEv:
 1583|      6|  bool empty() const { return size_ == 0; }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18new_leaf_root_nodeEh:
 1702|      1|  node_type *new_leaf_root_node(field_type max_count) {
 1703|      1|    node_type *n = allocate(node_type::LeafSize(max_count));
 1704|      1|    n->init_leaf(/*position=*/0, max_count, /*parent=*/n);
 1705|      1|    return n;
 1706|      1|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8allocateEm:
 1685|      1|  node_type *allocate(size_type size) {
 1686|      1|    return reinterpret_cast<node_type *>(
 1687|      1|        absl::container_internal::Allocate<node_type::Alignment()>(
 1688|      1|            mutable_allocator(), size));
 1689|      1|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17mutable_allocatorEv:
 1676|      3|  allocator_type *mutable_allocator() noexcept {
 1677|      3|    return &rightmost_.template get<1>();
 1678|      3|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8LeafSizeEm:
  643|      2|  constexpr static size_type LeafSize(const size_type slot_count = kNodeSlots) {
  644|      2|    return LeafLayout(slot_count).AllocSize();
  645|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10LeafLayoutEm:
  637|      2|      const size_type slot_count = kNodeSlots) {
  638|      2|    return Layout(slot_count, 0);
  639|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6LayoutEmm:
  627|     39|                                      const size_type child_count) {
  628|     39|    return layout_type(
  629|     39|        /*parent*/ 1,
  630|     39|        /*generation*/ BtreeGenerationsEnabled() ? 1 : 0,
  ------------------
  |  Branch (630:24): [Folded, False: 39]
  ------------------
  631|     39|        /*position, start, finish, max_count*/ 4,
  632|     39|        /*slots*/ slot_count,
  633|     39|        /*children*/ child_count);
  634|     39|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9init_leafEhhPSE_:
  954|      1|                 btree_node *parent) {
  955|      1|    set_generation(0);
  956|      1|    set_parent(parent);
  957|      1|    set_position(position);
  958|      1|    set_start(0);
  959|      1|    set_finish(0);
  960|      1|    set_max_count(max_count);
  961|      1|    absl::container_internal::SanitizerPoisonMemoryRegion(
  962|      1|        start_slot(), max_count * sizeof(slot_type));
  963|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14set_generationEj:
  743|      1|  void set_generation(uint32_t generation) {
  744|      1|    if (BtreeGenerationsEnabled()) GetField<1>()[0] = generation;
  ------------------
  |  Branch (744:9): [Folded, False: 1]
  ------------------
  745|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10set_parentEPSE_:
  670|      1|  void set_parent(btree_node *p) { *GetField<0>() = p; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm0EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|      1|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      1|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14InternalLayoutEv:
  640|     37|  constexpr static layout_type InternalLayout() {
  641|     37|    return Layout(kNodeSlots, kNodeSlots + 1);
  642|     37|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12set_positionEh:
  676|      1|  void set_position(field_type v) { GetField<2>()[0] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm2EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|      5|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      5|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      5|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9set_startEh:
  677|      1|  void set_start(field_type v) { GetField<2>()[1] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10set_finishEh:
  678|      2|  void set_finish(field_type v) { GetField<2>()[2] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13set_max_countEh:
  680|      1|  void set_max_count(field_type v) { GetField<2>()[3] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10start_slotEv:
  673|      1|  slot_type *start_slot() { return slot(start()); }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4slotEm:
  672|      6|  slot_type *slot(size_type i) { return &GetField<3>()[i]; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm3EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|      6|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|      6|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|      6|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5startEv:
  694|      7|  field_type start() const {
  695|       |    // TODO(ezb): when floating storage is implemented, return GetField<2>()[1];
  696|       |    assert(GetField<2>()[1] == 0);
  697|      7|    return 0;
  698|      7|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17mutable_rightmostEv:
 1664|      2|  node_type *&mutable_rightmost() noexcept {
 1665|      2|    return rightmost_.template get<2>();
 1666|      2|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12mutable_rootEv:
 1661|      2|  node_type *&mutable_root() noexcept { return root_; }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15internal_locateIS8_EENS1_12SearchResultINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSK_EELb0EEERKT_:
 2898|      1|    -> SearchResult<iterator, is_key_compare_to::value> {
 2899|      1|  iterator iter(const_cast<node_type *>(root()));
 2900|      1|  for (;;) {
 2901|      1|    SearchResult<size_type, is_key_compare_to::value> res =
 2902|      1|        iter.node_->lower_bound(key, key_comp());
 2903|      1|    iter.position_ = static_cast<int>(res.value);
 2904|      1|    if (res.IsEq()) {
  ------------------
  |  Branch (2904:9): [Folded, False: 1]
  ------------------
 2905|      0|      return {iter, MatchKind::kEq};
 2906|      0|    }
 2907|       |    // Note: in the non-key-compare-to case, we don't need to walk all the way
 2908|       |    // down the tree if the keys are equal, but determining equality would
 2909|       |    // require doing an extra comparison on each node on the way down, and we
 2910|       |    // will need to go all the way to the leaf node in the expected case.
 2911|      1|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2911:9): [True: 1, False: 0]
  ------------------
 2912|      1|      break;
 2913|      1|    }
 2914|      0|    iter.node_ = iter.node_->child(static_cast<field_type>(iter.position_));
 2915|      0|  }
 2916|       |  // Note: in the non-key-compare-to case, the key may actually be equivalent
 2917|       |  // here (and the MatchKind::kNe is ignored).
 2918|      1|  return {iter, MatchKind::kNe};
 2919|      1|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4rootEv:
 1660|      1|  const node_type *root() const { return root_; }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2EPSF_:
 1142|      2|  explicit btree_iterator(Node *n) : btree_iterator(n, n->start()) {}
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2EPSF_i:
 1144|      3|      : btree_iterator_generation_info(n != nullptr ? n->generation()
  ------------------
  |  Branch (1144:40): [True: 3, False: 0]
  ------------------
 1145|      3|                                                    : ~uint32_t{}),
 1146|      3|        node_(n),
 1147|      3|        position_(p) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10generationEv:
  738|      3|  uint32_t generation() const {
  739|      3|    return BtreeGenerationsEnabled() ? *get_root_generation() : 0;
  ------------------
  |  Branch (739:12): [Folded, False: 3]
  ------------------
  740|      3|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11lower_boundIS8_EENS1_12SearchResultImLb0EEERKT_RKNS1_19key_compare_adapterIS9_S8_E15checked_compareE:
  781|      1|      const K &k, const key_compare &comp) const {
  782|      1|    return use_linear_search::value ? linear_search(k, comp)
  ------------------
  |  Branch (782:12): [Folded, False: 1]
  ------------------
  783|      1|                                    : binary_search(k, comp);
  784|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6finishEv:
  701|     11|  field_type finish() const { return GetField<2>()[2]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm2EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|     22|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|     22|    return InternalLayout().template Pointer<N>(
  668|     22|        reinterpret_cast<const char *>(this));
  669|     22|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13binary_searchIS8_NS1_19key_compare_adapterIS9_S8_E15checked_compareEEENS1_12SearchResultImXsr23btree_is_key_compare_toIT0_S8_EE5valueEEERKT_RKSK_:
  802|      1|  binary_search(const K &k, const Compare &comp) const {
  803|      1|    return binary_search_impl(k, start(), finish(), comp,
  804|      1|                              btree_is_key_compare_to<Compare, key_type>());
  805|      1|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18binary_search_implIS8_NS1_19key_compare_adapterIS9_S8_E15checked_compareEEENS1_12SearchResultImLb0EEERKT_mmRKT0_NSA_17integral_constantIbLb0EEE:
  845|      1|      std::false_type /* IsCompareTo */) const {
  846|      1|    while (s != e) {
  ------------------
  |  Branch (846:12): [True: 0, False: 1]
  ------------------
  847|      0|      const size_type mid = (s + e) >> 1;
  848|      0|      if (comp(key(mid), k)) {
  ------------------
  |  Branch (848:11): [True: 0, False: 0]
  ------------------
  849|      0|        s = mid + 1;
  850|      0|      } else {
  851|      0|        e = mid;
  852|      0|      }
  853|      0|    }
  854|      1|    return SearchResult<size_type, false>{s};
  855|      1|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8key_compEv:
 1565|      3|  const key_compare &key_comp() const noexcept {
 1566|      3|    return rightmost_.template get<0>();
 1567|      3|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE7is_leafEv:
  685|      8|  bool is_leaf() const { return GetField<2>()[3] != kInternalNodeMaxCount; }
_ZN4absl12lts_2024011618container_internal12SearchResultINS1_14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS9_16ExtensionCompareENSt3__19allocatorISA_EELi256ELb0EEEEERKSA_PSH_EELb0EEC2ESK_NS1_9MatchKindE:
  480|      1|  SearchResult(V v, MatchKind /*match*/) : value(v) {}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13internal_lastINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EEEET_SN_:
 2802|      1|inline IterType btree<P>::internal_last(IterType iter) {
 2803|      1|  assert(iter.node_ != nullptr);
 2804|      1|  while (iter.position_ == iter.node_->finish()) {
  ------------------
  |  Branch (2804:10): [True: 1, False: 0]
  ------------------
 2805|      1|    iter.position_ = iter.node_->position();
 2806|      1|    iter.node_ = iter.node_->parent();
 2807|      1|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2807:9): [True: 1, False: 0]
  ------------------
 2808|      1|      iter.node_ = nullptr;
 2809|      1|      break;
 2810|      1|    }
 2811|      1|  }
 2812|      1|  iter.update_generation();
 2813|      1|  return iter;
 2814|      1|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8positionEv:
  691|      1|  field_type position() const { return GetField<2>()[0]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6parentEv:
  718|      3|  btree_node *parent() const { return *GetField<0>(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm0EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|      3|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|      3|    return InternalLayout().template Pointer<N>(
  668|      3|        reinterpret_cast<const char *>(this));
  669|      3|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E17update_generationEv:
 1304|      2|  void update_generation() {
 1305|      2|    btree_iterator_generation_info::update_generation(node_);
 1306|      2|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EESM_DpOT_:
 2819|      1|    -> iterator {
 2820|      1|  if (iter.node_->is_internal()) {
  ------------------
  |  Branch (2820:7): [True: 0, False: 1]
  ------------------
 2821|       |    // We can't insert on an internal node. Instead, we'll insert after the
 2822|       |    // previous value which is guaranteed to be on a leaf node.
 2823|      0|    --iter;
 2824|      0|    ++iter.position_;
 2825|      0|  }
 2826|      1|  const field_type max_count = iter.node_->max_count();
 2827|      1|  allocator_type *alloc = mutable_allocator();
 2828|       |
 2829|      1|  const auto transfer_and_delete = [&](node_type *old_node,
 2830|      1|                                       node_type *new_node) {
 2831|      1|    new_node->transfer_n(old_node->count(), new_node->start(),
 2832|      1|                         old_node->start(), old_node, alloc);
 2833|      1|    new_node->set_finish(old_node->finish());
 2834|      1|    old_node->set_finish(old_node->start());
 2835|      1|    new_node->set_generation(old_node->generation());
 2836|      1|    node_type::clear_and_delete(old_node, alloc);
 2837|      1|  };
 2838|      1|  const auto replace_leaf_root_node = [&](field_type new_node_size) {
 2839|      1|    assert(iter.node_ == root());
 2840|      1|    node_type *old_root = iter.node_;
 2841|      1|    node_type *new_root = iter.node_ = new_leaf_root_node(new_node_size);
 2842|      1|    transfer_and_delete(old_root, new_root);
 2843|      1|    mutable_root() = mutable_rightmost() = new_root;
 2844|      1|  };
 2845|       |
 2846|      1|  bool replaced_node = false;
 2847|      1|  if (iter.node_->count() == max_count) {
  ------------------
  |  Branch (2847:7): [True: 0, False: 1]
  ------------------
 2848|       |    // Make room in the leaf for the new item.
 2849|      0|    if (max_count < kNodeSlots) {
  ------------------
  |  Branch (2849:9): [True: 0, False: 0]
  ------------------
 2850|       |      // Insertion into the root where the root is smaller than the full node
 2851|       |      // size. Simply grow the size of the root node.
 2852|      0|      replace_leaf_root_node(static_cast<field_type>(
 2853|      0|          (std::min)(static_cast<int>(kNodeSlots), 2 * max_count)));
 2854|      0|      replaced_node = true;
 2855|      0|    } else {
 2856|      0|      rebalance_or_split(&iter);
 2857|      0|    }
 2858|      0|  }
 2859|      1|  (void)replaced_node;
 2860|       |#if defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
 2861|       |    defined(ABSL_HAVE_HWADDRESS_SANITIZER)
 2862|       |  if (!replaced_node) {
 2863|       |    assert(iter.node_->is_leaf());
 2864|       |    if (iter.node_->is_root()) {
 2865|       |      replace_leaf_root_node(max_count);
 2866|       |    } else {
 2867|       |      node_type *old_node = iter.node_;
 2868|       |      const bool was_rightmost = rightmost() == old_node;
 2869|       |      const bool was_leftmost = leftmost() == old_node;
 2870|       |      node_type *parent = old_node->parent();
 2871|       |      const field_type position = old_node->position();
 2872|       |      node_type *new_node = iter.node_ = new_leaf_node(position, parent);
 2873|       |      parent->set_child_noupdate_position(position, new_node);
 2874|       |      transfer_and_delete(old_node, new_node);
 2875|       |      if (was_rightmost) mutable_rightmost() = new_node;
 2876|       |      // The leftmost node is stored as the parent of the root node.
 2877|       |      if (was_leftmost) root()->set_parent(new_node);
 2878|       |    }
 2879|       |  }
 2880|       |#endif
 2881|      1|  iter.node_->emplace_value(static_cast<field_type>(iter.position_), alloc,
 2882|      1|                            std::forward<Args>(args)...);
 2883|       |  assert(
 2884|      1|      iter.node_->is_ordered_correctly(static_cast<field_type>(iter.position_),
 2885|      1|                                       original_key_compare(key_comp())) &&
 2886|      1|      "If this assert fails, then either (1) the comparator may violate "
 2887|      1|      "transitivity, i.e. comp(a,b) && comp(b,c) -> comp(a,c) (see "
 2888|      1|      "https://en.cppreference.com/w/cpp/named_req/Compare), or (2) a "
 2889|      1|      "key may have been mutated after it was inserted into the tree.");
 2890|      1|  ++size_;
 2891|      1|  iter.update_generation();
 2892|      1|  return iter;
 2893|      1|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11is_internalEv:
  688|      2|  bool is_internal() const { return !is_leaf(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE7is_rootEv:
  722|      1|  bool is_root() const { return parent()->is_leaf(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9max_countEv:
  708|      2|  field_type max_count() const {
  709|       |    // Internal nodes have max_count==kInternalNodeMaxCount.
  710|       |    // Leaf nodes have max_count in [1, kNodeSlots].
  711|      2|    const field_type max_count = GetField<2>()[3];
  712|      2|    return max_count == field_type{kInternalNodeMaxCount}
  ------------------
  |  Branch (712:12): [True: 0, False: 2]
  ------------------
  713|      2|               ? field_type{kNodeSlots}
  714|      2|               : max_count;
  715|      2|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5countEv:
  704|      2|  field_type count() const {
  705|       |    assert(finish() >= start());
  706|      2|    return finish() - start();
  707|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15next_generationEv:
  747|      2|  void next_generation() {
  748|      2|    if (BtreeGenerationsEnabled()) ++*get_root_generation();
  ------------------
  |  Branch (748:9): [Folded, False: 2]
  ------------------
  749|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16clear_and_deleteEPSE_PSC_:
 2008|      1|void btree_node<P>::clear_and_delete(btree_node *node, allocator_type *alloc) {
 2009|      1|  if (node->is_leaf()) {
  ------------------
  |  Branch (2009:7): [True: 1, False: 0]
  ------------------
 2010|      1|    node->value_destroy_n(node->start(), node->count(), alloc);
 2011|      1|    deallocate(LeafSize(node->max_count()), node, alloc);
 2012|      1|    return;
 2013|      1|  }
 2014|      0|  if (node->count() == 0) {
  ------------------
  |  Branch (2014:7): [True: 0, False: 0]
  ------------------
 2015|      0|    deallocate(InternalSize(), node, alloc);
 2016|      0|    return;
 2017|      0|  }
 2018|       |
 2019|       |  // The parent of the root of the subtree we are deleting.
 2020|      0|  btree_node *delete_root_parent = node->parent();
 2021|       |
 2022|       |  // Navigate to the leftmost leaf under node, and then delete upwards.
 2023|      0|  while (node->is_internal()) node = node->start_child();
  ------------------
  |  Branch (2023:10): [True: 0, False: 0]
  ------------------
 2024|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2025|       |  // When generations are enabled, we delete the leftmost leaf last in case it's
 2026|       |  // the parent of the root and we need to check whether it's a leaf before we
 2027|       |  // can update the root's generation.
 2028|       |  // TODO(ezb): if we change btree_node::is_root to check a bool inside the node
 2029|       |  // instead of checking whether the parent is a leaf, we can remove this logic.
 2030|       |  btree_node *leftmost_leaf = node;
 2031|       |#endif
 2032|       |  // Use `size_type` because `pos` needs to be able to hold `kNodeSlots+1`,
 2033|       |  // which isn't guaranteed to be a valid `field_type`.
 2034|      0|  size_type pos = node->position();
 2035|      0|  btree_node *parent = node->parent();
 2036|      0|  for (;;) {
 2037|       |    // In each iteration of the next loop, we delete one leaf node and go right.
 2038|      0|    assert(pos <= parent->finish());
 2039|      0|    do {
 2040|      0|      node = parent->child(static_cast<field_type>(pos));
 2041|      0|      if (node->is_internal()) {
  ------------------
  |  Branch (2041:11): [True: 0, False: 0]
  ------------------
 2042|       |        // Navigate to the leftmost leaf under node.
 2043|      0|        while (node->is_internal()) node = node->start_child();
  ------------------
  |  Branch (2043:16): [True: 0, False: 0]
  ------------------
 2044|      0|        pos = node->position();
 2045|      0|        parent = node->parent();
 2046|      0|      }
 2047|      0|      node->value_destroy_n(node->start(), node->count(), alloc);
 2048|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2049|       |      if (leftmost_leaf != node)
 2050|       |#endif
 2051|      0|        deallocate(LeafSize(node->max_count()), node, alloc);
 2052|      0|      ++pos;
 2053|      0|    } while (pos <= parent->finish());
  ------------------
  |  Branch (2053:14): [True: 0, False: 0]
  ------------------
 2054|       |
 2055|       |    // Once we've deleted all children of parent, delete parent and go up/right.
 2056|      0|    assert(pos > parent->finish());
 2057|      0|    do {
 2058|      0|      node = parent;
 2059|      0|      pos = node->position();
 2060|      0|      parent = node->parent();
 2061|      0|      node->value_destroy_n(node->start(), node->count(), alloc);
 2062|      0|      deallocate(InternalSize(), node, alloc);
 2063|      0|      if (parent == delete_root_parent) {
  ------------------
  |  Branch (2063:11): [True: 0, False: 0]
  ------------------
 2064|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2065|       |        deallocate(LeafSize(leftmost_leaf->max_count()), leftmost_leaf, alloc);
 2066|       |#endif
 2067|      0|        return;
 2068|      0|      }
 2069|      0|      ++pos;
 2070|      0|    } while (pos > parent->finish());
  ------------------
  |  Branch (2070:14): [True: 0, False: 0]
  ------------------
 2071|      0|  }
 2072|      0|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15value_destroy_nEhhPSC_:
  995|      1|                       allocator_type *alloc) {
  996|      1|    next_generation();
  997|      2|    for (slot_type *s = slot(i), *end = slot(i + n); s != end; ++s) {
  ------------------
  |  Branch (997:54): [True: 1, False: 1]
  ------------------
  998|      1|      params_type::destroy(alloc, s);
  999|      1|      absl::container_internal::SanitizerPoisonObject(s);
 1000|      1|    }
 1001|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10deallocateEmPSE_PSC_:
  974|      1|                         allocator_type *alloc) {
  975|      1|    absl::container_internal::SanitizerUnpoisonMemoryRegion(node, size);
  976|      1|    absl::container_internal::Deallocate<Alignment()>(alloc, node, size);
  977|      1|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4rootEv:
 1659|      2|  node_type *root() { return root_; }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9rightmostEv:
 1662|      2|  node_type *rightmost() { return rightmost_.template get<2>(); }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13emplace_valueIJS8_EEEvhPSC_DpOT_:
 1807|      1|                                         Args &&...args) {
 1808|      1|  assert(i >= start());
 1809|      1|  assert(i <= finish());
 1810|       |  // Shift old values to create space for new value and then construct it in
 1811|       |  // place.
 1812|      1|  if (i < finish()) {
  ------------------
  |  Branch (1812:7): [True: 0, False: 1]
  ------------------
 1813|      0|    transfer_n_backward(finish() - i, /*dest_i=*/i + 1, /*src_i=*/i, this,
 1814|      0|                        alloc);
 1815|      0|  }
 1816|      1|  value_init(static_cast<field_type>(i), alloc, std::forward<Args>(args)...);
 1817|      1|  set_finish(finish() + 1);
 1818|       |
 1819|      1|  if (is_internal() && finish() > i + 1) {
  ------------------
  |  Branch (1819:7): [True: 0, False: 1]
  |  Branch (1819:24): [True: 0, False: 0]
  ------------------
 1820|      0|    for (field_type j = finish(); j > i + 1; --j) {
  ------------------
  |  Branch (1820:35): [True: 0, False: 0]
  ------------------
 1821|      0|      set_child(j, child(j - 1));
 1822|      0|    }
 1823|      0|    clear_child(i + 1);
 1824|      0|  }
 1825|      1|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10value_initIJS8_EEEvhPSC_DpOT_:
  984|      1|  void value_init(const field_type i, allocator_type *alloc, Args &&...args) {
  985|      1|    next_generation();
  986|      1|    absl::container_internal::SanitizerUnpoisonObject(slot(i));
  987|      1|    params_type::construct(alloc, slot(i), std::forward<Args>(args)...);
  988|      1|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11upper_boundIS8_EENS1_14btree_iteratorIKNS1_10btree_nodeISD_EERKS8_PSK_EERKT_:
 1472|     48|  const_iterator upper_bound(const K &key) const {
 1473|     48|    return internal_end(internal_upper_bound(key));
 1474|     48|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12internal_endENS1_14btree_iteratorIKNS1_10btree_nodeISD_EERKS8_PSJ_EE:
 1730|     48|  const_iterator internal_end(const_iterator iter) const {
 1731|     48|    return iter.node_ != nullptr ? iter : end();
  ------------------
  |  Branch (1731:12): [True: 40, False: 8]
  ------------------
 1732|     48|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE3endEv:
 1439|      8|  const_iterator end() const {
 1440|      8|    return const_iterator(rightmost(), rightmost()->finish());
 1441|      8|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9rightmostEv:
 1663|     16|  const node_type *rightmost() const { return rightmost_.template get<2>(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6finishEv:
  701|    879|  field_type finish() const { return GetField<2>()[2]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm2EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|  1.50k|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|  1.50k|    return InternalLayout().template Pointer<N>(
  668|  1.50k|        reinterpret_cast<const char *>(this));
  669|  1.50k|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14InternalLayoutEv:
  640|  2.74k|  constexpr static layout_type InternalLayout() {
  641|  2.74k|    return Layout(kNodeSlots, kNodeSlots + 1);
  642|  2.74k|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6LayoutEmm:
  627|  2.77k|                                      const size_type child_count) {
  628|  2.77k|    return layout_type(
  629|  2.77k|        /*parent*/ 1,
  630|  2.77k|        /*generation*/ BtreeGenerationsEnabled() ? 1 : 0,
  ------------------
  |  Branch (630:24): [Folded, False: 2.77k]
  ------------------
  631|  2.77k|        /*position, start, finish, max_count*/ 4,
  632|  2.77k|        /*slots*/ slot_count,
  633|  2.77k|        /*children*/ child_count);
  634|  2.77k|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EC2EPSG_i:
 1144|     56|      : btree_iterator_generation_info(n != nullptr ? n->generation()
  ------------------
  |  Branch (1144:40): [True: 56, False: 0]
  ------------------
 1145|     56|                                                    : ~uint32_t{}),
 1146|     56|        node_(n),
 1147|     56|        position_(p) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10generationEv:
  738|    266|  uint32_t generation() const {
  739|    266|    return BtreeGenerationsEnabled() ? *get_root_generation() : 0;
  ------------------
  |  Branch (739:12): [Folded, False: 266]
  ------------------
  740|    266|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE20internal_upper_boundIS8_EENS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EERKT_:
 2948|     48|auto btree<P>::internal_upper_bound(const K &key) const -> iterator {
 2949|     48|  iterator iter(const_cast<node_type *>(root()));
 2950|     78|  for (;;) {
 2951|     78|    iter.position_ = static_cast<int>(iter.node_->upper_bound(key, key_comp()));
 2952|     78|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2952:9): [True: 48, False: 30]
  ------------------
 2953|     48|      break;
 2954|     48|    }
 2955|     30|    iter.node_ = iter.node_->child(static_cast<field_type>(iter.position_));
 2956|     30|  }
 2957|     48|  return internal_last(iter);
 2958|     48|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4rootEv:
 1660|    107|  const node_type *root() const { return root_; }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2EPSF_:
 1142|    106|  explicit btree_iterator(Node *n) : btree_iterator(n, n->start()) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5startEv:
  694|    573|  field_type start() const {
  695|       |    // TODO(ezb): when floating storage is implemented, return GetField<2>()[1];
  696|       |    assert(GetField<2>()[1] == 0);
  697|    573|    return 0;
  698|    573|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2EPSF_i:
 1144|    201|      : btree_iterator_generation_info(n != nullptr ? n->generation()
  ------------------
  |  Branch (1144:40): [True: 201, False: 0]
  ------------------
 1145|    201|                                                    : ~uint32_t{}),
 1146|    201|        node_(n),
 1147|    201|        position_(p) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11upper_boundIS8_EEmRKT_RKNS1_19key_compare_adapterIS9_S8_E15checked_compareE:
  787|     78|  size_type upper_bound(const K &k, const key_compare &comp) const {
  788|     78|    auto upper_compare = upper_bound_adapter<key_compare>(comp);
  789|     78|    return use_linear_search::value ? linear_search(k, upper_compare).value
  ------------------
  |  Branch (789:12): [Folded, False: 78]
  ------------------
  790|     78|                                    : binary_search(k, upper_compare).value;
  791|     78|  }
_ZN4absl12lts_2024011618container_internal19upper_bound_adapterINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareEEC2ERKSB_:
  451|     78|  explicit upper_bound_adapter(const Compare &c) : comp(c) {}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13binary_searchIS8_NS1_19upper_bound_adapterINS1_19key_compare_adapterIS9_S8_E15checked_compareEEEEENS1_12SearchResultImXsr23btree_is_key_compare_toIT0_S8_EE5valueEEERKT_RKSM_:
  802|     78|  binary_search(const K &k, const Compare &comp) const {
  803|     78|    return binary_search_impl(k, start(), finish(), comp,
  804|     78|                              btree_is_key_compare_to<Compare, key_type>());
  805|     78|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18binary_search_implIS8_NS1_19upper_bound_adapterINS1_19key_compare_adapterIS9_S8_E15checked_compareEEEEENS1_12SearchResultImLb0EEERKT_mmRKT0_NSA_17integral_constantIbLb0EEE:
  845|     78|      std::false_type /* IsCompareTo */) const {
  846|    240|    while (s != e) {
  ------------------
  |  Branch (846:12): [True: 162, False: 78]
  ------------------
  847|    162|      const size_type mid = (s + e) >> 1;
  848|    162|      if (comp(key(mid), k)) {
  ------------------
  |  Branch (848:11): [True: 62, False: 100]
  ------------------
  849|     62|        s = mid + 1;
  850|    100|      } else {
  851|    100|        e = mid;
  852|    100|      }
  853|    162|    }
  854|     78|    return SearchResult<size_type, false>{s};
  855|     78|  }
_ZNK4absl12lts_2024011618container_internal19upper_bound_adapterINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareEEclIS9_S9_EEbRKT_RKT0_:
  453|    162|  bool operator()(const K1 &a, const K2 &b) const {
  454|       |    // Returns true when a is not greater than b.
  455|    162|    return !compare_internal::compare_result_as_less_than(comp(b, a));
  456|    162|  }
_ZNK4absl12lts_2024011618container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS6_11SymbolEntryEE15checked_compareclIS8_S8_TnNSt3__19enable_ifIXsr3std7is_sameIbNS0_20type_traits_internal9result_ofIFKS7_RKT_RKT0_EE4typeEEE5valueEiE4typeELi0EEEbSJ_SM_:
  236|    271|    bool operator()(const T &lhs, const U &rhs) const {
  237|       |      // NOTE: if any of these assertions fail, then the comparator does not
  238|       |      // establish a strict-weak-ordering (see
  239|       |      // https://en.cppreference.com/w/cpp/named_req/Compare).
  240|    271|      assert(is_self_equivalent(lhs));
  241|    271|      assert(is_self_equivalent(rhs));
  242|    271|      const bool lhs_comp_rhs = comp()(lhs, rhs);
  243|       |      assert(!lhs_comp_rhs || !comp()(rhs, lhs));
  244|    271|      return lhs_comp_rhs;
  245|    271|    }
_ZNK4absl12lts_2024011618container_internal20checked_compare_baseIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareELb1EE4compEv:
  175|    271|  const Compare &comp() const { return *this; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE3keyEm:
  752|    271|  const key_type &key(size_type i) const { return params_type::key(slot(i)); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4slotEm:
  675|    354|  const slot_type *slot(size_type i) const { return &GetField<3>()[i]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm3EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|    354|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|    354|    return InternalLayout().template Pointer<N>(
  668|    354|        reinterpret_cast<const char *>(this));
  669|    354|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8key_compEv:
 1565|    234|  const key_compare &key_comp() const noexcept {
 1566|    234|    return rightmost_.template get<0>();
 1567|    234|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE7is_leafEv:
  685|    478|  bool is_leaf() const { return GetField<2>()[3] != kInternalNodeMaxCount; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5childEh:
  759|     74|  btree_node *child(field_type i) const { return GetField<4>()[i]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm4EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|     74|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|     74|    return InternalLayout().template Pointer<N>(
  668|     74|        reinterpret_cast<const char *>(this));
  669|     74|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13internal_lastINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSJ_EEEET_SN_:
 2802|     59|inline IterType btree<P>::internal_last(IterType iter) {
 2803|     59|  assert(iter.node_ != nullptr);
 2804|     61|  while (iter.position_ == iter.node_->finish()) {
  ------------------
  |  Branch (2804:10): [True: 13, False: 48]
  ------------------
 2805|     13|    iter.position_ = iter.node_->position();
 2806|     13|    iter.node_ = iter.node_->parent();
 2807|     13|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2807:9): [True: 11, False: 2]
  ------------------
 2808|     11|      iter.node_ = nullptr;
 2809|     11|      break;
 2810|     11|    }
 2811|     13|  }
 2812|     59|  iter.update_generation();
 2813|     59|  return iter;
 2814|     59|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8positionEv:
  691|     82|  field_type position() const { return GetField<2>()[0]; }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE6parentEv:
  718|    180|  btree_node *parent() const { return *GetField<0>(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm0EEEPKNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  665|    180|  inline const typename layout_type::template ElementType<N> *GetField() const {
  666|       |    assert(N < 4 || is_internal());
  667|    180|    return InternalLayout().template Pointer<N>(
  668|    180|        reinterpret_cast<const char *>(this));
  669|    180|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E17update_generationEv:
 1304|    107|  void update_generation() {
 1305|    107|    btree_iterator_generation_info::update_generation(node_);
 1306|    107|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EC2ISF_SI_SJ_TnNSB_9enable_ifIXaasr3std7is_sameINS2_IT_T0_T1_EENS2_ISF_SI_SJ_EEEE5valueL_ZNSB_17integral_constantIbLb1EE5valueEEEiE4typeELi0EEESQ_:
 1158|    296|      : btree_iterator_generation_info(other),
 1159|    296|        node_(other.node_),
 1160|    296|        position_(other.position_) {}
_ZNK4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EneERKSK_:
 1171|     48|  bool operator!=(const const_iterator &other) const {
 1172|     48|    return !Equals(other);
 1173|     48|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_E6EqualsESK_:
 1248|    141|  bool Equals(const const_iterator other) const {
 1249|    141|    ABSL_HARDENING_ASSERT(((node_ == nullptr && other.node_ == nullptr) ||
  ------------------
  |  |  128|    141|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|    141|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 141]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1250|    141|                           (node_ != nullptr && other.node_ != nullptr)) &&
 1251|    141|                          "Comparing default-constructed iterator with "
 1252|    141|                          "non-default-constructed iterator.");
 1253|       |    // Note: we use assert instead of ABSL_HARDENING_ASSERT here because this
 1254|       |    // changes the complexity of Equals from O(1) to O(log(N) + log(M)) where
 1255|       |    // N/M are sizes of the containers containing node_/other.node_.
 1256|    141|    assert(AreNodesFromSameContainer(node_, other.node_) &&
 1257|    141|           "Comparing iterators from different containers.");
 1258|    141|    assert_valid_generation(node_);
 1259|    141|    other.assert_valid_generation(other.node_);
 1260|    141|    return node_ == other.node_ && position_ == other.position_;
  ------------------
  |  Branch (1260:12): [True: 68, False: 73]
  |  Branch (1260:36): [True: 21, False: 47]
  ------------------
 1261|    141|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5beginEv:
 1437|     48|  const_iterator begin() const { return const_iterator(leftmost()); }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8leftmostEv:
 1673|     48|  const node_type *leftmost() const { return root()->parent(); }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EC2EPSG_:
 1142|     48|  explicit btree_iterator(Node *n) : btree_iterator(n, n->start()) {}
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EmmEv:
 1202|     37|  btree_iterator &operator--() {
 1203|     37|    decrement();
 1204|     37|    return *this;
 1205|     37|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_E9decrementEv:
 1288|     37|  void decrement() {
 1289|     37|    assert_valid_generation(node_);
 1290|     37|    if (node_->is_leaf() && --position_ >= node_->start()) {
  ------------------
  |  Branch (1290:9): [True: 35, False: 2]
  |  Branch (1290:29): [True: 34, False: 1]
  ------------------
 1291|     34|      return;
 1292|     34|    }
 1293|      3|    decrement_slow();
 1294|      3|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_E14decrement_slowEv:
 2159|      3|void btree_iterator<N, R, P>::decrement_slow() {
 2160|      3|  if (node_->is_leaf()) {
  ------------------
  |  Branch (2160:7): [True: 1, False: 2]
  ------------------
 2161|      1|    assert(position_ <= -1);
 2162|      1|    btree_iterator save(*this);
 2163|      2|    while (position_ < node_->start() && !node_->is_root()) {
  ------------------
  |  Branch (2163:12): [True: 1, False: 1]
  |  Branch (2163:42): [True: 1, False: 0]
  ------------------
 2164|      1|      assert(node_->parent()->child(node_->position()) == node_);
 2165|      1|      position_ = node_->position() - 1;
 2166|      1|      node_ = node_->parent();
 2167|      1|    }
 2168|       |    // TODO(ezb): assert we aren't decrementing begin() instead of handling.
 2169|      1|    if (position_ < node_->start()) {
  ------------------
  |  Branch (2169:9): [True: 0, False: 1]
  ------------------
 2170|      0|      *this = save;
 2171|      0|    }
 2172|      2|  } else {
 2173|      2|    assert(position_ >= node_->start());
 2174|      2|    node_ = node_->child(static_cast<field_type>(position_));
 2175|      2|    while (node_->is_internal()) {
  ------------------
  |  Branch (2175:12): [True: 0, False: 2]
  ------------------
 2176|      0|      node_ = node_->child(node_->finish());
 2177|      0|    }
 2178|      2|    position_ = node_->finish() - 1;
 2179|      2|  }
 2180|      3|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE7is_rootEv:
  722|     21|  bool is_root() const { return parent()->is_leaf(); }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11is_internalEv:
  688|    136|  bool is_internal() const { return !is_leaf(); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE3endEv:
 1438|     95|  iterator end() { return iterator(rightmost(), rightmost()->finish()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9rightmostEv:
 1662|    196|  node_type *rightmost() { return rightmost_.template get<2>(); }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EneERKNS2_ISF_SI_SJ_EE:
 1168|     93|  bool operator!=(const iterator &other) const {
 1169|     93|    return !Equals(other);
 1170|     93|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EptEv:
 1196|     83|  pointer operator->() const { return &operator*(); }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EdeEv:
 1186|     83|  reference operator*() const {
 1187|     83|    ABSL_HARDENING_ASSERT(node_ != nullptr);
  ------------------
  |  |  128|     83|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|     83|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 83]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|     83|    assert_valid_generation(node_);
 1189|     83|    ABSL_HARDENING_ASSERT(position_ >= node_->start());
  ------------------
  |  |  128|     83|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|     83|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 83]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|     83|    if (position_ >= node_->finish()) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 83]
  ------------------
 1191|      0|      ABSL_HARDENING_ASSERT(!IsEndIterator() && "Dereferencing end() iterator");
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1192|      0|      ABSL_HARDENING_ASSERT(position_ < node_->finish());
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1193|      0|    }
 1194|     83|    return node_->value(static_cast<field_type>(position_));
 1195|     83|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5valueEm:
  754|     83|  const_reference value(size_type i) const {
  755|     83|    return params_type::element(slot(i));
  756|     83|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EppEv:
 1198|     45|  btree_iterator &operator++() {
 1199|     45|    increment();
 1200|     45|    return *this;
 1201|     45|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_E9incrementEv:
 1279|     45|  void increment() {
 1280|     45|    assert_valid_generation(node_);
 1281|     45|    if (node_->is_leaf() && ++position_ < node_->finish()) {
  ------------------
  |  Branch (1281:9): [True: 44, False: 1]
  |  Branch (1281:29): [True: 33, False: 11]
  ------------------
 1282|     33|      return;
 1283|     33|    }
 1284|     12|    increment_slow();
 1285|     12|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_E14increment_slowEv:
 2135|     12|void btree_iterator<N, R, P>::increment_slow() {
 2136|     12|  if (node_->is_leaf()) {
  ------------------
  |  Branch (2136:7): [True: 11, False: 1]
  ------------------
 2137|     11|    assert(position_ >= node_->finish());
 2138|     11|    btree_iterator save(*this);
 2139|     15|    while (position_ == node_->finish() && !node_->is_root()) {
  ------------------
  |  Branch (2139:12): [True: 11, False: 4]
  |  Branch (2139:44): [True: 4, False: 7]
  ------------------
 2140|      4|      assert(node_->parent()->child(node_->position()) == node_);
 2141|      4|      position_ = node_->position();
 2142|      4|      node_ = node_->parent();
 2143|      4|    }
 2144|       |    // TODO(ezb): assert we aren't incrementing end() instead of handling.
 2145|     11|    if (position_ == node_->finish()) {
  ------------------
  |  Branch (2145:9): [True: 7, False: 4]
  ------------------
 2146|      7|      *this = save;
 2147|      7|    }
 2148|     11|  } else {
 2149|      1|    assert(position_ < node_->finish());
 2150|      1|    node_ = node_->child(static_cast<field_type>(position_ + 1));
 2151|      1|    while (node_->is_internal()) {
  ------------------
  |  Branch (2151:12): [True: 0, False: 1]
  ------------------
 2152|      0|      node_ = node_->start_child();
 2153|      0|    }
 2154|      1|    position_ = node_->start();
 2155|      1|  }
 2156|     12|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11start_childEv:
  760|      1|  btree_node *start_child() const { return child(start()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18insert_hint_uniqueIS8_JRKS8_EEENSA_4pairINS1_14btree_iteratorINS1_10btree_nodeISD_EESH_PSG_EEbEESN_RKT_DpOT0_:
 2305|     48|    -> std::pair<iterator, bool> {
 2306|     48|  if (!empty()) {
  ------------------
  |  Branch (2306:7): [True: 45, False: 3]
  ------------------
 2307|     45|    if (position == end() || compare_keys(key, position.key())) {
  ------------------
  |  Branch (2307:9): [True: 7, False: 38]
  |  Branch (2307:9): [True: 45, False: 0]
  |  Branch (2307:30): [True: 38, False: 0]
  ------------------
 2308|     45|      if (position == begin() || compare_keys(std::prev(position).key(), key)) {
  ------------------
  |  Branch (2308:11): [True: 0, False: 45]
  |  Branch (2308:11): [True: 37, False: 8]
  |  Branch (2308:34): [True: 37, False: 8]
  ------------------
 2309|       |        // prev.key() < key < position.key()
 2310|     37|        return {internal_emplace(position, std::forward<Args>(args)...), true};
 2311|     37|      }
 2312|     45|    } else if (compare_keys(position.key(), key)) {
  ------------------
  |  Branch (2312:16): [True: 0, False: 0]
  ------------------
 2313|      0|      ++position;
 2314|      0|      if (position == end() || compare_keys(key, position.key())) {
  ------------------
  |  Branch (2314:11): [True: 0, False: 0]
  |  Branch (2314:11): [True: 0, False: 0]
  |  Branch (2314:32): [True: 0, False: 0]
  ------------------
 2315|       |        // {original `position`}.key() < key < {current `position`}.key()
 2316|      0|        return {internal_emplace(position, std::forward<Args>(args)...), true};
 2317|      0|      }
 2318|      0|    } else {
 2319|       |      // position.key() == key
 2320|      0|      return {position, false};
 2321|      0|    }
 2322|     45|  }
 2323|     11|  return insert_unique(key, std::forward<Args>(args)...);
 2324|     48|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5emptyEv:
 1583|     65|  bool empty() const { return size_ == 0; }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EeqERKSJ_:
 1162|     90|  bool operator==(const iterator &other) const {
 1163|     90|    return Equals(other);
 1164|     90|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E6EqualsENS2_IKSF_SH_SI_EE:
 1248|    155|  bool Equals(const const_iterator other) const {
 1249|    155|    ABSL_HARDENING_ASSERT(((node_ == nullptr && other.node_ == nullptr) ||
  ------------------
  |  |  128|    155|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|    155|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 155]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1250|    155|                           (node_ != nullptr && other.node_ != nullptr)) &&
 1251|    155|                          "Comparing default-constructed iterator with "
 1252|    155|                          "non-default-constructed iterator.");
 1253|       |    // Note: we use assert instead of ABSL_HARDENING_ASSERT here because this
 1254|       |    // changes the complexity of Equals from O(1) to O(log(N) + log(M)) where
 1255|       |    // N/M are sizes of the containers containing node_/other.node_.
 1256|    155|    assert(AreNodesFromSameContainer(node_, other.node_) &&
 1257|    155|           "Comparing iterators from different containers.");
 1258|    155|    assert_valid_generation(node_);
 1259|    155|    other.assert_valid_generation(other.node_);
 1260|    155|    return node_ == other.node_ && position_ == other.position_;
  ------------------
  |  Branch (1260:12): [True: 79, False: 76]
  |  Branch (1260:36): [True: 9, False: 70]
  ------------------
 1261|    155|  }
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12compare_keysIS8_S8_EEbRKT_RKT0_:
 1569|     91|  bool compare_keys(const K1 &a, const K2 &b) const {
 1570|     91|    return compare_internal::compare_result_as_less_than(key_comp()(a, b));
 1571|     91|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E3keyEv:
 1297|     91|  const key_type &key() const {
 1298|     91|    return node_->key(static_cast<size_type>(position_));
 1299|     91|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5beginEv:
 1436|     47|  iterator begin() { return iterator(leftmost()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8leftmostEv:
 1672|     47|  node_type *leftmost() { return root()->parent(); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4rootEv:
 1659|     63|  node_type *root() { return root_; }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EmmEv:
 1202|     47|  btree_iterator &operator--() {
 1203|     47|    decrement();
 1204|     47|    return *this;
 1205|     47|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E9decrementEv:
 1288|     47|  void decrement() {
 1289|     47|    assert_valid_generation(node_);
 1290|     47|    if (node_->is_leaf() && --position_ >= node_->start()) {
  ------------------
  |  Branch (1290:9): [True: 41, False: 6]
  |  Branch (1290:29): [True: 40, False: 1]
  ------------------
 1291|     40|      return;
 1292|     40|    }
 1293|      7|    decrement_slow();
 1294|      7|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E14decrement_slowEv:
 2159|      7|void btree_iterator<N, R, P>::decrement_slow() {
 2160|      7|  if (node_->is_leaf()) {
  ------------------
  |  Branch (2160:7): [True: 1, False: 6]
  ------------------
 2161|      1|    assert(position_ <= -1);
 2162|      1|    btree_iterator save(*this);
 2163|      2|    while (position_ < node_->start() && !node_->is_root()) {
  ------------------
  |  Branch (2163:12): [True: 1, False: 1]
  |  Branch (2163:42): [True: 1, False: 0]
  ------------------
 2164|      1|      assert(node_->parent()->child(node_->position()) == node_);
 2165|      1|      position_ = node_->position() - 1;
 2166|      1|      node_ = node_->parent();
 2167|      1|    }
 2168|       |    // TODO(ezb): assert we aren't decrementing begin() instead of handling.
 2169|      1|    if (position_ < node_->start()) {
  ------------------
  |  Branch (2169:9): [True: 0, False: 1]
  ------------------
 2170|      0|      *this = save;
 2171|      0|    }
 2172|      6|  } else {
 2173|      6|    assert(position_ >= node_->start());
 2174|      6|    node_ = node_->child(static_cast<field_type>(position_));
 2175|      6|    while (node_->is_internal()) {
  ------------------
  |  Branch (2175:12): [True: 0, False: 6]
  ------------------
 2176|      0|      node_ = node_->child(node_->finish());
 2177|      0|    }
 2178|      6|    position_ = node_->finish() - 1;
 2179|      6|  }
 2180|      7|}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJRKS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EESH_PSG_EESM_DpOT_:
 2819|     48|    -> iterator {
 2820|     48|  if (iter.node_->is_internal()) {
  ------------------
  |  Branch (2820:7): [True: 2, False: 46]
  ------------------
 2821|       |    // We can't insert on an internal node. Instead, we'll insert after the
 2822|       |    // previous value which is guaranteed to be on a leaf node.
 2823|      2|    --iter;
 2824|      2|    ++iter.position_;
 2825|      2|  }
 2826|     48|  const field_type max_count = iter.node_->max_count();
 2827|     48|  allocator_type *alloc = mutable_allocator();
 2828|       |
 2829|     48|  const auto transfer_and_delete = [&](node_type *old_node,
 2830|     48|                                       node_type *new_node) {
 2831|     48|    new_node->transfer_n(old_node->count(), new_node->start(),
 2832|     48|                         old_node->start(), old_node, alloc);
 2833|     48|    new_node->set_finish(old_node->finish());
 2834|     48|    old_node->set_finish(old_node->start());
 2835|     48|    new_node->set_generation(old_node->generation());
 2836|     48|    node_type::clear_and_delete(old_node, alloc);
 2837|     48|  };
 2838|     48|  const auto replace_leaf_root_node = [&](field_type new_node_size) {
 2839|     48|    assert(iter.node_ == root());
 2840|     48|    node_type *old_root = iter.node_;
 2841|     48|    node_type *new_root = iter.node_ = new_leaf_root_node(new_node_size);
 2842|     48|    transfer_and_delete(old_root, new_root);
 2843|     48|    mutable_root() = mutable_rightmost() = new_root;
 2844|     48|  };
 2845|       |
 2846|     48|  bool replaced_node = false;
 2847|     48|  if (iter.node_->count() == max_count) {
  ------------------
  |  Branch (2847:7): [True: 19, False: 29]
  ------------------
 2848|       |    // Make room in the leaf for the new item.
 2849|     19|    if (max_count < kNodeSlots) {
  ------------------
  |  Branch (2849:9): [True: 7, False: 12]
  ------------------
 2850|       |      // Insertion into the root where the root is smaller than the full node
 2851|       |      // size. Simply grow the size of the root node.
 2852|      7|      replace_leaf_root_node(static_cast<field_type>(
 2853|      7|          (std::min)(static_cast<int>(kNodeSlots), 2 * max_count)));
 2854|      7|      replaced_node = true;
 2855|     12|    } else {
 2856|     12|      rebalance_or_split(&iter);
 2857|     12|    }
 2858|     19|  }
 2859|     48|  (void)replaced_node;
 2860|       |#if defined(ABSL_HAVE_ADDRESS_SANITIZER) || \
 2861|       |    defined(ABSL_HAVE_HWADDRESS_SANITIZER)
 2862|       |  if (!replaced_node) {
 2863|       |    assert(iter.node_->is_leaf());
 2864|       |    if (iter.node_->is_root()) {
 2865|       |      replace_leaf_root_node(max_count);
 2866|       |    } else {
 2867|       |      node_type *old_node = iter.node_;
 2868|       |      const bool was_rightmost = rightmost() == old_node;
 2869|       |      const bool was_leftmost = leftmost() == old_node;
 2870|       |      node_type *parent = old_node->parent();
 2871|       |      const field_type position = old_node->position();
 2872|       |      node_type *new_node = iter.node_ = new_leaf_node(position, parent);
 2873|       |      parent->set_child_noupdate_position(position, new_node);
 2874|       |      transfer_and_delete(old_node, new_node);
 2875|       |      if (was_rightmost) mutable_rightmost() = new_node;
 2876|       |      // The leftmost node is stored as the parent of the root node.
 2877|       |      if (was_leftmost) root()->set_parent(new_node);
 2878|       |    }
 2879|       |  }
 2880|       |#endif
 2881|     48|  iter.node_->emplace_value(static_cast<field_type>(iter.position_), alloc,
 2882|     48|                            std::forward<Args>(args)...);
 2883|       |  assert(
 2884|     48|      iter.node_->is_ordered_correctly(static_cast<field_type>(iter.position_),
 2885|     48|                                       original_key_compare(key_comp())) &&
 2886|     48|      "If this assert fails, then either (1) the comparator may violate "
 2887|     48|      "transitivity, i.e. comp(a,b) && comp(b,c) -> comp(a,c) (see "
 2888|     48|      "https://en.cppreference.com/w/cpp/named_req/Compare), or (2) a "
 2889|     48|      "key may have been mutated after it was inserted into the tree.");
 2890|     48|  ++size_;
 2891|     48|  iter.update_generation();
 2892|     48|  return iter;
 2893|     48|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9max_countEv:
  708|     62|  field_type max_count() const {
  709|       |    // Internal nodes have max_count==kInternalNodeMaxCount.
  710|       |    // Leaf nodes have max_count in [1, kNodeSlots].
  711|     62|    const field_type max_count = GetField<2>()[3];
  712|     62|    return max_count == field_type{kInternalNodeMaxCount}
  ------------------
  |  Branch (712:12): [True: 0, False: 62]
  ------------------
  713|     62|               ? field_type{kNodeSlots}
  714|     62|               : max_count;
  715|     62|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17mutable_allocatorEv:
 1676|     80|  allocator_type *mutable_allocator() noexcept {
 1677|     80|    return &rightmost_.template get<1>();
 1678|     80|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5countEv:
  704|    115|  field_type count() const {
  705|       |    assert(finish() >= start());
  706|    115|    return finish() - start();
  707|    115|  }
_ZZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJRKS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EESH_PSG_EESM_DpOT_ENKUlhE_clEh:
 2838|      7|  const auto replace_leaf_root_node = [&](field_type new_node_size) {
 2839|       |    assert(iter.node_ == root());
 2840|      7|    node_type *old_root = iter.node_;
 2841|      7|    node_type *new_root = iter.node_ = new_leaf_root_node(new_node_size);
 2842|      7|    transfer_and_delete(old_root, new_root);
 2843|      7|    mutable_root() = mutable_rightmost() = new_root;
 2844|      7|  };
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18new_leaf_root_nodeEh:
 1702|     10|  node_type *new_leaf_root_node(field_type max_count) {
 1703|     10|    node_type *n = allocate(node_type::LeafSize(max_count));
 1704|     10|    n->init_leaf(/*position=*/0, max_count, /*parent=*/n);
 1705|     10|    return n;
 1706|     10|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8allocateEm:
 1685|     18|  node_type *allocate(size_type size) {
 1686|     18|    return reinterpret_cast<node_type *>(
 1687|     18|        absl::container_internal::Allocate<node_type::Alignment()>(
 1688|     18|            mutable_allocator(), size));
 1689|     18|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8LeafSizeEm:
  643|     30|  constexpr static size_type LeafSize(const size_type slot_count = kNodeSlots) {
  644|     30|    return LeafLayout(slot_count).AllocSize();
  645|     30|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10LeafLayoutEm:
  637|     30|      const size_type slot_count = kNodeSlots) {
  638|     30|    return Layout(slot_count, 0);
  639|     30|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9init_leafEhhPSE_:
  954|     18|                 btree_node *parent) {
  955|     18|    set_generation(0);
  956|     18|    set_parent(parent);
  957|     18|    set_position(position);
  958|     18|    set_start(0);
  959|     18|    set_finish(0);
  960|     18|    set_max_count(max_count);
  961|     18|    absl::container_internal::SanitizerPoisonMemoryRegion(
  962|     18|        start_slot(), max_count * sizeof(slot_type));
  963|     18|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14set_generationEj:
  743|     27|  void set_generation(uint32_t generation) {
  744|     27|    if (BtreeGenerationsEnabled()) GetField<1>()[0] = generation;
  ------------------
  |  Branch (744:9): [Folded, False: 27]
  ------------------
  745|     27|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10set_parentEPSE_:
  670|     20|  void set_parent(btree_node *p) { *GetField<0>() = p; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm0EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|     20|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|     20|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|     20|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12set_positionEh:
  676|     28|  void set_position(field_type v) { GetField<2>()[0] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm2EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|    182|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|    182|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|    182|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9set_startEh:
  677|     18|  void set_start(field_type v) { GetField<2>()[1] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10set_finishEh:
  678|    110|  void set_finish(field_type v) { GetField<2>()[2] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13set_max_countEh:
  680|     20|  void set_max_count(field_type v) { GetField<2>()[3] = v; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10start_slotEv:
  673|     18|  slot_type *start_slot() { return slot(start()); }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4slotEm:
  672|    390|  slot_type *slot(size_type i) { return &GetField<3>()[i]; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm3EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|    390|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|    390|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|    390|  }
_ZZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16internal_emplaceIJRKS8_EEENS1_14btree_iteratorINS1_10btree_nodeISD_EESH_PSG_EESM_DpOT_ENKUlPSK_SQ_E_clESQ_SQ_:
 2830|      7|                                       node_type *new_node) {
 2831|      7|    new_node->transfer_n(old_node->count(), new_node->start(),
 2832|      7|                         old_node->start(), old_node, alloc);
 2833|      7|    new_node->set_finish(old_node->finish());
 2834|      7|    old_node->set_finish(old_node->start());
 2835|      7|    new_node->set_generation(old_node->generation());
 2836|      7|    node_type::clear_and_delete(old_node, alloc);
 2837|      7|  };
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10transfer_nEmmmPSE_PSC_:
 1020|     25|                  allocator_type *alloc) {
 1021|     25|    next_generation();
 1022|     25|    for (slot_type *src = src_node->slot(src_i), *end = src + n,
 1023|     25|                   *dest = slot(dest_i);
 1024|    100|         src != end; ++src, ++dest) {
  ------------------
  |  Branch (1024:10): [True: 75, False: 25]
  ------------------
 1025|     75|      transfer(dest, src, alloc);
 1026|     75|    }
 1027|     25|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15next_generationEv:
  747|    151|  void next_generation() {
  748|    151|    if (BtreeGenerationsEnabled()) ++*get_root_generation();
  ------------------
  |  Branch (748:9): [Folded, False: 151]
  ------------------
  749|    151|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8transferEPS8_SF_PSC_:
 1003|    183|  static void transfer(slot_type *dest, slot_type *src, allocator_type *alloc) {
 1004|    183|    absl::container_internal::SanitizerUnpoisonObject(dest);
 1005|    183|    params_type::transfer(alloc, dest, src);
 1006|    183|    absl::container_internal::SanitizerPoisonObject(src);
 1007|    183|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE16clear_and_deleteEPSE_PSC_:
 2008|      9|void btree_node<P>::clear_and_delete(btree_node *node, allocator_type *alloc) {
 2009|      9|  if (node->is_leaf()) {
  ------------------
  |  Branch (2009:7): [True: 8, False: 1]
  ------------------
 2010|      8|    node->value_destroy_n(node->start(), node->count(), alloc);
 2011|      8|    deallocate(LeafSize(node->max_count()), node, alloc);
 2012|      8|    return;
 2013|      8|  }
 2014|      1|  if (node->count() == 0) {
  ------------------
  |  Branch (2014:7): [True: 0, False: 1]
  ------------------
 2015|      0|    deallocate(InternalSize(), node, alloc);
 2016|      0|    return;
 2017|      0|  }
 2018|       |
 2019|       |  // The parent of the root of the subtree we are deleting.
 2020|      1|  btree_node *delete_root_parent = node->parent();
 2021|       |
 2022|       |  // Navigate to the leftmost leaf under node, and then delete upwards.
 2023|      2|  while (node->is_internal()) node = node->start_child();
  ------------------
  |  Branch (2023:10): [True: 1, False: 1]
  ------------------
 2024|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2025|       |  // When generations are enabled, we delete the leftmost leaf last in case it's
 2026|       |  // the parent of the root and we need to check whether it's a leaf before we
 2027|       |  // can update the root's generation.
 2028|       |  // TODO(ezb): if we change btree_node::is_root to check a bool inside the node
 2029|       |  // instead of checking whether the parent is a leaf, we can remove this logic.
 2030|       |  btree_node *leftmost_leaf = node;
 2031|       |#endif
 2032|       |  // Use `size_type` because `pos` needs to be able to hold `kNodeSlots+1`,
 2033|       |  // which isn't guaranteed to be a valid `field_type`.
 2034|      1|  size_type pos = node->position();
 2035|      1|  btree_node *parent = node->parent();
 2036|      1|  for (;;) {
 2037|       |    // In each iteration of the next loop, we delete one leaf node and go right.
 2038|      1|    assert(pos <= parent->finish());
 2039|      6|    do {
 2040|      6|      node = parent->child(static_cast<field_type>(pos));
 2041|      6|      if (node->is_internal()) {
  ------------------
  |  Branch (2041:11): [True: 0, False: 6]
  ------------------
 2042|       |        // Navigate to the leftmost leaf under node.
 2043|      0|        while (node->is_internal()) node = node->start_child();
  ------------------
  |  Branch (2043:16): [True: 0, False: 0]
  ------------------
 2044|      0|        pos = node->position();
 2045|      0|        parent = node->parent();
 2046|      0|      }
 2047|      6|      node->value_destroy_n(node->start(), node->count(), alloc);
 2048|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2049|       |      if (leftmost_leaf != node)
 2050|       |#endif
 2051|      6|        deallocate(LeafSize(node->max_count()), node, alloc);
 2052|      6|      ++pos;
 2053|      6|    } while (pos <= parent->finish());
  ------------------
  |  Branch (2053:14): [True: 5, False: 1]
  ------------------
 2054|       |
 2055|       |    // Once we've deleted all children of parent, delete parent and go up/right.
 2056|      1|    assert(pos > parent->finish());
 2057|      1|    do {
 2058|      1|      node = parent;
 2059|      1|      pos = node->position();
 2060|      1|      parent = node->parent();
 2061|      1|      node->value_destroy_n(node->start(), node->count(), alloc);
 2062|      1|      deallocate(InternalSize(), node, alloc);
 2063|      1|      if (parent == delete_root_parent) {
  ------------------
  |  Branch (2063:11): [True: 1, False: 0]
  ------------------
 2064|       |#ifdef ABSL_BTREE_ENABLE_GENERATIONS
 2065|       |        deallocate(LeafSize(leftmost_leaf->max_count()), leftmost_leaf, alloc);
 2066|       |#endif
 2067|      1|        return;
 2068|      1|      }
 2069|      0|      ++pos;
 2070|      0|    } while (pos > parent->finish());
  ------------------
  |  Branch (2070:14): [True: 0, False: 0]
  ------------------
 2071|      1|  }
 2072|      1|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15value_destroy_nEhhPSC_:
  995|     15|                       allocator_type *alloc) {
  996|     15|    next_generation();
  997|     52|    for (slot_type *s = slot(i), *end = slot(i + n); s != end; ++s) {
  ------------------
  |  Branch (997:54): [True: 37, False: 15]
  ------------------
  998|     37|      params_type::destroy(alloc, s);
  999|     37|      absl::container_internal::SanitizerPoisonObject(s);
 1000|     37|    }
 1001|     15|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10deallocateEmPSE_PSC_:
  974|     15|                         allocator_type *alloc) {
  975|     15|    absl::container_internal::SanitizerUnpoisonMemoryRegion(node, size);
  976|     15|    absl::container_internal::Deallocate<Alignment()>(alloc, node, size);
  977|     15|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12InternalSizeEv:
  646|      3|  constexpr static size_type InternalSize() {
  647|      3|    return InternalLayout().AllocSize();
  648|      3|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17mutable_rightmostEv:
 1664|     14|  node_type *&mutable_rightmost() noexcept {
 1665|     14|    return rightmost_.template get<2>();
 1666|     14|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE12mutable_rootEv:
 1661|     14|  node_type *&mutable_root() noexcept { return root_; }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18rebalance_or_splitEPNS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSI_EE:
 2615|     12|void btree<P>::rebalance_or_split(iterator *iter) {
 2616|     12|  node_type *&node = iter->node_;
 2617|     12|  int &insert_position = iter->position_;
 2618|     12|  assert(node->count() == node->max_count());
 2619|     12|  assert(kNodeSlots == node->max_count());
 2620|       |
 2621|       |  // First try to make room on the node by rebalancing.
 2622|     12|  node_type *parent = node->parent();
 2623|     12|  if (node != root()) {
  ------------------
  |  Branch (2623:7): [True: 10, False: 2]
  ------------------
 2624|     10|    if (node->position() > parent->start()) {
  ------------------
  |  Branch (2624:9): [True: 7, False: 3]
  ------------------
 2625|       |      // Try rebalancing with our left sibling.
 2626|      7|      node_type *left = parent->child(node->position() - 1);
 2627|      7|      assert(left->max_count() == kNodeSlots);
 2628|      7|      if (left->count() < kNodeSlots) {
  ------------------
  |  Branch (2628:11): [True: 6, False: 1]
  ------------------
 2629|       |        // We bias rebalancing based on the position being inserted. If we're
 2630|       |        // inserting at the end of the right node then we bias rebalancing to
 2631|       |        // fill up the left node.
 2632|      6|        field_type to_move =
 2633|      6|            (kNodeSlots - left->count()) /
 2634|      6|            (1 + (static_cast<field_type>(insert_position) < kNodeSlots));
 2635|      6|        to_move = (std::max)(field_type{1}, to_move);
 2636|       |
 2637|      6|        if (static_cast<field_type>(insert_position) - to_move >=
  ------------------
  |  Branch (2637:13): [True: 6, False: 0]
  ------------------
 2638|      6|                node->start() ||
 2639|      6|            left->count() + to_move < kNodeSlots) {
  ------------------
  |  Branch (2639:13): [True: 0, False: 0]
  ------------------
 2640|      6|          left->rebalance_right_to_left(to_move, node, mutable_allocator());
 2641|       |
 2642|      6|          assert(node->max_count() - node->count() == to_move);
 2643|      6|          insert_position = static_cast<int>(
 2644|      6|              static_cast<field_type>(insert_position) - to_move);
 2645|      6|          if (insert_position < node->start()) {
  ------------------
  |  Branch (2645:15): [True: 0, False: 6]
  ------------------
 2646|      0|            insert_position = insert_position + left->count() + 1;
 2647|      0|            node = left;
 2648|      0|          }
 2649|       |
 2650|      6|          assert(node->count() < node->max_count());
 2651|      6|          return;
 2652|      6|        }
 2653|      6|      }
 2654|      7|    }
 2655|       |
 2656|      4|    if (node->position() < parent->finish()) {
  ------------------
  |  Branch (2656:9): [True: 4, False: 0]
  ------------------
 2657|       |      // Try rebalancing with our right sibling.
 2658|      4|      node_type *right = parent->child(node->position() + 1);
 2659|      4|      assert(right->max_count() == kNodeSlots);
 2660|      4|      if (right->count() < kNodeSlots) {
  ------------------
  |  Branch (2660:11): [True: 0, False: 4]
  ------------------
 2661|       |        // We bias rebalancing based on the position being inserted. If we're
 2662|       |        // inserting at the beginning of the left node then we bias rebalancing
 2663|       |        // to fill up the right node.
 2664|      0|        field_type to_move = (kNodeSlots - right->count()) /
 2665|      0|                             (1 + (insert_position > node->start()));
 2666|      0|        to_move = (std::max)(field_type{1}, to_move);
 2667|       |
 2668|      0|        if (static_cast<field_type>(insert_position) <=
  ------------------
  |  Branch (2668:13): [True: 0, False: 0]
  ------------------
 2669|      0|                node->finish() - to_move ||
 2670|      0|            right->count() + to_move < kNodeSlots) {
  ------------------
  |  Branch (2670:13): [True: 0, False: 0]
  ------------------
 2671|      0|          node->rebalance_left_to_right(to_move, right, mutable_allocator());
 2672|       |
 2673|      0|          if (insert_position > node->finish()) {
  ------------------
  |  Branch (2673:15): [True: 0, False: 0]
  ------------------
 2674|      0|            insert_position = insert_position - node->count() - 1;
 2675|      0|            node = right;
 2676|      0|          }
 2677|       |
 2678|      0|          assert(node->count() < node->max_count());
 2679|      0|          return;
 2680|      0|        }
 2681|      0|      }
 2682|      4|    }
 2683|       |
 2684|       |    // Rebalancing failed, make sure there is room on the parent node for a new
 2685|       |    // value.
 2686|      4|    assert(parent->max_count() == kNodeSlots);
 2687|      4|    if (parent->count() == kNodeSlots) {
  ------------------
  |  Branch (2687:9): [True: 0, False: 4]
  ------------------
 2688|      0|      iterator parent_iter(parent, node->position());
 2689|      0|      rebalance_or_split(&parent_iter);
 2690|      0|      parent = node->parent();
 2691|      0|    }
 2692|      4|  } else {
 2693|       |    // Rebalancing not possible because this is the root node.
 2694|       |    // Create a new root node and set the current root node as the child of the
 2695|       |    // new root.
 2696|      2|    parent = new_internal_node(/*position=*/0, parent);
 2697|      2|    parent->set_generation(root()->generation());
 2698|      2|    parent->init_child(parent->start(), node);
 2699|      2|    mutable_root() = parent;
 2700|       |    // If the former root was a leaf node, then it's now the rightmost node.
 2701|      2|    assert(parent->start_child()->is_internal() ||
 2702|      2|           parent->start_child() == rightmost());
 2703|      2|  }
 2704|       |
 2705|       |  // Split the node.
 2706|      6|  node_type *split_node;
 2707|      6|  if (node->is_leaf()) {
  ------------------
  |  Branch (2707:7): [True: 6, False: 0]
  ------------------
 2708|      6|    split_node = new_leaf_node(node->position() + 1, parent);
 2709|      6|    node->split(insert_position, split_node, mutable_allocator());
 2710|      6|    if (rightmost() == node) mutable_rightmost() = split_node;
  ------------------
  |  Branch (2710:9): [True: 2, False: 4]
  ------------------
 2711|      6|  } else {
 2712|      0|    split_node = new_internal_node(node->position() + 1, parent);
 2713|      0|    node->split(insert_position, split_node, mutable_allocator());
 2714|      0|  }
 2715|       |
 2716|      6|  if (insert_position > node->finish()) {
  ------------------
  |  Branch (2716:7): [True: 1, False: 5]
  ------------------
 2717|      1|    insert_position = insert_position - node->count() - 1;
 2718|      1|    node = split_node;
 2719|      1|  }
 2720|      6|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE23rebalance_right_to_leftEhPSE_PSC_:
 1854|      6|                                            allocator_type *alloc) {
 1855|      6|  assert(parent() == right->parent());
 1856|      6|  assert(position() + 1 == right->position());
 1857|      6|  assert(right->count() >= count());
 1858|      6|  assert(to_move >= 1);
 1859|      6|  assert(to_move <= right->count());
 1860|       |
 1861|       |  // 1) Move the delimiting value in the parent to the left node.
 1862|      6|  transfer(finish(), position(), parent(), alloc);
 1863|       |
 1864|       |  // 2) Move the (to_move - 1) values from the right node to the left node.
 1865|      6|  transfer_n(to_move - 1, finish() + 1, right->start(), right, alloc);
 1866|       |
 1867|       |  // 3) Move the new delimiting value to the parent from the right node.
 1868|      6|  parent()->transfer(position(), right->start() + to_move - 1, right, alloc);
 1869|       |
 1870|       |  // 4) Shift the values in the right node to their correct positions.
 1871|      6|  right->transfer_n(right->count() - to_move, right->start(),
 1872|      6|                    right->start() + to_move, right, alloc);
 1873|       |
 1874|      6|  if (is_internal()) {
  ------------------
  |  Branch (1874:7): [True: 0, False: 6]
  ------------------
 1875|       |    // Move the child pointers from the right to the left node.
 1876|      0|    for (field_type i = 0; i < to_move; ++i) {
  ------------------
  |  Branch (1876:28): [True: 0, False: 0]
  ------------------
 1877|      0|      init_child(finish() + i + 1, right->child(i));
 1878|      0|    }
 1879|      0|    for (field_type i = right->start(); i <= right->finish() - to_move; ++i) {
  ------------------
  |  Branch (1879:41): [True: 0, False: 0]
  ------------------
 1880|      0|      assert(i + to_move <= right->max_count());
 1881|      0|      right->init_child(i, right->child(i + to_move));
 1882|      0|      right->clear_child(i + to_move);
 1883|      0|    }
 1884|      0|  }
 1885|       |
 1886|       |  // Fixup `finish` on the left and right nodes.
 1887|      6|  set_finish(finish() + to_move);
 1888|      6|  right->set_finish(right->finish() - to_move);
 1889|      6|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8transferEmmPSE_PSC_:
 1011|     12|                btree_node *src_node, allocator_type *alloc) {
 1012|     12|    next_generation();
 1013|     12|    transfer(slot(dest_i), src_node->slot(src_i), alloc);
 1014|     12|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11clear_childEh:
  762|      4|  void clear_child(field_type i) {
  763|      4|    absl::container_internal::SanitizerPoisonObject(&mutable_child(i));
  764|      4|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13mutable_childEh:
  761|     38|  btree_node *&mutable_child(field_type i) { return GetField<4>()[i]; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8GetFieldILm4EEEPNSA_13tuple_elementIXT_ENSA_5tupleIJPSE_jhS8_SI_EEEE4typeEv:
  659|     38|  inline typename layout_type::template ElementType<N> *GetField() {
  660|       |    // We assert that we don't read from values that aren't there.
  661|       |    assert(N < 4 || is_internal());
  662|     38|    return InternalLayout().template Pointer<N>(reinterpret_cast<char *>(this));
  663|     38|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE19transfer_n_backwardEmmmPSE_PSC_:
 1033|     39|                           allocator_type *alloc) {
 1034|     39|    next_generation();
 1035|     39|    for (slot_type *src = src_node->slot(src_i + n), *end = src - n,
 1036|     39|                   *dest = slot(dest_i + n);
 1037|    135|         src != end; --src, --dest) {
  ------------------
  |  Branch (1037:10): [True: 96, False: 39]
  ------------------
 1038|       |      // If we modified the loop index calculations above to avoid the -1s here,
 1039|       |      // it would result in UB in the computation of `end` (and possibly `src`
 1040|       |      // as well, if n == 0), since slot() is effectively an array index and it
 1041|       |      // is UB to compute the address of any out-of-bounds array element except
 1042|       |      // for one-past-the-end.
 1043|     96|      transfer(dest - 1, src - 1, alloc);
 1044|     96|    }
 1045|     39|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE17new_internal_nodeEhPNS1_10btree_nodeISD_EE:
 1692|      2|  node_type *new_internal_node(field_type position, node_type *parent) {
 1693|      2|    node_type *n = allocate(node_type::InternalSize());
 1694|      2|    n->init_internal(position, parent);
 1695|      2|    return n;
 1696|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13init_internalEhPSE_:
  964|      2|  void init_internal(field_type position, btree_node *parent) {
  965|      2|    init_leaf(position, kNodeSlots, parent);
  966|       |    // Set `max_count` to a sentinel value to indicate that this node is
  967|       |    // internal.
  968|      2|    set_max_count(kInternalNodeMaxCount);
  969|      2|    absl::container_internal::SanitizerPoisonMemoryRegion(
  970|      2|        &mutable_child(start()), (kNodeSlots + 1) * sizeof(btree_node *));
  971|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10init_childEhPSE_:
  773|      2|  void init_child(field_type i, btree_node *c) {
  774|      2|    set_child(i, c);
  775|      2|    c->set_parent(this);
  776|      2|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE9set_childEhPSE_:
  769|     10|  void set_child(field_type i, btree_node *c) {
  770|     10|    set_child_noupdate_position(i, c);
  771|     10|    c->set_position(i);
  772|     10|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE27set_child_noupdate_positionEhPSE_:
  765|     16|  void set_child_noupdate_position(field_type i, btree_node *c) {
  766|     16|    absl::container_internal::SanitizerUnpoisonObject(&mutable_child(i));
  767|     16|    mutable_child(i) = c;
  768|     16|  }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13new_leaf_nodeEhPNS1_10btree_nodeISD_EE:
 1697|      6|  node_type *new_leaf_node(field_type position, node_type *parent) {
 1698|      6|    node_type *n = allocate(node_type::LeafSize());
 1699|      6|    n->init_leaf(position, kNodeSlots, parent);
 1700|      6|    return n;
 1701|      6|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5splitEiPSE_PSC_:
 1940|      6|                          allocator_type *alloc) {
 1941|      6|  assert(dest->count() == 0);
 1942|      6|  assert(max_count() == kNodeSlots);
 1943|      6|  assert(position() + 1 == dest->position());
 1944|      6|  assert(parent() == dest->parent());
 1945|       |
 1946|       |  // We bias the split based on the position being inserted. If we're
 1947|       |  // inserting at the beginning of the left node then bias the split to put
 1948|       |  // more values on the right node. If we're inserting at the end of the
 1949|       |  // right node then bias the split to put more values on the left node.
 1950|      6|  if (insert_position == start()) {
  ------------------
  |  Branch (1950:7): [True: 2, False: 4]
  ------------------
 1951|      2|    dest->set_finish(dest->start() + finish() - 1);
 1952|      4|  } else if (insert_position == kNodeSlots) {
  ------------------
  |  Branch (1952:14): [True: 0, False: 4]
  ------------------
 1953|      0|    dest->set_finish(dest->start());
 1954|      4|  } else {
 1955|      4|    dest->set_finish(dest->start() + count() / 2);
 1956|      4|  }
 1957|      6|  set_finish(finish() - dest->count());
 1958|      6|  assert(count() >= 1);
 1959|       |
 1960|       |  // Move values from the left sibling to the right sibling.
 1961|      6|  dest->transfer_n(dest->count(), dest->start(), finish(), this, alloc);
 1962|       |
 1963|       |  // The split key is the largest value in the left sibling.
 1964|      6|  --mutable_finish();
 1965|      6|  parent()->emplace_value(position(), alloc, finish_slot());
 1966|      6|  value_destroy(finish(), alloc);
 1967|      6|  parent()->set_child_noupdate_position(position() + 1, dest);
 1968|       |
 1969|      6|  if (is_internal()) {
  ------------------
  |  Branch (1969:7): [True: 0, False: 6]
  ------------------
 1970|      0|    for (field_type i = dest->start(), j = finish() + 1; i <= dest->finish();
  ------------------
  |  Branch (1970:58): [True: 0, False: 0]
  ------------------
 1971|      0|         ++i, ++j) {
 1972|       |      assert(child(j) != nullptr);
 1973|      0|      dest->init_child(i, child(j));
 1974|      0|      clear_child(j);
 1975|      0|    }
 1976|      0|  }
 1977|      6|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE14mutable_finishEv:
  671|      6|  field_type &mutable_finish() { return GetField<2>()[2]; }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13emplace_valueIJPS8_EEEvhPSC_DpOT_:
 1807|      6|                                         Args &&...args) {
 1808|      6|  assert(i >= start());
 1809|      6|  assert(i <= finish());
 1810|       |  // Shift old values to create space for new value and then construct it in
 1811|       |  // place.
 1812|      6|  if (i < finish()) {
  ------------------
  |  Branch (1812:7): [True: 4, False: 2]
  ------------------
 1813|      4|    transfer_n_backward(finish() - i, /*dest_i=*/i + 1, /*src_i=*/i, this,
 1814|      4|                        alloc);
 1815|      4|  }
 1816|      6|  value_init(static_cast<field_type>(i), alloc, std::forward<Args>(args)...);
 1817|      6|  set_finish(finish() + 1);
 1818|       |
 1819|      6|  if (is_internal() && finish() > i + 1) {
  ------------------
  |  Branch (1819:7): [True: 6, False: 0]
  |  Branch (1819:24): [True: 4, False: 2]
  ------------------
 1820|     12|    for (field_type j = finish(); j > i + 1; --j) {
  ------------------
  |  Branch (1820:35): [True: 8, False: 4]
  ------------------
 1821|      8|      set_child(j, child(j - 1));
 1822|      8|    }
 1823|      4|    clear_child(i + 1);
 1824|      4|  }
 1825|      6|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10value_initIJPS8_EEEvhPSC_DpOT_:
  984|      6|  void value_init(const field_type i, allocator_type *alloc, Args &&...args) {
  985|      6|    next_generation();
  986|      6|    absl::container_internal::SanitizerUnpoisonObject(slot(i));
  987|      6|    params_type::construct(alloc, slot(i), std::forward<Args>(args)...);
  988|      6|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11finish_slotEv:
  674|      6|  slot_type *finish_slot() { return slot(finish()); }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13value_destroyEhPSC_:
  989|      6|  void value_destroy(const field_type i, allocator_type *alloc) {
  990|      6|    next_generation();
  991|      6|    params_type::destroy(alloc, slot(i));
  992|      6|    absl::container_internal::SanitizerPoisonObject(slot(i));
  993|      6|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13emplace_valueIJRKS8_EEEvhPSC_DpOT_:
 1807|     48|                                         Args &&...args) {
 1808|     48|  assert(i >= start());
 1809|     48|  assert(i <= finish());
 1810|       |  // Shift old values to create space for new value and then construct it in
 1811|       |  // place.
 1812|     48|  if (i < finish()) {
  ------------------
  |  Branch (1812:7): [True: 35, False: 13]
  ------------------
 1813|     35|    transfer_n_backward(finish() - i, /*dest_i=*/i + 1, /*src_i=*/i, this,
 1814|     35|                        alloc);
 1815|     35|  }
 1816|     48|  value_init(static_cast<field_type>(i), alloc, std::forward<Args>(args)...);
 1817|     48|  set_finish(finish() + 1);
 1818|       |
 1819|     48|  if (is_internal() && finish() > i + 1) {
  ------------------
  |  Branch (1819:7): [True: 0, False: 48]
  |  Branch (1819:24): [True: 0, False: 0]
  ------------------
 1820|      0|    for (field_type j = finish(); j > i + 1; --j) {
  ------------------
  |  Branch (1820:35): [True: 0, False: 0]
  ------------------
 1821|      0|      set_child(j, child(j - 1));
 1822|      0|    }
 1823|      0|    clear_child(i + 1);
 1824|      0|  }
 1825|     48|}
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE10value_initIJRKS8_EEEvhPSC_DpOT_:
  984|     48|  void value_init(const field_type i, allocator_type *alloc, Args &&...args) {
  985|     48|    next_generation();
  986|     48|    absl::container_internal::SanitizerUnpoisonObject(slot(i));
  987|     48|    params_type::construct(alloc, slot(i), std::forward<Args>(args)...);
  988|     48|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EppEv:
 1198|     37|  btree_iterator &operator++() {
 1199|     37|    increment();
 1200|     37|    return *this;
 1201|     37|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E9incrementEv:
 1279|     37|  void increment() {
 1280|     37|    assert_valid_generation(node_);
 1281|     37|    if (node_->is_leaf() && ++position_ < node_->finish()) {
  ------------------
  |  Branch (1281:9): [True: 32, False: 5]
  |  Branch (1281:29): [True: 25, False: 7]
  ------------------
 1282|     25|      return;
 1283|     25|    }
 1284|     12|    increment_slow();
 1285|     12|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E14increment_slowEv:
 2135|     12|void btree_iterator<N, R, P>::increment_slow() {
 2136|     12|  if (node_->is_leaf()) {
  ------------------
  |  Branch (2136:7): [True: 7, False: 5]
  ------------------
 2137|      7|    assert(position_ >= node_->finish());
 2138|      7|    btree_iterator save(*this);
 2139|     13|    while (position_ == node_->finish() && !node_->is_root()) {
  ------------------
  |  Branch (2139:12): [True: 8, False: 5]
  |  Branch (2139:44): [True: 6, False: 2]
  ------------------
 2140|      6|      assert(node_->parent()->child(node_->position()) == node_);
 2141|      6|      position_ = node_->position();
 2142|      6|      node_ = node_->parent();
 2143|      6|    }
 2144|       |    // TODO(ezb): assert we aren't incrementing end() instead of handling.
 2145|      7|    if (position_ == node_->finish()) {
  ------------------
  |  Branch (2145:9): [True: 2, False: 5]
  ------------------
 2146|      2|      *this = save;
 2147|      2|    }
 2148|      7|  } else {
 2149|      5|    assert(position_ < node_->finish());
 2150|      5|    node_ = node_->child(static_cast<field_type>(position_ + 1));
 2151|      5|    while (node_->is_internal()) {
  ------------------
  |  Branch (2151:12): [True: 0, False: 5]
  ------------------
 2152|      0|      node_ = node_->start_child();
 2153|      0|    }
 2154|      5|    position_ = node_->start();
 2155|      5|  }
 2156|     12|}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13insert_uniqueIS8_JRKS8_EEENSA_4pairINS1_14btree_iteratorINS1_10btree_nodeISD_EESH_PSG_EEbEERKT_DpOT0_:
 2278|     11|    -> std::pair<iterator, bool> {
 2279|     11|  if (empty()) {
  ------------------
  |  Branch (2279:7): [True: 3, False: 8]
  ------------------
 2280|      3|    mutable_root() = mutable_rightmost() = new_leaf_root_node(1);
 2281|      3|  }
 2282|       |
 2283|     11|  SearchResult<iterator, is_key_compare_to::value> res = internal_locate(key);
 2284|     11|  iterator iter = res.value;
 2285|       |
 2286|     11|  if (res.HasMatch()) {
  ------------------
  |  Branch (2286:7): [Folded, False: 11]
  ------------------
 2287|      0|    if (res.IsEq()) {
  ------------------
  |  Branch (2287:9): [Folded, False: 0]
  ------------------
 2288|       |      // The key already exists in the tree, do nothing.
 2289|      0|      return {iter, false};
 2290|      0|    }
 2291|     11|  } else {
 2292|     11|    iterator last = internal_last(iter);
 2293|     11|    if (last.node_ && !compare_keys(key, last.key())) {
  ------------------
  |  Branch (2293:9): [True: 8, False: 3]
  |  Branch (2293:23): [True: 0, False: 8]
  ------------------
 2294|       |      // The key already exists in the tree, do nothing.
 2295|      0|      return {last, false};
 2296|      0|    }
 2297|     11|  }
 2298|     11|  return {internal_emplace(iter, std::forward<Args>(args)...), true};
 2299|     11|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE15internal_locateIS8_EENS1_12SearchResultINS1_14btree_iteratorINS1_10btree_nodeISD_EERKS8_PSK_EELb0EEERKT_:
 2898|     11|    -> SearchResult<iterator, is_key_compare_to::value> {
 2899|     11|  iterator iter(const_cast<node_type *>(root()));
 2900|     15|  for (;;) {
 2901|     15|    SearchResult<size_type, is_key_compare_to::value> res =
 2902|     15|        iter.node_->lower_bound(key, key_comp());
 2903|     15|    iter.position_ = static_cast<int>(res.value);
 2904|     15|    if (res.IsEq()) {
  ------------------
  |  Branch (2904:9): [Folded, False: 15]
  ------------------
 2905|      0|      return {iter, MatchKind::kEq};
 2906|      0|    }
 2907|       |    // Note: in the non-key-compare-to case, we don't need to walk all the way
 2908|       |    // down the tree if the keys are equal, but determining equality would
 2909|       |    // require doing an extra comparison on each node on the way down, and we
 2910|       |    // will need to go all the way to the leaf node in the expected case.
 2911|     15|    if (iter.node_->is_leaf()) {
  ------------------
  |  Branch (2911:9): [True: 11, False: 4]
  ------------------
 2912|     11|      break;
 2913|     11|    }
 2914|      4|    iter.node_ = iter.node_->child(static_cast<field_type>(iter.position_));
 2915|      4|  }
 2916|       |  // Note: in the non-key-compare-to case, the key may actually be equivalent
 2917|       |  // here (and the MatchKind::kNe is ignored).
 2918|     11|  return {iter, MatchKind::kNe};
 2919|     11|}
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE11lower_boundIS8_EENS1_12SearchResultImLb0EEERKT_RKNS1_19key_compare_adapterIS9_S8_E15checked_compareE:
  781|     15|      const K &k, const key_compare &comp) const {
  782|     15|    return use_linear_search::value ? linear_search(k, comp)
  ------------------
  |  Branch (782:12): [Folded, False: 15]
  ------------------
  783|     15|                                    : binary_search(k, comp);
  784|     15|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE13binary_searchIS8_NS1_19key_compare_adapterIS9_S8_E15checked_compareEEENS1_12SearchResultImXsr23btree_is_key_compare_toIT0_S8_EE5valueEEERKT_RKSK_:
  802|     15|  binary_search(const K &k, const Compare &comp) const {
  803|     15|    return binary_search_impl(k, start(), finish(), comp,
  804|     15|                              btree_is_key_compare_to<Compare, key_type>());
  805|     15|  }
_ZNK4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE18binary_search_implIS8_NS1_19key_compare_adapterIS9_S8_E15checked_compareEEENS1_12SearchResultImLb0EEERKT_mmRKT0_NSA_17integral_constantIbLb0EEE:
  845|     15|      std::false_type /* IsCompareTo */) const {
  846|     33|    while (s != e) {
  ------------------
  |  Branch (846:12): [True: 18, False: 15]
  ------------------
  847|     18|      const size_type mid = (s + e) >> 1;
  848|     18|      if (comp(key(mid), k)) {
  ------------------
  |  Branch (848:11): [True: 0, False: 18]
  ------------------
  849|      0|        s = mid + 1;
  850|     18|      } else {
  851|     18|        e = mid;
  852|     18|      }
  853|     18|    }
  854|     15|    return SearchResult<size_type, false>{s};
  855|     15|  }
_ZN4absl12lts_2024011618container_internal12SearchResultINS1_14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS9_13SymbolCompareENSt3__19allocatorISA_EELi256ELb0EEEEERKSA_PSH_EELb0EEC2ESK_NS1_9MatchKindE:
  480|     11|  SearchResult(V v, MatchKind /*match*/) : value(v) {}
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EC2IKSF_SH_SI_TnNSB_9enable_ifIXaasr3std7is_sameINS2_IT_T0_T1_EENS2_ISL_SH_SI_EEEE5valueL_ZNSB_17integral_constantIbLb1EE5valueEEEiE4typeELi0EEESQ_:
 1244|     48|      : btree_iterator_generation_info(other.generation()),
 1245|     48|        node_(const_cast<node_type *>(other.node_)),
 1246|     48|        position_(other.position_) {}
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EneERKSJ_:
 1168|      8|  bool operator!=(const iterator &other) const {
 1169|      8|    return !Equals(other);
 1170|      8|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E6EqualsENS2_IKSF_SH_SI_EE:
 1248|      8|  bool Equals(const const_iterator other) const {
 1249|      8|    ABSL_HARDENING_ASSERT(((node_ == nullptr && other.node_ == nullptr) ||
  ------------------
  |  |  128|      8|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      8|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 8]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1250|      8|                           (node_ != nullptr && other.node_ != nullptr)) &&
 1251|      8|                          "Comparing default-constructed iterator with "
 1252|      8|                          "non-default-constructed iterator.");
 1253|       |    // Note: we use assert instead of ABSL_HARDENING_ASSERT here because this
 1254|       |    // changes the complexity of Equals from O(1) to O(log(N) + log(M)) where
 1255|       |    // N/M are sizes of the containers containing node_/other.node_.
 1256|      8|    assert(AreNodesFromSameContainer(node_, other.node_) &&
 1257|      8|           "Comparing iterators from different containers.");
 1258|      8|    assert_valid_generation(node_);
 1259|      8|    other.assert_valid_generation(other.node_);
 1260|      8|    return node_ == other.node_ && position_ == other.position_;
  ------------------
  |  Branch (1260:12): [True: 8, False: 0]
  |  Branch (1260:36): [True: 2, False: 6]
  ------------------
 1261|      8|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EC2ISF_SI_SJ_TnNSB_9enable_ifIXaasr3std7is_sameINS2_IT_T0_T1_EENS2_ISF_SI_SJ_EEEE5valueL_ZNSB_17integral_constantIbLb1EE5valueEEEiE4typeELi0EEESQ_:
 1158|      8|      : btree_iterator_generation_info(other),
 1159|      8|        node_(other.node_),
 1160|      8|        position_(other.position_) {}
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EdeEv:
 1186|      6|  reference operator*() const {
 1187|      6|    ABSL_HARDENING_ASSERT(node_ != nullptr);
  ------------------
  |  |  128|      6|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      6|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|      6|    assert_valid_generation(node_);
 1189|      6|    ABSL_HARDENING_ASSERT(position_ >= node_->start());
  ------------------
  |  |  128|      6|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      6|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|      6|    if (position_ >= node_->finish()) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 6]
  ------------------
 1191|      0|      ABSL_HARDENING_ASSERT(!IsEndIterator() && "Dereferencing end() iterator");
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1192|      0|      ABSL_HARDENING_ASSERT(position_ < node_->finish());
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1193|      0|    }
 1194|      6|    return node_->value(static_cast<field_type>(position_));
 1195|      6|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5valueEm:
  753|      6|  reference value(size_type i) { return params_type::element(slot(i)); }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EppEv:
 1198|      4|  btree_iterator &operator++() {
 1199|      4|    increment();
 1200|      4|    return *this;
 1201|      4|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E9incrementEv:
 1279|      4|  void increment() {
 1280|      4|    assert_valid_generation(node_);
 1281|      4|    if (node_->is_leaf() && ++position_ < node_->finish()) {
  ------------------
  |  Branch (1281:9): [True: 4, False: 0]
  |  Branch (1281:29): [True: 2, False: 2]
  ------------------
 1282|      2|      return;
 1283|      2|    }
 1284|      2|    increment_slow();
 1285|      2|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E14increment_slowEv:
 2135|      2|void btree_iterator<N, R, P>::increment_slow() {
 2136|      2|  if (node_->is_leaf()) {
  ------------------
  |  Branch (2136:7): [True: 2, False: 0]
  ------------------
 2137|      2|    assert(position_ >= node_->finish());
 2138|      2|    btree_iterator save(*this);
 2139|      2|    while (position_ == node_->finish() && !node_->is_root()) {
  ------------------
  |  Branch (2139:12): [True: 2, False: 0]
  |  Branch (2139:44): [True: 0, False: 2]
  ------------------
 2140|      0|      assert(node_->parent()->child(node_->position()) == node_);
 2141|      0|      position_ = node_->position();
 2142|      0|      node_ = node_->parent();
 2143|      0|    }
 2144|       |    // TODO(ezb): assert we aren't incrementing end() instead of handling.
 2145|      2|    if (position_ == node_->finish()) {
  ------------------
  |  Branch (2145:9): [True: 2, False: 0]
  ------------------
 2146|      2|      *this = save;
 2147|      2|    }
 2148|      2|  } else {
 2149|      0|    assert(position_ < node_->finish());
 2150|      0|    node_ = node_->child(static_cast<field_type>(position_ + 1));
 2151|      0|    while (node_->is_internal()) {
  ------------------
  |  Branch (2151:12): [True: 0, False: 0]
  ------------------
 2152|      0|      node_ = node_->start_child();
 2153|      0|    }
 2154|      0|    position_ = node_->start();
 2155|      0|  }
 2156|      2|}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5beginEv:
 1436|      2|  iterator begin() { return iterator(leftmost()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8leftmostEv:
 1672|      2|  node_type *leftmost() { return root()->parent(); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE3endEv:
 1438|      2|  iterator end() { return iterator(rightmost(), rightmost()->finish()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5clearEv:
 2577|      2|void btree<P>::clear() {
 2578|      2|  if (!empty()) {
  ------------------
  |  Branch (2578:7): [True: 2, False: 0]
  ------------------
 2579|      2|    node_type::clear_and_delete(root(), mutable_allocator());
 2580|      2|  }
 2581|      2|  mutable_root() = mutable_rightmost() = EmptyNode();
 2582|      2|  size_ = 0;
 2583|      2|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4sizeEv:
 1581|      2|  size_type size() const { return size_; }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EneERKSJ_:
 1168|     65|  bool operator!=(const iterator &other) const {
 1169|     65|    return !Equals(other);
 1170|     65|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EdeEv:
 1186|     64|  reference operator*() const {
 1187|     64|    ABSL_HARDENING_ASSERT(node_ != nullptr);
  ------------------
  |  |  128|     64|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|     64|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 64]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|     64|    assert_valid_generation(node_);
 1189|     64|    ABSL_HARDENING_ASSERT(position_ >= node_->start());
  ------------------
  |  |  128|     64|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|     64|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 64]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|     64|    if (position_ >= node_->finish()) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 64]
  ------------------
 1191|      0|      ABSL_HARDENING_ASSERT(!IsEndIterator() && "Dereferencing end() iterator");
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1192|      0|      ABSL_HARDENING_ASSERT(position_ < node_->finish());
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1193|      0|    }
 1194|     64|    return node_->value(static_cast<field_type>(position_));
 1195|     64|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5valueEm:
  753|     64|  reference value(size_type i) { return params_type::element(slot(i)); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS7_13SymbolCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5clearEv:
 2577|      2|void btree<P>::clear() {
 2578|      2|  if (!empty()) {
  ------------------
  |  Branch (2578:7): [True: 2, False: 0]
  ------------------
 2579|      2|    node_type::clear_and_delete(root(), mutable_allocator());
 2580|      2|  }
 2581|      2|  mutable_root() = mutable_rightmost() = EmptyNode();
 2582|      2|  size_ = 0;
 2583|      2|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4sizeEv:
 1581|      1|  size_type size() const { return size_; }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EneERKSJ_:
 1168|      3|  bool operator!=(const iterator &other) const {
 1169|      3|    return !Equals(other);
 1170|      3|  }
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E6EqualsENS2_IKSF_SH_SI_EE:
 1248|      3|  bool Equals(const const_iterator other) const {
 1249|      3|    ABSL_HARDENING_ASSERT(((node_ == nullptr && other.node_ == nullptr) ||
  ------------------
  |  |  128|      3|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      3|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 3]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1250|      3|                           (node_ != nullptr && other.node_ != nullptr)) &&
 1251|      3|                          "Comparing default-constructed iterator with "
 1252|      3|                          "non-default-constructed iterator.");
 1253|       |    // Note: we use assert instead of ABSL_HARDENING_ASSERT here because this
 1254|       |    // changes the complexity of Equals from O(1) to O(log(N) + log(M)) where
 1255|       |    // N/M are sizes of the containers containing node_/other.node_.
 1256|      3|    assert(AreNodesFromSameContainer(node_, other.node_) &&
 1257|      3|           "Comparing iterators from different containers.");
 1258|      3|    assert_valid_generation(node_);
 1259|      3|    other.assert_valid_generation(other.node_);
 1260|      3|    return node_ == other.node_ && position_ == other.position_;
  ------------------
  |  Branch (1260:12): [True: 3, False: 0]
  |  Branch (1260:36): [True: 1, False: 2]
  ------------------
 1261|      3|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorIKNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSH_EC2ISF_SI_SJ_TnNSB_9enable_ifIXaasr3std7is_sameINS2_IT_T0_T1_EENS2_ISF_SI_SJ_EEEE5valueL_ZNSB_17integral_constantIbLb1EE5valueEEEiE4typeELi0EEESQ_:
 1158|      3|      : btree_iterator_generation_info(other),
 1159|      3|        node_(other.node_),
 1160|      3|        position_(other.position_) {}
_ZNK4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EdeEv:
 1186|      1|  reference operator*() const {
 1187|      1|    ABSL_HARDENING_ASSERT(node_ != nullptr);
  ------------------
  |  |  128|      1|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      1|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1188|      1|    assert_valid_generation(node_);
 1189|      1|    ABSL_HARDENING_ASSERT(position_ >= node_->start());
  ------------------
  |  |  128|      1|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      1|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1190|      1|    if (position_ >= node_->finish()) {
  ------------------
  |  Branch (1190:9): [True: 0, False: 1]
  ------------------
 1191|      0|      ABSL_HARDENING_ASSERT(!IsEndIterator() && "Dereferencing end() iterator");
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1192|      0|      ABSL_HARDENING_ASSERT(position_ < node_->finish());
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1193|      0|    }
 1194|      1|    return node_->value(static_cast<field_type>(position_));
 1195|      1|  }
_ZN4absl12lts_2024011618container_internal10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5valueEm:
  753|      1|  reference value(size_type i) { return params_type::element(slot(i)); }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_EppEv:
 1198|      1|  btree_iterator &operator++() {
 1199|      1|    increment();
 1200|      1|    return *this;
 1201|      1|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E9incrementEv:
 1279|      1|  void increment() {
 1280|      1|    assert_valid_generation(node_);
 1281|      1|    if (node_->is_leaf() && ++position_ < node_->finish()) {
  ------------------
  |  Branch (1281:9): [True: 1, False: 0]
  |  Branch (1281:29): [True: 0, False: 1]
  ------------------
 1282|      0|      return;
 1283|      0|    }
 1284|      1|    increment_slow();
 1285|      1|  }
_ZN4absl12lts_2024011618container_internal14btree_iteratorINS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEERKS9_PSG_E14increment_slowEv:
 2135|      1|void btree_iterator<N, R, P>::increment_slow() {
 2136|      1|  if (node_->is_leaf()) {
  ------------------
  |  Branch (2136:7): [True: 1, False: 0]
  ------------------
 2137|      1|    assert(position_ >= node_->finish());
 2138|      1|    btree_iterator save(*this);
 2139|      1|    while (position_ == node_->finish() && !node_->is_root()) {
  ------------------
  |  Branch (2139:12): [True: 1, False: 0]
  |  Branch (2139:44): [True: 0, False: 1]
  ------------------
 2140|      0|      assert(node_->parent()->child(node_->position()) == node_);
 2141|      0|      position_ = node_->position();
 2142|      0|      node_ = node_->parent();
 2143|      0|    }
 2144|       |    // TODO(ezb): assert we aren't incrementing end() instead of handling.
 2145|      1|    if (position_ == node_->finish()) {
  ------------------
  |  Branch (2145:9): [True: 1, False: 0]
  ------------------
 2146|      1|      *this = save;
 2147|      1|    }
 2148|      1|  } else {
 2149|      0|    assert(position_ < node_->finish());
 2150|      0|    node_ = node_->child(static_cast<field_type>(position_ + 1));
 2151|      0|    while (node_->is_internal()) {
  ------------------
  |  Branch (2151:12): [True: 0, False: 0]
  ------------------
 2152|      0|      node_ = node_->start_child();
 2153|      0|    }
 2154|      0|    position_ = node_->start();
 2155|      0|  }
 2156|      1|}
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5beginEv:
 1436|      1|  iterator begin() { return iterator(leftmost()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE8leftmostEv:
 1672|      1|  node_type *leftmost() { return root()->parent(); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE3endEv:
 1438|      1|  iterator end() { return iterator(rightmost(), rightmost()->finish()); }
_ZN4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS7_16ExtensionCompareENSt3__19allocatorIS8_EELi256ELb0EEEE5clearEv:
 2577|      1|void btree<P>::clear() {
 2578|      1|  if (!empty()) {
  ------------------
  |  Branch (2578:7): [True: 1, False: 0]
  ------------------
 2579|      1|    node_type::clear_and_delete(root(), mutable_allocator());
 2580|      1|  }
 2581|      1|  mutable_root() = mutable_rightmost() = EmptyNode();
 2582|      1|  size_ = 0;
 2583|      1|}
_ZNK4absl12lts_2024011618container_internal5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS7_11FileCompareENSt3__19allocatorIS8_EELi256ELb0EEEE4sizeEv:
 1581|      2|  size_type size() const { return size_; }

_ZN4absl12lts_2024011618container_internal19btree_map_containerINS1_5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEEEC2Ev:
  465|      2|  btree_map_container() {}
_ZN4absl12lts_2024011618container_internal19btree_set_containerINS1_5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEEEC2Ev:
  303|      2|  btree_set_container() {}
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEEEC2Ev:
   74|      2|  btree_container() : tree_(key_compare(), allocator_type()) {}
_ZN4absl12lts_2024011618container_internal19btree_set_containerINS1_5btreeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEEE6insertEOSK_:
  333|      1|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  334|      1|    return this->tree_.insert_unique(params_type::key(v), std::move(v));
  335|      1|  }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEC2ERKSA_RKSD_:
   77|      2|      : tree_(comp, alloc) {}
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEC2ERKSA_RKSD_:
   77|      2|      : tree_(comp, alloc) {}
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEC2ERKSA_RKSD_:
   77|      2|      : tree_(comp, alloc) {}
_ZN4absl12lts_2024011618container_internal19btree_set_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE6insertEOS9_:
  333|      6|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  334|      6|    return this->tree_.insert_unique(params_type::key(v), std::move(v));
  335|      6|  }
_ZN4absl12lts_2024011618container_internal19btree_set_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE6insertEOS9_:
  333|      1|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  334|      1|    return this->tree_.insert_unique(params_type::key(v), std::move(v));
  335|      1|  }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE11upper_boundIS9_EENS1_14btree_iteratorIKNS1_10btree_nodeISE_EERKS9_PSM_EERSM_:
  163|     48|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  164|     48|    return tree_.upper_bound(key);
  165|     48|  }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5beginEv:
   99|     48|  const_iterator begin() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  100|     48|    return tree_.begin();
  101|     48|  }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE3endEv:
  105|     50|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.end(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE8key_compEv:
  260|     50|  key_compare key_comp() const { return key_compare(tree_.key_comp()); }
_ZN4absl12lts_2024011618container_internal19btree_set_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE6insertENS1_14btree_iteratorIKNS1_10btree_nodeISE_EERKS9_PSL_EESM_:
  346|     48|                  const value_type &v) ABSL_ATTRIBUTE_LIFETIME_BOUND {
  347|     48|    return this->tree_
  348|     48|        .insert_hint_unique(iterator(hint), params_type::key(v), v)
  349|     48|        .first;
  350|     48|  }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE8key_compEv:
  260|      2|  key_compare key_comp() const { return key_compare(tree_.key_comp()); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5emptyEv:
  229|      4|  bool empty() const { return tree_.empty(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5beginEv:
   98|      2|  iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.begin(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE3endEv:
  105|      2|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.end(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5clearEv:
  222|      2|  ABSL_ATTRIBUTE_REINITIALIZES void clear() { tree_.clear(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5emptyEv:
  229|      4|  bool empty() const { return tree_.empty(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE4sizeEv:
  227|      2|  size_type size() const { return tree_.size(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5beginEv:
   98|      2|  iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.begin(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5clearEv:
  222|      2|  ABSL_ATTRIBUTE_REINITIALIZES void clear() { tree_.clear(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5emptyEv:
  229|      4|  bool empty() const { return tree_.empty(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE4sizeEv:
  227|      1|  size_type size() const { return tree_.size(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5beginEv:
   98|      1|  iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.begin(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE3endEv:
  105|      1|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.end(); }
_ZN4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE5clearEv:
  222|      1|  ABSL_ATTRIBUTE_REINITIALIZES void clear() { tree_.clear(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE4sizeEv:
  227|      2|  size_type size() const { return tree_.size(); }
_ZNK4absl12lts_2024011618container_internal15btree_containerINS1_5btreeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEE8key_compEv:
  260|     12|  key_compare key_comp() const { return key_compare(tree_.key_comp()); }

_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE7elementIS7_EEDTclsrT_7elementfp_EEPS6_:
   75|   129k|      -> decltype(P::element(slot)) {
   76|   129k|    return P::element(slot);
   77|   129k|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPS8_:
   75|     12|      -> decltype(P::element(slot)) {
   76|     12|    return P::element(slot);
   77|     12|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPS8_:
   75|    298|      -> decltype(P::element(slot)) {
   76|    298|    return P::element(slot);
   77|    298|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPS8_:
   75|     42|      -> decltype(P::element(slot)) {
   76|     42|    return P::element(slot);
   77|     42|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEvE7destroyINS4_9allocatorIS8_EEEEvPT_PS8_:
   49|      3|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|      3|    Policy::destroy(alloc, slot);
   51|      3|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE7elementISF_EEDTclsrT_7elementfp_EEPNS1_13map_slot_typeISA_SE_EE:
   75|     37|      -> decltype(P::element(slot)) {
   76|     37|    return P::element(slot);
   77|     37|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE8transferINS8_INS4_4pairIKSA_SE_EEEEEEvPT_PNS1_13map_slot_typeISA_SE_EESQ_:
   65|     50|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|     50|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|     50|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE13transfer_implINS8_INS4_4pairIKSA_SE_EEEESF_EEDTclsrT0_8transferfp_fp0_fp1_EEPT_PNS1_13map_slot_typeISA_SE_EESS_NSG_5Rank0E:
  101|     50|      -> decltype(P::transfer(alloc, new_slot, old_slot)) {
  102|     50|    return P::transfer(alloc, new_slot, old_slot);
  103|     50|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE9constructINS8_INS4_4pairIKSA_SE_EEEEJRKNS4_21piecewise_construct_tENS4_5tupleIJRSJ_EEENSP_IJRKSE_EEEEEEvPT_PNS1_13map_slot_typeISA_SE_EEDpOT0_:
   42|     32|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|     32|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|     32|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE8transferINSt3__19allocatorIS8_EEEEvPT_PS8_SH_:
   65|     14|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|     14|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|     14|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE13transfer_implINSt3__19allocatorIS8_EEvEENSC_17integral_constantIbLb1EEEPT_PS8_SJ_NSA_5Rank1E:
  111|     14|                                      slot_type* old_slot, Rank1) {
  112|       |    // TODO(b/247130232): remove casts after fixing warnings.
  113|       |    // TODO(b/251814870): remove casts after fixing warnings.
  114|     14|    std::memcpy(
  115|     14|        static_cast<void*>(std::launder(
  116|     14|            const_cast<std::remove_const_t<value_type>*>(&element(new_slot)))),
  117|     14|        static_cast<const void*>(&element(old_slot)), sizeof(value_type));
  118|     14|    return {};
  119|     14|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE9constructINSt3__19allocatorIS8_EEJRKPS6_EEEvPT_PS8_DpOT0_:
   42|     15|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|     15|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|     15|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE8transferINSt3__19allocatorIS6_EEEEvPT_PS6_SF_:
   65|    910|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|    910|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|    910|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE13transfer_implINSt3__19allocatorIS6_EEvEENSA_17integral_constantIbLb1EEEPT_PS6_SH_NS8_5Rank1E:
  111|    910|                                      slot_type* old_slot, Rank1) {
  112|       |    // TODO(b/247130232): remove casts after fixing warnings.
  113|       |    // TODO(b/251814870): remove casts after fixing warnings.
  114|    910|    std::memcpy(
  115|    910|        static_cast<void*>(std::launder(
  116|    910|            const_cast<std::remove_const_t<value_type>*>(&element(new_slot)))),
  117|    910|        static_cast<const void*>(&element(old_slot)), sizeof(value_type));
  118|    910|    return {};
  119|    910|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE9constructINSt3__19allocatorIS6_EEJRKS6_EEEvPT_PS6_DpOT0_:
   42|    805|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|    805|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|    805|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvE9constructINSt3__19allocatorIS8_EEJRKS8_EEEvPT_PS8_DpOT0_:
   42|      4|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      4|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE8transferINSt3__19allocatorIS8_EEEEvPT_PS8_SH_:
   65|     98|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|     98|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|     98|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE13transfer_implINSt3__19allocatorIS8_EEvEENSC_17integral_constantIbLb1EEEPT_PS8_SJ_NSA_5Rank1E:
  111|     98|                                      slot_type* old_slot, Rank1) {
  112|       |    // TODO(b/247130232): remove casts after fixing warnings.
  113|       |    // TODO(b/251814870): remove casts after fixing warnings.
  114|     98|    std::memcpy(
  115|     98|        static_cast<void*>(std::launder(
  116|     98|            const_cast<std::remove_const_t<value_type>*>(&element(new_slot)))),
  117|     98|        static_cast<const void*>(&element(old_slot)), sizeof(value_type));
  118|     98|    return {};
  119|     98|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE9constructINSt3__19allocatorIS8_EEJRKPS6_EEEvPT_PS8_DpOT0_:
   42|    100|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|    100|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|    100|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15map_slot_policyINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorEEEvE9constructINS4_9allocatorINS5_IKSB_SE_EEEEJSK_EEEvPT_PNS1_13map_slot_typeISB_SE_EEDpOT0_:
   42|      1|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      1|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      1|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15map_slot_policyINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorEEEvE7elementISF_EEDTclsrT_7elementfp_EEPNS1_13map_slot_typeISB_SE_EE:
   75|      1|      -> decltype(P::element(slot)) {
   76|      1|    return P::element(slot);
   77|      1|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEEvE7elementISI_EEDTclsrT_7elementfp_EEPNS1_13map_slot_typeISA_SH_EE:
   75|    416|      -> decltype(P::element(slot)) {
   76|    416|    return P::element(slot);
   77|    416|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEEvE8transferINS8_INS4_4pairIKSA_SH_EEEEEEvPT_PNS1_13map_slot_typeISA_SH_EEST_:
   65|      4|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|      4|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEEvE13transfer_implINS8_INS4_4pairIKSA_SH_EEEESI_EEDTclsrT0_8transferfp_fp0_fp1_EEPT_PNS1_13map_slot_typeISA_SH_EESV_NSJ_5Rank0E:
  101|      4|      -> decltype(P::transfer(alloc, new_slot, old_slot)) {
  102|      4|    return P::transfer(alloc, new_slot, old_slot);
  103|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEEvE9constructINS8_INS4_4pairIKSA_SH_EEEEJRKNS4_21piecewise_construct_tENS4_5tupleIJOSA_EEENSS_IJEEEEEEvPT_PNS1_13map_slot_typeISA_SH_EEDpOT0_:
   42|      4|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      4|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      4|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEvE9constructINS4_9allocatorIS8_EEJRKNS4_12basic_stringIcS7_NSC_IcEEEEEEEvPT_PS8_DpOT0_:
   42|      3|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      3|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      3|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvE8transferINSt3__19allocatorIS8_EEEEvPT_PS8_SH_:
   65|      7|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|      7|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|      7|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvE13transfer_implINSt3__19allocatorIS8_EEEEvPT_PS8_SH_NSA_5Rank2E:
  124|      7|                            slot_type* old_slot, Rank2) {
  125|      7|    construct(alloc, new_slot, std::move(element(old_slot)));
  126|      7|    destroy(alloc, old_slot);
  127|      7|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvE9constructINSt3__19allocatorIS8_EEJS8_EEEvPT_PS8_DpOT0_:
   42|     13|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|     13|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|     13|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPS8_:
   75|     13|      -> decltype(P::element(slot)) {
   76|     13|    return P::element(slot);
   77|     13|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvE7destroyINSt3__19allocatorIS8_EEEEvPT_PS8_:
   49|     11|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|     11|    Policy::destroy(alloc, slot);
   51|     11|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEvE9constructINSt3__19allocatorIS8_EEJS8_EEEvPT_PS8_DpOT0_:
   42|      1|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      1|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      1|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPS8_:
   75|      1|      -> decltype(P::element(slot)) {
   76|      1|    return P::element(slot);
   77|      1|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEvE7destroyINSt3__19allocatorIS8_EEEEvPT_PS8_:
   49|      1|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|      1|    Policy::destroy(alloc, slot);
   51|      1|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPKS8_:
   79|     83|  static auto element(const slot_type* slot) -> decltype(P::element(slot)) {
   80|     83|    return P::element(slot);
   81|     83|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE8transferINSt3__19allocatorIS8_EEEEvPT_PS8_SH_:
   65|    183|  static void transfer(Alloc* alloc, slot_type* new_slot, slot_type* old_slot) {
   66|    183|    transfer_impl(alloc, new_slot, old_slot, Rank0{});
   67|    183|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE13transfer_implINSt3__19allocatorIS8_EEEEvPT_PS8_SH_NSA_5Rank2E:
  124|    183|                            slot_type* old_slot, Rank2) {
  125|    183|    construct(alloc, new_slot, std::move(element(old_slot)));
  126|    183|    destroy(alloc, old_slot);
  127|    183|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE9constructINSt3__19allocatorIS8_EEJS8_EEEvPT_PS8_DpOT0_:
   42|    183|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|    183|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|    183|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE7elementIS9_EEDTclsrT_7elementfp_EEPS8_:
   75|    247|      -> decltype(P::element(slot)) {
   76|    247|    return P::element(slot);
   77|    247|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE7destroyINSt3__19allocatorIS8_EEEEvPT_PS8_:
   49|    226|  static void destroy(Alloc* alloc, slot_type* slot) {
   50|    226|    Policy::destroy(alloc, slot);
   51|    226|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE9constructINSt3__19allocatorIS8_EEJPS8_EEEvPT_SF_DpOT0_:
   42|      6|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      6|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      6|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_15set_slot_policyIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvE9constructINSt3__19allocatorIS8_EEJRKS8_EEEvPT_PS8_DpOT0_:
   42|     48|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|     48|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|     48|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEEvE7elementIS8_EEDTclsrT_7elementfp_EEPS7_:
   75|     16|      -> decltype(P::element(slot)) {
   76|     16|    return P::element(slot);
   77|     16|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEEvE9constructINSt3__19allocatorIS7_EEJRKS7_EEEvPT_PS7_DpOT0_:
   42|      1|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      1|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      1|  }
message.cc:_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEvE7elementISC_EEDTclsrT_7elementfp_EEPNS1_13map_slot_typeIS8_SB_EE:
   75|  7.97k|      -> decltype(P::element(slot)) {
   76|  7.97k|    return P::element(slot);
   77|  7.97k|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEEvE7elementISA_EEDTclsrT_7elementfp_EEPS9_:
   75|      2|      -> decltype(P::element(slot)) {
   76|      2|    return P::element(slot);
   77|      2|  }
_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEEvE9constructINSt3__19allocatorIS9_EEJRKS9_EEEvPT_PS9_DpOT0_:
   42|      6|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|      6|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|      6|  }
message.cc:_ZN4absl12lts_2024011618container_internal20common_policy_traitsINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEvE9constructINSt3__19allocatorINSF_4pairIKS8_SB_EEEEJRKNSF_21piecewise_construct_tENSF_5tupleIJRSI_EEENSO_IJRPKNS5_7MessageEEEEEEEvPT_PNS1_13map_slot_typeIS8_SB_EEDpOT0_:
   42|     10|  static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
   43|     10|    Policy::construct(alloc, slot, std::forward<Args>(args)...);
   44|     10|  }

_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageImLm1ELb0EE3getEv:
   92|     24|  T& get() & { return value; }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageImLm1ELb0EE3getEv:
   91|     48|  constexpr const T& get() const& { return value; }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_12CommonFieldsELm0ELb0EE3getEv:
   91|   412k|  constexpr const T& get() const& { return value; }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_12CommonFieldsELm0ELb0EE3getEv:
   92|   152k|  T& get() & { return value; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISI_EEEEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISO_XT_EE4typeEv:
  246|  1.07k|  constexpr const ElemT<I>& get() const& {
  247|  1.07k|    return StorageT<I>::get();
  248|  1.07k|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISI_EEEEEEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISO_XT_EE4typeEv:
  241|     11|  ElemT<I>& get() & {
  242|     11|    return StorageT<I>::get();
  243|     11|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISG_EEEEEEEELm3ELb1EE3getEv:
  106|     11|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISI_EEEEEEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISO_XT_EE4typeEv:
  241|    462|  ElemT<I>& get() & {
  242|    462|    return StorageT<I>::get();
  243|    462|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterINSt3__14lessINS4_4pairIPKN6google8protobuf10DescriptorEiEEEESC_E15checked_compareENS4_9allocatorINS6_IKSC_PKNS8_15FieldDescriptorEEEEEPNS1_10btree_nodeINS1_10map_paramsISC_SK_SD_SM_Li256ELb0EEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISS_XT_EE4typeEv:
  241|      2|  ElemT<I>& get() & {
  242|      2|    return StorageT<I>::get();
  243|      2|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS6_IPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorEEEEELm1ELb1EE3getEv:
  106|      2|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterINSt3__14lessINS4_4pairIPKN6google8protobuf10DescriptorEiEEEESC_E15checked_compareENS4_9allocatorINS6_IKSC_PKNS8_15FieldDescriptorEEEEEPNS1_10btree_nodeINS1_10map_paramsISC_SK_SD_SM_Li256ELb0EEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISS_XT_EE4typeEv:
  241|      1|  ElemT<I>& get() & {
  242|      1|    return StorageT<I>::get();
  243|      1|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS9_15FieldDescriptorENS6_4lessISD_EENS6_9allocatorINS7_IKSD_SG_EEEELi256ELb0EEEEELm2ELb0EE3getEv:
   92|      1|  T& get() & { return value; }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  246|    112|  constexpr const ElemT<I>& get() const& {
  247|    112|    return StorageT<I>::get();
  248|    112|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|      7|  ElemT<I>& get() & {
  242|      7|    return StorageT<I>::get();
  243|      7|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf14FileDescriptorEEELm3ELb1EE3getEv:
  106|      7|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|     76|  ElemT<I>& get() & {
  242|     76|    return StorageT<I>::get();
  243|     76|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  246|  3.58k|  constexpr const ElemT<I>& get() const& {
  247|  3.58k|    return StorageT<I>::get();
  248|  3.58k|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|    810|  ElemT<I>& get() & {
  242|    810|    return StorageT<I>::get();
  243|    810|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf6SymbolEEELm3ELb1EE3getEv:
  106|  1.75k|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|  4.37k|  ElemT<I>& get() & {
  242|  4.37k|    return StorageT<I>::get();
  243|  4.37k|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISL_XT_EE4typeEv:
  246|    437|  constexpr const ElemT<I>& get() const& {
  247|    437|    return StorageT<I>::get();
  248|    437|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISL_XT_EE4typeEv:
  241|     84|  ElemT<I>& get() & {
  242|     84|    return StorageT<I>::get();
  243|     84|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEELm3ELb1EE3getEv:
  106|     84|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISL_XT_EE4typeEv:
  241|    527|  ElemT<I>& get() & {
  242|    527|    return StorageT<I>::get();
  243|    527|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  246|     42|  constexpr const ElemT<I>& get() const& {
  247|     42|    return StorageT<I>::get();
  248|     42|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  241|     36|  ElemT<I>& get() & {
  242|     36|    return StorageT<I>::get();
  243|     36|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_19EnumValueDescriptorEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  246|    141|  constexpr const ElemT<I>& get() const& {
  247|    141|    return StorageT<I>::get();
  248|    141|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_19EnumValueDescriptorEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|     35|  ElemT<I>& get() & {
  242|     35|    return StorageT<I>::get();
  243|     35|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf19EnumValueDescriptorEEELm3ELb1EE3getEv:
  106|     35|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_19EnumValueDescriptorEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|    184|  ElemT<I>& get() & {
  242|    184|    return StorageT<I>::get();
  243|    184|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_15FieldDescriptorEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  246|    841|  constexpr const ElemT<I>& get() const& {
  247|    841|    return StorageT<I>::get();
  248|    841|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_15FieldDescriptorEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|    209|  ElemT<I>& get() & {
  242|    209|    return StorageT<I>::get();
  243|    209|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf15FieldDescriptorEEELm3ELb1EE3getEv:
  106|    209|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_15FieldDescriptorEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|  1.13k|  ElemT<I>& get() & {
  242|  1.13k|    return StorageT<I>::get();
  243|  1.13k|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  246|   384k|  constexpr const ElemT<I>& get() const& {
  247|   384k|    return StorageT<I>::get();
  248|   384k|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|    947|  ElemT<I>& get() & {
  242|    947|    return StorageT<I>::get();
  243|    947|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|   132k|  ElemT<I>& get() & {
  242|   132k|    return StorageT<I>::get();
  243|   132k|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NSD_6vectorINS6_14DescriptorPool18DeferredValidation13LifetimesInfoENSE_ISK_EEEEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISP_XT_EE4typeEv:
  246|     14|  constexpr const ElemT<I>& get() const& {
  247|     14|    return StorageT<I>::get();
  248|     14|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashELm1ELb1EE3getEv:
  106|     97|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|    135|  ElemT<I>& get() & {
  242|    135|    return StorageT<I>::get();
  243|    135|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_118SymbolByFullNameEqELm2ELb1EE3getEv:
  106|    135|  T& get() & { return *this; }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  246|    104|  constexpr const ElemT<I>& get() const& {
  247|    104|    return StorageT<I>::get();
  248|    104|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashELm1ELb1EE3getEv:
  105|    104|  constexpr const T& get() const& { return *this; }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NSD_6vectorINS6_14DescriptorPool18DeferredValidation13LifetimesInfoENSE_ISK_EEEEEEEEEEC2IS3_JSB_SC_SO_ETnNSD_9enable_ifIXsr4absl11conjunctionINS0_8negationINSD_7is_sameIFvSP_EFvNSD_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISP_JSW_DpT0_EEEEE5valueEbE4typeELb1EEEOSW_DpOS14_:
  236|      5|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      5|                                             absl::forward<First>(first),
  238|      5|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSC_2EqENSt3__19allocatorINSF_4pairIKSB_NSF_6vectorINS8_14DescriptorPool18DeferredValidation13LifetimesInfoENSG_ISM_EEEEEEEEEEENSF_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SE_SQ_EEENSF_10in_place_tEDpOT_:
  126|     20|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_12CommonFieldsELm0ELb0EEC2IS4_EENSt3__110in_place_tEOT_:
   90|    143|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashELm1ELb1EEC2ISB_EENSt3__110in_place_tEOT_:
  103|     13|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE2EqELm2ELb1EEC2ISB_EENSt3__110in_place_tEOT_:
  103|     13|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKPKN6google8protobuf14FileDescriptorENS4_6vectorINS8_14DescriptorPool18DeferredValidation13LifetimesInfoENS5_ISG_EEEEEEEELm3ELb1EEC2ISK_EENS4_10in_place_tEOT_:
  103|      5|      : T(absl::forward<V>(v)) {}
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_10StringHashELm1ELb1EE3getEv:
  106|    318|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_8StringEqELm2ELb1EE3getEv:
  106|    214|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|      6|  ElemT<I>& get() & {
  242|      6|    return StorageT<I>::get();
  243|      6|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_119DescriptorsByNameEqINS5_14FileDescriptorEEELm2ELb1EE3getEv:
  106|      6|  T& get() & { return *this; }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  246|     14|  constexpr const ElemT<I>& get() const& {
  247|     14|    return StorageT<I>::get();
  248|     14|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEELm1ELb1EE3getEv:
  105|     14|  constexpr const T& get() const& { return *this; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterINSt3__14lessINS4_4pairIPKN6google8protobuf10DescriptorEiEEEESC_E15checked_compareENS4_9allocatorINS6_IKSC_PKNS8_15FieldDescriptorEEEEEPNS1_10btree_nodeINS1_10map_paramsISC_SK_SD_SM_Li256ELb0EEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISS_XT_EE4typeEv:
  246|      1|  constexpr const ElemT<I>& get() const& {
  247|      1|    return StorageT<I>::get();
  248|      1|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterINSt3__14lessINS5_4pairIPKN6google8protobuf10DescriptorEiEEEESD_E15checked_compareELm0ELb1EE3getEv:
  105|      1|  constexpr const T& get() const& { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_15FieldDescriptorEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|      4|  ElemT<I>& get() & {
  242|      4|    return StorageT<I>::get();
  243|      4|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_114ParentNumberEqELm2ELb1EE3getEv:
  106|      4|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|  63.5k|  ElemT<I>& get() & {
  242|  63.5k|    return StorageT<I>::get();
  243|  63.5k|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_116SymbolByParentEqELm2ELb1EE3getEv:
  106|  63.5k|  T& get() & { return *this; }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  246|  63.5k|  constexpr const ElemT<I>& get() const& {
  247|  63.5k|    return StorageT<I>::get();
  248|  63.5k|  }
descriptor.cc:_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_118SymbolByParentHashELm1ELb1EE3getEv:
  105|  63.5k|  constexpr const T& get() const& { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_19EnumValueDescriptorEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|     29|  ElemT<I>& get() & {
  242|     29|    return StorageT<I>::get();
  243|     29|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_116ParentNumberHashELm1ELb1EE3getEv:
  106|    227|  T& get() & { return *this; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS7_9allocatorIiEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISC_XT_EE4typeEv:
  246|      4|  constexpr const ElemT<I>& get() const& {
  247|      4|    return StorageT<I>::get();
  248|      4|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorIS9_EEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISG_XT_EE4typeEv:
  246|    315|  constexpr const ElemT<I>& get() const& {
  247|    315|    return StorageT<I>::get();
  248|    315|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorIS9_EEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISG_XT_EE4typeEv:
  241|    309|  ElemT<I>& get() & {
  242|    309|    return StorageT<I>::get();
  243|    309|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NS6_17DescriptorBuilder12MessageHintsEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISL_XT_EE4typeEv:
  246|      8|  constexpr const ElemT<I>& get() const& {
  247|      8|    return StorageT<I>::get();
  248|      8|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_17basic_string_viewIcNS6_11char_traitsIcEEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  246|  1.28k|  constexpr const ElemT<I>& get() const& {
  247|  1.28k|    return StorageT<I>::get();
  248|  1.28k|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_17basic_string_viewIcNS6_11char_traitsIcEEEEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|     12|  ElemT<I>& get() & {
  242|     12|    return StorageT<I>::get();
  243|     12|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_17basic_string_viewIcNS4_11char_traitsIcEEEEEELm3ELb1EE3getEv:
  106|     12|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_17basic_string_viewIcNS6_11char_traitsIcEEEEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|    630|  ElemT<I>& get() & {
  242|    630|    return StorageT<I>::get();
  243|    630|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_17basic_string_viewIcNS6_11char_traitsIcEEEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|      3|  ElemT<I>& get() & {
  242|      3|    return StorageT<I>::get();
  243|      3|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_17basic_string_viewIcNS6_11char_traitsIcEEEEEEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  246|    291|  constexpr const ElemT<I>& get() const& {
  247|    291|    return StorageT<I>::get();
  248|    291|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_10StringHashELm1ELb1EE3getEv:
  105|    299|  constexpr const T& get() const& { return *this; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashINSt3__16vectorIiNS6_9allocatorIiEEEEEENS6_8equal_toISA_EENS8_INS6_4pairIKSA_iEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISI_XT_EE4typeEv:
  246|      4|  constexpr const ElemT<I>& get() const& {
  247|      4|    return StorageT<I>::get();
  248|      4|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashINSt3__16vectorIiNS6_9allocatorIiEEEEEENS6_8equal_toISA_EENS8_INS6_4pairIKSA_SA_EEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISI_XT_EE4typeEv:
  246|      4|  constexpr const ElemT<I>& get() const& {
  247|      4|    return StorageT<I>::get();
  248|      4|  }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEEEEEC2IS3_JS4_S5_SD_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSE_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISE_JSL_DpT0_EEEEE5valueEbE4typeELb1EEEOSL_DpOST_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SF_EEENS8_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_10StringHashELm1ELb1EEC2IS4_EENSt3__110in_place_tEOT_:
  103|     81|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_8StringEqELm2ELb1EEC2IS4_EENSt3__110in_place_tEOT_:
  103|     81|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEEEELm3ELb1EEC2ISB_EENS4_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorIS9_EEEEC2IS3_JSB_SC_SF_ETnNSD_9enable_ifIXsr4absl11conjunctionINS0_8negationINSD_7is_sameIFvSG_EFvNSD_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISG_JSN_DpT0_EEEEE5valueEbE4typeELb1EEEOSN_DpOSV_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSC_2EqENSt3__19allocatorISB_EEEEENSF_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SE_SH_EEENSF_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashELm1ELb1EEC2ISB_EENSt3__110in_place_tEOT_:
  103|     14|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf10DescriptorEvE2EqELm2ELb1EEC2ISB_EENSt3__110in_place_tEOT_:
  103|     14|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf10DescriptorEEELm3ELb1EEC2ISB_EENS4_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEEC2IS3_JS4_S5_SK_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSL_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISL_JSS_DpT0_EEEEE5valueEbE4typeELb1EEEOSS_DpOS10_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS8_4pairIKNS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SM_EEENS8_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEELm3ELb1EEC2ISI_EENS4_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEEC2IS3_JS7_S8_SC_ETnNS9_9enable_ifIXsr4absl11conjunctionINS0_8negationINS9_7is_sameIFvSD_EFvNS9_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISD_JSK_DpT0_EEEEE5valueEbE4typeELb1EEEOSK_DpOSS_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorINS7_6SymbolEEEEEENSB_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S9_SA_SE_EEENSB_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashELm1ELb1EEC2IS7_EENSt3__110in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_118SymbolByFullNameEqELm2ELb1EEC2IS7_EENSt3__110in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf6SymbolEEELm3ELb1EEC2IS9_EENS4_10in_place_tEOT_:
  103|      6|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEEC2IS3_JS9_SB_SG_ETnNSC_9enable_ifIXsr4absl11conjunctionINS0_8negationINSC_7is_sameIFvSH_EFvNSC_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISH_JSO_DpT0_EEEEE5valueEbE4typeELb1EEEOSO_DpOSW_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS7_14FileDescriptorEEENS8_19DescriptorsByNameEqISA_EENSt3__19allocatorIPKSA_EEEEENSE_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SB_SD_SI_EEENSE_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEELm1ELb1EEC2IS9_EENSt3__110in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_119DescriptorsByNameEqINS5_14FileDescriptorEEELm2ELb1EEC2IS9_EENSt3__110in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf14FileDescriptorEEELm3ELb1EEC2ISB_EENS4_10in_place_tEOT_:
  103|     10|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterINSt3__14lessINS4_4pairIPKN6google8protobuf10DescriptorEiEEEESC_E15checked_compareENS4_9allocatorINS6_IKSC_PKNS8_15FieldDescriptorEEEEEPNS1_10btree_nodeINS1_10map_paramsISC_SK_SD_SM_Li256ELb0EEEEEEEC2IRKSF_JRKSM_SR_ETnNS4_9enable_ifIXsr4absl11conjunctionINS0_8negationINS4_7is_sameIFvSS_EFvNS4_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISS_JS13_DpT0_EEEEE5valueEbE4typeELb1EEEOS13_DpOS1B_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_19key_compare_adapterINSt3__14lessINS6_4pairIPKN6google8protobuf10DescriptorEiEEEESE_E15checked_compareENS6_9allocatorINS8_IKSE_PKNSA_15FieldDescriptorEEEEEPNS1_10btree_nodeINS1_10map_paramsISE_SM_SF_SO_Li256ELb0EEEEEEEENS6_16integer_sequenceImJLm0ELm1ELm2EEEELb1EEC2IJRKSH_RKSO_ST_EEENS6_10in_place_tEDpOT_:
  126|      6|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterINSt3__14lessINS5_4pairIPKN6google8protobuf10DescriptorEiEEEESD_E15checked_compareELm0ELb1EEC2IRKSG_EENS5_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS6_IPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorEEEEELm1ELb1EEC2IRKSI_EENS4_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS9_15FieldDescriptorENS6_4lessISD_EENS6_9allocatorINS7_IKSD_SG_EEEELi256ELb0EEEEELm2ELb0EEC2ISP_EENS6_10in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISI_EEEEEEEEEEC2IS3_JS4_S5_SN_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSO_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISO_JSV_DpT0_EEEEE5valueEbE4typeELb1EEEOSV_DpOS13_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS8_4pairIKNS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEENS8_10unique_ptrIN6google8protobuf10FeatureSetENS8_14default_deleteISK_EEEEEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SP_EEENS8_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISG_EEEEEEEELm3ELb1EEC2ISL_EENS4_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISL_XT_EE4typeEv:
  241|    105|  ElemT<I>& get() & {
  242|    105|    return StorageT<I>::get();
  243|    105|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISL_XT_EE4typeEv:
  241|      8|  ElemT<I>& get() & {
  242|      8|    return StorageT<I>::get();
  243|      8|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEEC2IS3_JS7_S8_SC_ETnNS9_9enable_ifIXsr4absl11conjunctionINS0_8negationINS9_7is_sameIFvSD_EFvNS9_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISD_JSK_DpT0_EEEEE5valueEbE4typeELb1EEEOSK_DpOSS_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorINS7_6SymbolEEEEEENSB_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S9_SA_SE_EEENSB_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_118SymbolByParentHashELm1ELb1EEC2IS7_EENSt3__110in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_116SymbolByParentEqELm2ELb1EEC2IS7_EENSt3__110in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_15FieldDescriptorEEEEEC2IS3_JS7_S8_SE_ETnNS9_9enable_ifIXsr4absl11conjunctionINS0_8negationINS9_7is_sameIFvSF_EFvNS9_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISF_JSM_DpT0_EEEEE5valueEbE4typeELb1EEEOSM_DpOSU_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS8_14ParentNumberEqENSt3__19allocatorIPKNS7_15FieldDescriptorEEEEEENSB_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S9_SA_SG_EEENSB_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_116ParentNumberHashELm1ELb1EEC2IS7_EENSt3__110in_place_tEOT_:
  103|     12|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_114ParentNumberEqELm2ELb1EEC2IS7_EENSt3__110in_place_tEOT_:
  103|     12|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf15FieldDescriptorEEELm3ELb1EEC2ISB_EENS4_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_19EnumValueDescriptorEEEEEC2IS3_JS7_S8_SE_ETnNS9_9enable_ifIXsr4absl11conjunctionINS0_8negationINS9_7is_sameIFvSF_EFvNS9_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISF_JSM_DpT0_EEEEE5valueEbE4typeELb1EEEOSM_DpOSU_:
  236|      8|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      8|                                             absl::forward<First>(first),
  238|      8|                                             absl::forward<Vs>(base)...) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS8_14ParentNumberEqENSt3__19allocatorIPKNS7_19EnumValueDescriptorEEEEEENSB_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S9_SA_SG_EEENSB_10in_place_tEDpOT_:
  126|     32|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf19EnumValueDescriptorEEELm3ELb1EEC2ISB_EENS4_10in_place_tEOT_:
  103|      8|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEPKN6google8protobuf23SourceCodeInfo_LocationEEEEEEEC2IS3_JS4_S5_SL_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSM_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISM_JST_DpT0_EEEEE5valueEbE4typeELb1EEEOST_DpOS11_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS8_4pairIKNS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEPKN6google8protobuf23SourceCodeInfo_LocationEEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SN_EEENS8_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEEPKN6google8protobuf23SourceCodeInfo_LocationEEEEELm3ELb1EEC2ISJ_EENS4_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashENS6_18SymbolByFullNameEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|    796|  ElemT<I>& get() & {
  242|    796|    return StorageT<I>::get();
  243|    796|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashELm1ELb1EE3getEv:
  106|    796|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEENS6_19DescriptorsByNameEqIS8_EENSt3__19allocatorIPKS8_EEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|      4|  ElemT<I>& get() & {
  242|      4|    return StorageT<I>::get();
  243|      4|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS5_14FileDescriptorEEELm1ELb1EE3getEv:
  106|      4|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_118SymbolByParentHashENS6_16SymbolByParentEqENSt3__19allocatorINS5_6SymbolEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISD_XT_EE4typeEv:
  241|    919|  ElemT<I>& get() & {
  242|    919|    return StorageT<I>::get();
  243|    919|  }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_118SymbolByParentHashELm1ELb1EE3getEv:
  106|    919|  T& get() & { return *this; }
descriptor.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_116ParentNumberHashENS6_14ParentNumberEqENSt3__19allocatorIPKNS5_15FieldDescriptorEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISF_XT_EE4typeEv:
  241|    198|  ElemT<I>& get() & {
  242|    198|    return StorageT<I>::get();
  243|    198|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISI_EEEEEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISO_XT_EE4typeEv:
  241|    210|  ElemT<I>& get() & {
  242|    210|    return StorageT<I>::get();
  243|    210|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISI_EEEEEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISO_XT_EE4typeEv:
  241|    206|  ElemT<I>& get() & {
  242|    206|    return StorageT<I>::get();
  243|    206|  }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_4pairIKNS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEbEEEEEEC2IS3_JS4_S5_SG_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSH_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISH_JSO_DpT0_EEEEE5valueEbE4typeELb1EEEOSO_DpOSW_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS8_4pairIKNS8_12basic_stringIcNS8_11char_traitsIcEENS9_IcEEEEbEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SI_EEENS8_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_12basic_stringIcNS4_11char_traitsIcEENS5_IcEEEEbEEEELm3ELb1EEC2ISE_EENS4_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_12basic_stringIcNS6_11char_traitsIcEENS7_IcEEEEEEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  246|      8|  constexpr const ElemT<I>& get() const& {
  247|      8|    return StorageT<I>::get();
  248|      8|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf10DescriptorEvE2EqELm2ELb1EE3getEv:
  106|  3.98k|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashELm1ELb1EE3getEv:
  106|  4.00k|  T& get() & { return *this; }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorIS9_EEEEC2IS3_JSB_SC_SF_ETnNSD_9enable_ifIXsr4absl11conjunctionINS0_8negationINSD_7is_sameIFvSG_EFvNSD_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISG_JSN_DpT0_EEEEE5valueEbE4typeELb1EEEOSN_DpOSV_:
  236|      8|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      8|                                             absl::forward<First>(first),
  238|      8|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSC_2EqENSt3__19allocatorISB_EEEEENSF_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SE_SH_EEENSF_10in_place_tEDpOT_:
  126|     32|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NS6_17DescriptorBuilder12MessageHintsEEEEEEEC2IS3_JSB_SC_SK_ETnNSD_9enable_ifIXsr4absl11conjunctionINS0_8negationINSD_7is_sameIFvSL_EFvNSD_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISL_JSS_DpT0_EEEEE5valueEbE4typeELb1EEEOSS_DpOS10_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSC_2EqENSt3__19allocatorINSF_4pairIKSB_NS8_17DescriptorBuilder12MessageHintsEEEEEEEENSF_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SE_SM_EEENSF_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKPKN6google8protobuf10DescriptorENS8_17DescriptorBuilder12MessageHintsEEEEELm3ELb1EEC2ISG_EENS4_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorIS9_EEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISG_XT_EE4typeEv:
  241|     97|  ElemT<I>& get() & {
  242|     97|    return StorageT<I>::get();
  243|     97|  }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashENSA_2EqENSt3__19allocatorIS9_EEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISG_XT_EE4typeEv:
  246|      1|  constexpr const ElemT<I>& get() const& {
  247|      1|    return StorageT<I>::get();
  248|      1|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashELm1ELb1EE3getEv:
  105|      1|  constexpr const T& get() const& { return *this; }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS6_17basic_string_viewIcNS6_11char_traitsIcEEEEEEEEC2IS3_JS4_S5_SC_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSD_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISD_JSK_DpT0_EEEEE5valueEbE4typeELb1EEEOSK_DpOSS_:
  236|     67|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|     67|                                             absl::forward<First>(first),
  238|     67|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_10StringHashENS1_8StringEqENSt3__19allocatorINS8_17basic_string_viewIcNS8_11char_traitsIcEEEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S6_S7_SE_EEENS8_10in_place_tEDpOT_:
  126|    268|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_17basic_string_viewIcNS4_11char_traitsIcEEEEEELm3ELb1EEC2ISA_EENS4_10in_place_tEOT_:
  103|     67|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS7_9allocatorIiEEEEC2IS3_JS6_S9_SB_ETnNS7_9enable_ifIXsr4absl11conjunctionINS0_8negationINS7_7is_sameIFvSC_EFvNS7_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISC_JSJ_DpT0_EEEEE5valueEbE4typeELb1EEEOSJ_DpOSR_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorIiEEEEENS9_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_S8_SB_SD_EEENS9_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS0_13hash_internal4HashIiEELm1ELb1EEC2IS6_EENSt3__110in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__18equal_toIiEELm2ELb1EEC2IS6_EENS4_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIiEELm3ELb1EEC2IS6_EENS4_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashINSt3__16vectorIiNS6_9allocatorIiEEEEEENS6_8equal_toISA_EENS8_INS6_4pairIKSA_SA_EEEEEEC2IS3_JSB_SD_SH_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSI_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISI_JSP_DpT0_EEEEE5valueEbE4typeELb1EEEOSP_DpOSX_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashINSt3__16vectorIiNS8_9allocatorIiEEEEEENS8_8equal_toISC_EENSA_INS8_4pairIKSC_SC_EEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SF_SJ_EEENS8_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS0_13hash_internal4HashINSt3__16vectorIiNS6_9allocatorIiEEEEEELm1ELb1EEC2ISB_EENS6_10in_place_tEOT_:
  103|      8|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__18equal_toINS4_6vectorIiNS4_9allocatorIiEEEEEELm2ELb1EEC2ISA_EENS4_10in_place_tEOT_:
  103|      8|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_6vectorIiNS5_IiEEEES9_EEEELm3ELb1EEC2ISC_EENS4_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashINSt3__16vectorIiNS6_9allocatorIiEEEEEENS6_8equal_toISA_EENS8_INS6_4pairIKSA_iEEEEEEC2IS3_JSB_SD_SH_ETnNS6_9enable_ifIXsr4absl11conjunctionINS0_8negationINS6_7is_sameIFvSI_EFvNS6_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISI_JSP_DpT0_EEEEE5valueEbE4typeELb1EEEOSP_DpOSX_:
  236|      4|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      4|                                             absl::forward<First>(first),
  238|      4|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS0_13hash_internal4HashINSt3__16vectorIiNS8_9allocatorIiEEEEEENS8_8equal_toISC_EENSA_INS8_4pairIKSC_iEEEEEEENS8_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SF_SJ_EEENS8_10in_place_tEDpOT_:
  126|     16|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKNS4_6vectorIiNS5_IiEEEEiEEEELm3ELb1EEC2ISC_EENS4_10in_place_tEOT_:
  103|      4|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS7_9FileEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEEC2IRKSB_JRKSE_SJ_ETnNSC_9enable_ifIXsr4absl11conjunctionINS0_8negationINSC_7is_sameIFvSK_EFvNSC_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISK_JSV_DpT0_EEEEE5valueEbE4typeELb1EEEOSV_DpOS13_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS9_9FileEntryEE15checked_compareENSt3__19allocatorISB_EEPNS1_10btree_nodeINS1_10set_paramsISB_SA_SG_Li256ELb0EEEEEEEENSE_16integer_sequenceImJLm0ELm1ELm2EEEELb1EEC2IJRKSD_RKSG_SL_EEENSE_10in_place_tEDpOT_:
  126|      6|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS8_9FileEntryEE15checked_compareELm0ELb0EEC2IRKSC_EENSt3__110in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEELm1ELb1EEC2IRKSB_EENS4_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS9_11FileCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EEC2ISH_EENSC_10in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEEC2IRKSB_JRKSE_SJ_ETnNSC_9enable_ifIXsr4absl11conjunctionINS0_8negationINSC_7is_sameIFvSK_EFvNSC_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISK_JSV_DpT0_EEEEE5valueEbE4typeELb1EEEOSV_DpOS13_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS9_11SymbolEntryEE15checked_compareENSt3__19allocatorISB_EEPNS1_10btree_nodeINS1_10set_paramsISB_SA_SG_Li256ELb0EEEEEEEENSE_16integer_sequenceImJLm0ELm1ELm2EEEELb1EEC2IJRKSD_RKSG_SL_EEENSE_10in_place_tEDpOT_:
  126|      6|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS8_11SymbolEntryEE15checked_compareELm0ELb0EEC2IRKSC_EENSt3__110in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEELm1ELb1EEC2IRKSB_EENS4_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS9_13SymbolCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EEC2ISH_EENSC_10in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS7_14ExtensionEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEEC2IRKSB_JRKSE_SJ_ETnNSC_9enable_ifIXsr4absl11conjunctionINS0_8negationINSC_7is_sameIFvSK_EFvNSC_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISK_JSV_DpT0_EEEEE5valueEbE4typeELb1EEEOSV_DpOS13_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS9_14ExtensionEntryEE15checked_compareENSt3__19allocatorISB_EEPNS1_10btree_nodeINS1_10set_paramsISB_SA_SG_Li256ELb0EEEEEEEENSE_16integer_sequenceImJLm0ELm1ELm2EEEELb1EEC2IJRKSD_RKSG_SL_EEENSE_10in_place_tEDpOT_:
  126|      6|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS8_14ExtensionEntryEE15checked_compareELm0ELb0EEC2IRKSC_EENSt3__110in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEELm1ELb1EEC2IRKSB_EENS4_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS9_16ExtensionCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EEC2ISH_EENSC_10in_place_tEOT_:
   90|      2|      : value(absl::forward<V>(v)) {}
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS7_9FileEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  241|     14|  ElemT<I>& get() & {
  242|     14|    return StorageT<I>::get();
  243|     14|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEELm1ELb1EE3getEv:
  106|     14|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS7_9FileEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  241|     12|  ElemT<I>& get() & {
  242|     12|    return StorageT<I>::get();
  243|     12|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS9_11FileCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EE3getEv:
   92|     12|  T& get() & { return value; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS7_9FileEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  246|     21|  constexpr const ElemT<I>& get() const& {
  247|     21|    return StorageT<I>::get();
  248|     21|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS8_9FileEntryEE15checked_compareELm0ELb0EE3getEv:
   91|     21|  constexpr const T& get() const& { return value; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS7_14ExtensionEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  241|      3|  ElemT<I>& get() & {
  242|      3|    return StorageT<I>::get();
  243|      3|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEELm1ELb1EE3getEv:
  106|      3|  T& get() & { return *this; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS7_14ExtensionEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  241|      4|  ElemT<I>& get() & {
  242|      4|    return StorageT<I>::get();
  243|      4|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS9_16ExtensionCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EE3getEv:
   92|      4|  T& get() & { return value; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS7_14ExtensionEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  246|      3|  constexpr const ElemT<I>& get() const& {
  247|      3|    return StorageT<I>::get();
  248|      3|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS8_14ExtensionEntryEE15checked_compareELm0ELb0EE3getEv:
   91|      3|  constexpr const T& get() const& { return value; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi2EEERKNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  246|     16|  constexpr const ElemT<I>& get() const& {
  247|     16|    return StorageT<I>::get();
  248|     16|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS9_13SymbolCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EE3getEv:
   91|     16|  constexpr const T& get() const& { return value; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  246|    234|  constexpr const ElemT<I>& get() const& {
  247|    234|    return StorageT<I>::get();
  248|    234|  }
_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS8_11SymbolEntryEE15checked_compareELm0ELb0EE3getEv:
   91|    234|  constexpr const T& get() const& { return value; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  241|    210|  ElemT<I>& get() & {
  242|    210|    return StorageT<I>::get();
  243|    210|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS9_13SymbolCompareENSt3__19allocatorISA_EELi256ELb0EEEEELm2ELb0EE3getEv:
   92|    210|  T& get() & { return value; }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareENSt3__19allocatorIS9_EEPNS1_10btree_nodeINS1_10set_paramsIS9_S8_SE_Li256ELb0EEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISK_XT_EE4typeEv:
  241|     80|  ElemT<I>& get() & {
  242|     80|    return StorageT<I>::get();
  243|     80|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEELm1ELb1EE3getEv:
  106|     80|  T& get() & { return *this; }
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_PKNS6_21DynamicMessageFactory8TypeInfoEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISN_XT_EE4typeEv:
  246|     12|  constexpr const ElemT<I>& get() const& {
  247|     12|    return StorageT<I>::get();
  248|     12|  }
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_PKNS6_21DynamicMessageFactory8TypeInfoEEEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISN_XT_EE4typeEv:
  241|      8|  ElemT<I>& get() & {
  242|      8|    return StorageT<I>::get();
  243|      8|  }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_PKNS6_21DynamicMessageFactory8TypeInfoEEEEEEEC2IS3_JSB_SC_SM_ETnNSD_9enable_ifIXsr4absl11conjunctionINS0_8negationINSD_7is_sameIFvSN_EFvNSD_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISN_JSU_DpT0_EEEEE5valueEbE4typeELb1EEEOSU_DpOS12_:
  236|      6|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      6|                                             absl::forward<First>(first),
  238|      6|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSC_2EqENSt3__19allocatorINSF_4pairIKSB_PKNS8_21DynamicMessageFactory8TypeInfoEEEEEEEENSF_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SE_SO_EEENSF_10in_place_tEDpOT_:
  126|     24|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKPKN6google8protobuf10DescriptorEPKNS8_21DynamicMessageFactory8TypeInfoEEEEELm3ELb1EEC2ISI_EENS4_10in_place_tEOT_:
  103|      6|      : T(absl::forward<V>(v)) {}
extension_set.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  246|     60|  constexpr const ElemT<I>& get() const& {
  247|     60|    return StorageT<I>::get();
  248|     60|  }
extension_set.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  241|     29|  ElemT<I>& get() & {
  242|     29|    return StorageT<I>::get();
  243|     29|  }
extension_set.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  241|      8|  ElemT<I>& get() & {
  242|      8|    return StorageT<I>::get();
  243|      8|  }
extension_set.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf8internal12_GLOBAL__N_111ExtensionEqELm2ELb1EE3getEv:
  106|      8|  T& get() & { return *this; }
extension_set.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  246|      8|  constexpr const ElemT<I>& get() const& {
  247|      8|    return StorageT<I>::get();
  248|      8|  }
extension_set.cc:_ZNKR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherELm1ELb1EE3getEv:
  105|      8|  constexpr const T& get() const& { return *this; }
extension_set.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  241|      2|  ElemT<I>& get() & {
  242|      2|    return StorageT<I>::get();
  243|      2|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf8internal13ExtensionInfoEEELm3ELb1EE3getEv:
  106|      2|  T& get() & { return *this; }
extension_set.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEEC2IS3_JS8_S9_SD_ETnNSA_9enable_ifIXsr4absl11conjunctionINS0_8negationINSA_7is_sameIFvSE_EFvNSA_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISE_JSL_DpT0_EEEEE5valueEbE4typeELb1EEEOSL_DpOST_:
  236|      1|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      1|                                             absl::forward<First>(first),
  238|      1|                                             absl::forward<Vs>(base)...) {}
extension_set.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorINS8_13ExtensionInfoEEEEEENSC_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SA_SB_SF_EEENSC_10in_place_tEDpOT_:
  126|      4|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
extension_set.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherELm1ELb1EEC2IS8_EENSt3__110in_place_tEOT_:
  103|      1|      : T(absl::forward<V>(v)) {}
extension_set.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf8internal12_GLOBAL__N_111ExtensionEqELm2ELb1EEC2IS8_EENSt3__110in_place_tEOT_:
  103|      1|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIN6google8protobuf8internal13ExtensionInfoEEELm3ELb1EEC2ISA_EENS4_10in_place_tEOT_:
  103|      1|      : T(absl::forward<V>(v)) {}
extension_set.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherENS7_11ExtensionEqENSt3__19allocatorINS6_13ExtensionInfoEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISE_XT_EE4typeEv:
  241|      1|  ElemT<I>& get() & {
  242|      1|    return StorageT<I>::get();
  243|      1|  }
extension_set.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherELm1ELb1EE3getEv:
  106|      1|  T& get() & { return *this; }
message.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NS6_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISM_XT_EE4typeEv:
  246|  20.0k|  constexpr const ElemT<I>& get() const& {
  247|  20.0k|    return StorageT<I>::get();
  248|  20.0k|  }
message.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NS6_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISM_XT_EE4typeEv:
  241|     14|  ElemT<I>& get() & {
  242|     14|    return StorageT<I>::get();
  243|     14|  }
message.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKPKN6google8protobuf10DescriptorENS8_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEELm3ELb1EE3getEv:
  106|     14|  T& get() & { return *this; }
message.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NS6_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISM_XT_EE4typeEv:
  241|  12.0k|  ElemT<I>& get() & {
  242|  12.0k|    return StorageT<I>::get();
  243|  12.0k|  }
message.cc:_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS7_18DescriptorByNameEqENSt3__19allocatorIPKNS5_8internal15DescriptorTableEEEEE3getILi0EEERKNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  246|     73|  constexpr const ElemT<I>& get() const& {
  247|     73|    return StorageT<I>::get();
  248|     73|  }
message.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS7_18DescriptorByNameEqENSt3__19allocatorIPKNS5_8internal15DescriptorTableEEEEE3getILi3EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|     11|  ElemT<I>& get() & {
  242|     11|    return StorageT<I>::get();
  243|     11|  }
_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf8internal15DescriptorTableEEELm3ELb1EE3getEv:
  106|     11|  T& get() & { return *this; }
message.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS7_18DescriptorByNameEqENSt3__19allocatorIPKNS5_8internal15DescriptorTableEEEEE3getILi0EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|     77|  ElemT<I>& get() & {
  242|     77|    return StorageT<I>::get();
  243|     77|  }
message.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS7_18DescriptorByNameEqENSt3__19allocatorIPKNS5_8internal15DescriptorTableEEEEEC2IS3_JS8_S9_SG_ETnNSA_9enable_ifIXsr4absl11conjunctionINS0_8negationINSA_7is_sameIFvSH_EFvNSA_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISH_JSO_DpT0_EEEEE5valueEbE4typeELb1EEEOSO_DpOSW_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
message.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS9_18DescriptorByNameEqENSt3__19allocatorIPKNS7_8internal15DescriptorTableEEEEEENSC_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SA_SB_SI_EEENSC_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
message.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashELm1ELb1EEC2IS8_EENSt3__110in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
message.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory18DescriptorByNameEqELm2ELb1EEC2IS8_EENSt3__110in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPKN6google8protobuf8internal15DescriptorTableEEELm3ELb1EEC2ISC_EENS4_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
message.cc:_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NS6_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEEEEC2IS3_JSB_SC_SL_ETnNSD_9enable_ifIXsr4absl11conjunctionINS0_8negationINSD_7is_sameIFvSM_EFvNSD_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleISM_JST_DpT0_EEEEE5valueEbE4typeELb1EEEOST_DpOS11_:
  236|      2|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|      2|                                             absl::forward<First>(first),
  238|      2|                                             absl::forward<Vs>(base)...) {}
message.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSC_2EqENSt3__19allocatorINSF_4pairIKSB_NS8_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEEEEENSF_16integer_sequenceImJLm0ELm1ELm2ELm3EEEELb1EEC2IJS5_SD_SE_SN_EEENSF_10in_place_tEDpOT_:
  126|      8|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
message.cc:_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorINS4_4pairIKPKN6google8protobuf10DescriptorENS8_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEELm3ELb1EEC2ISH_EENS4_10in_place_tEOT_:
  103|      2|      : T(absl::forward<V>(v)) {}
message.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NS6_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISM_XT_EE4typeEv:
  241|  4.00k|  ElemT<I>& get() & {
  242|  4.00k|    return StorageT<I>::get();
  243|  4.00k|  }
message.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsENS1_6HashEqIPKN6google8protobuf10DescriptorEvE4HashENSA_2EqENSt3__19allocatorINSD_4pairIKS9_NS6_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISM_XT_EE4typeEv:
  241|  3.98k|  ElemT<I>& get() & {
  242|  3.98k|    return StorageT<I>::get();
  243|  3.98k|  }
message.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS7_18DescriptorByNameEqENSt3__19allocatorIPKNS5_8internal15DescriptorTableEEEEE3getILi2EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|      1|  ElemT<I>& get() & {
  242|      1|    return StorageT<I>::get();
  243|      1|  }
message.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory18DescriptorByNameEqELm2ELb1EE3getEv:
  106|      1|  T& get() & { return *this; }
message.cc:_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNS1_12CommonFieldsEN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENS7_18DescriptorByNameEqENSt3__19allocatorIPKNS5_8internal15DescriptorTableEEEEE3getILi1EEERNS1_25internal_compressed_tuple4ElemISH_XT_EE4typeEv:
  241|      7|  ElemT<I>& get() & {
  242|      7|    return StorageT<I>::get();
  243|      7|  }
message.cc:_ZNR4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageIN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashELm1ELb1EE3getEv:
  106|      7|  T& get() & { return *this; }
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageImLm1ELb0EEC2IjEENSt3__110in_place_tEOT_:
   90|     24|      : value(absl::forward<V>(v)) {}
_ZNKR4absl12lts_2024011618container_internal15CompressedTupleIJNSt3__19allocatorIPNS0_7LogSinkEEEmEE3getILi1EEERKNS1_25internal_compressed_tuple4ElemIS8_XT_EE4typeEv:
  246|     48|  constexpr const ElemT<I>& get() const& {
  247|     48|    return StorageT<I>::get();
  248|     48|  }
_ZN4absl12lts_2024011618container_internal15CompressedTupleIJNSt3__19allocatorIPNS0_7LogSinkEEEmEEC2IS7_JjETnNS3_9enable_ifIXsr4absl11conjunctionINS0_8negationINS3_7is_sameIFvS8_EFvNS3_5decayIT_E4typeEEEEEENS1_25internal_compressed_tuple27TupleItemsMoveConstructibleIS8_JSF_DpT0_EEEEE5valueEbE4typeELb1EEEOSF_DpOSN_:
  236|     24|      : CompressedTuple::CompressedTupleImpl(absl::in_place,
  237|     24|                                             absl::forward<First>(first),
  238|     24|                                             absl::forward<Vs>(base)...) {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple19CompressedTupleImplINS1_15CompressedTupleIJNSt3__19allocatorIPNS0_7LogSinkEEEmEEENS5_16integer_sequenceImJLm0ELm1EEEELb1EEC2IJS9_jEEENS5_10in_place_tEDpOT_:
  126|     48|      : Storage<Ts, I>(absl::in_place, absl::forward<Vs>(args))... {}
_ZN4absl12lts_2024011618container_internal25internal_compressed_tuple7StorageINSt3__19allocatorIPNS0_7LogSinkEEELm0ELb1EEC2IS8_EENS4_10in_place_tEOT_:
  103|     24|      : T(absl::forward<V>(v)) {}
_ZNR4absl12lts_2024011618container_internal15CompressedTupleIJNSt3__19allocatorIPNS0_7LogSinkEEEmEE3getILi1EEERNS1_25internal_compressed_tuple4ElemIS8_XT_EE4typeEv:
  241|     24|  ElemT<I>& get() & {
  242|     24|    return StorageT<I>::get();
  243|     24|  }

_ZN4absl12lts_2024011618container_internal27SanitizerPoisonMemoryRegionEPKvm:
  220|    455|inline void SanitizerPoisonMemoryRegion(const void* m, size_t s) {
  221|       |#ifdef ABSL_HAVE_ADDRESS_SANITIZER
  222|       |  ASAN_POISON_MEMORY_REGION(m, s);
  223|       |#endif
  224|       |#ifdef ABSL_HAVE_MEMORY_SANITIZER
  225|       |  __msan_poison(m, s);
  226|       |#endif
  227|    455|  (void)m;
  228|    455|  (void)s;
  229|    455|}
_ZN4absl12lts_2024011618container_internal29SanitizerUnpoisonMemoryRegionEPKvm:
  231|  2.42k|inline void SanitizerUnpoisonMemoryRegion(const void* m, size_t s) {
  232|       |#ifdef ABSL_HAVE_ADDRESS_SANITIZER
  233|       |  ASAN_UNPOISON_MEMORY_REGION(m, s);
  234|       |#endif
  235|       |#ifdef ABSL_HAVE_MEMORY_SANITIZER
  236|       |  __msan_unpoison(m, s);
  237|       |#endif
  238|  2.42k|  (void)m;
  239|  2.42k|  (void)s;
  240|  2.42k|}
_ZN4absl12lts_2024011618container_internal8AllocateILm8ENSt3__19allocatorIcEEEEPvPT0_m:
   55|     72|void* Allocate(Alloc* alloc, size_t n) {
   56|     72|  static_assert(Alignment > 0, "");
   57|     72|  assert(n && "n must be positive");
   58|     72|  using M = AlignedType<Alignment>;
   59|     72|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   60|     72|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   61|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   62|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   63|       |  // with the "foo(bar)" syntax.
   64|     72|  A my_mem_alloc(*alloc);
   65|     72|  void* p = AT::allocate(my_mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
   66|       |  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
   67|     72|         "allocator does not respect alignment");
   68|     72|  return p;
   69|     72|}
_ZN4absl12lts_2024011618container_internal10DeallocateILm8ENSt3__19allocatorIcEEEEvPT0_Pvm:
   74|     53|void Deallocate(Alloc* alloc, void* p, size_t n) {
   75|     53|  static_assert(Alignment > 0, "");
   76|     53|  assert(n && "n must be positive");
   77|     53|  using M = AlignedType<Alignment>;
   78|     53|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   79|     53|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   80|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   81|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   82|       |  // with the "foo(bar)" syntax.
   83|     53|  A my_mem_alloc(*alloc);
   84|     53|  AT::deallocate(my_mem_alloc, static_cast<M*>(p),
   85|     53|                 (n + sizeof(M) - 1) / sizeof(M));
   86|     53|}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE7destroyINS7_INS3_4pairIKS9_SG_EEEEEEvPT_PNS1_13map_slot_typeIS9_SG_EE:
  417|      4|  static void destroy(Allocator* alloc, slot_type* slot) {
  418|      4|    if (kMutableKeys::value) {
  ------------------
  |  Branch (418:9): [True: 4, Folded]
  ------------------
  419|      4|      absl::allocator_traits<Allocator>::destroy(*alloc, &slot->mutable_value);
  420|      4|    } else {
  421|      0|      absl::allocator_traits<Allocator>::destroy(*alloc, &slot->value);
  422|      0|    }
  423|      4|  }
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE7destroyINS7_INS3_4pairIKS9_SD_EEEEEEvPT_PNS1_13map_slot_typeIS9_SD_EE:
  417|     50|  static void destroy(Allocator* alloc, slot_type* slot) {
  418|     50|    if (kMutableKeys::value) {
  ------------------
  |  Branch (418:9): [True: 50, Folded]
  ------------------
  419|     50|      absl::allocator_traits<Allocator>::destroy(*alloc, &slot->mutable_value);
  420|     50|    } else {
  421|      0|      absl::allocator_traits<Allocator>::destroy(*alloc, &slot->value);
  422|      0|    }
  423|     50|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS7_EEE12EqualElementINS9_13FullNameQueryEEERS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISL_EEEEOSK_OSL_:
  214|    102|DecomposeValue(F&& f, Arg&& arg) {
  215|    102|  const auto& key = arg;
  216|    102|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    102|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS6_12_GLOBAL__N_121DescriptorsByNameHashIS7_EENSB_19DescriptorsByNameEqIS7_EENSt3__19allocatorIS9_EEE12EqualElementINSG_17basic_string_viewIcNSG_11char_traitsIcEEEEEERS9_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISS_EEEEOSR_OSS_:
  214|      6|DecomposeValue(F&& f, Arg&& arg) {
  215|      6|  const auto& key = arg;
  216|      6|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      6|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS7_EEE12EqualElementINS9_15ParentNameQueryEEERS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISL_EEEEOSK_OSL_:
  214|  63.4k|DecomposeValue(F&& f, Arg&& arg) {
  215|  63.4k|  const auto& key = arg;
  216|  63.4k|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|  63.4k|}
_ZN4absl12lts_2024011618container_internal10DeallocateILm8ENSt3__19allocatorINS3_17basic_string_viewIcNS3_11char_traitsIcEEEEEEEEvPT0_Pvm:
   74|      3|void Deallocate(Alloc* alloc, void* p, size_t n) {
   75|      3|  static_assert(Alignment > 0, "");
   76|      3|  assert(n && "n must be positive");
   77|      3|  using M = AlignedType<Alignment>;
   78|      3|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   79|      3|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   80|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   81|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   82|       |  // with the "foo(bar)" syntax.
   83|      3|  A my_mem_alloc(*alloc);
   84|      3|  AT::deallocate(my_mem_alloc, static_cast<M*>(p),
   85|      3|                 (n + sizeof(M) - 1) / sizeof(M));
   86|      3|}
_ZN4absl12lts_2024011618container_internal13DecomposePairINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS9_INS5_4pairIKSB_SF_EEEEE19EmplaceDecomposableEJRKNSJ_ISB_SF_EEEEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSS_DpOST_:
  206|     32|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  207|     32|  return memory_internal::DecomposePairImpl(
  208|     32|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  209|     32|}
_ZN4absl12lts_2024011618container_internal15memory_internal17DecomposePairImplINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENSA_INS6_4pairIKSC_SG_EEEEE19EmplaceDecomposableERSL_NS6_5tupleIJRKSG_EEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS6_19piecewise_constructEEclsr3stdE7declvalINSR_IJSW_EEEEEclsr3stdE7declvalIT1_EEEEOSV_NSK_ISZ_S10_EE:
  138|     32|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  139|     32|  const auto& key = std::get<0>(p.first);
  140|     32|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  141|     32|                            std::move(p.second));
  142|     32|}
_ZN4absl12lts_2024011618container_internal13DecomposePairINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS9_INS5_4pairIKSB_SF_EEEEE12EqualElementISB_EEJRSL_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSR_DpOSS_:
  206|      8|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  207|      8|  return memory_internal::DecomposePairImpl(
  208|      8|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  209|      8|}
_ZN4absl12lts_2024011618container_internal15memory_internal17DecomposePairImplINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENSA_INS6_4pairIKSC_SG_EEEEE12EqualElementISC_EERSL_NS6_5tupleIJRKSG_EEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS6_19piecewise_constructEEclsr3stdE7declvalINSS_IJSX_EEEEEclsr3stdE7declvalIT1_EEEEOSW_NSK_IS10_S11_EE:
  138|      8|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  139|      8|  const auto& key = std::get<0>(p.first);
  140|      8|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  141|      8|                            std::move(p.second));
  142|      8|}
_ZN4absl12lts_2024011618container_internal8PairArgsIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS3_4pairINS3_5tupleIJRKT_EEENSG_IJRKT0_EEEEERKNSF_ISH_SL_EE:
  187|     36|    const std::pair<F, S>& p) {
  188|     36|  return PairArgs(p.first, p.second);
  189|     36|}
_ZN4absl12lts_2024011618container_internal8PairArgsIRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKN6google8protobuf10Descriptor13WellKnownTypeEEENS3_4pairINS3_5tupleIJOT_EEENSJ_IJOT0_EEEEESL_SO_:
  181|     68|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
  182|     68|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
  183|     68|          std::forward_as_tuple(std::forward<S>(s))};
  184|     68|}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE8transferINS7_INS3_4pairIKS9_SD_EEEEEEDaPT_PNS1_13map_slot_typeIS9_SD_EESO_:
  427|     50|                       slot_type* old_slot) {
  428|     50|    auto is_relocatable =
  429|     50|        typename absl::is_trivially_relocatable<value_type>::type();
  430|       |
  431|     50|    emplace(new_slot);
  432|     50|#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
  433|     50|    if (is_relocatable) {
  ------------------
  |  Branch (433:9): [Folded, False: 50]
  ------------------
  434|       |      // TODO(b/247130232,b/251814870): remove casts after fixing warnings.
  435|      0|      std::memcpy(static_cast<void*>(std::launder(&new_slot->value)),
  436|      0|                  static_cast<const void*>(&old_slot->value),
  437|      0|                  sizeof(value_type));
  438|      0|      return is_relocatable;
  439|      0|    }
  440|     50|#endif
  441|       |
  442|     50|    if (kMutableKeys::value) {
  ------------------
  |  Branch (442:9): [True: 50, Folded]
  ------------------
  443|     50|      absl::allocator_traits<Allocator>::construct(
  444|     50|          *alloc, &new_slot->mutable_value, std::move(old_slot->mutable_value));
  445|     50|    } else {
  446|      0|      absl::allocator_traits<Allocator>::construct(*alloc, &new_slot->value,
  447|      0|                                                   std::move(old_slot->value));
  448|      0|    }
  449|     50|    destroy(alloc, old_slot);
  450|     50|    return is_relocatable;
  451|     50|  }
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE7emplaceEPNS1_13map_slot_typeIS9_SD_EE:
  348|     82|  static void emplace(slot_type* slot) {
  349|       |    // The construction of union doesn't do anything at runtime but it allows us
  350|       |    // to access its members without violating aliasing rules.
  351|     82|    new (slot) slot_type;
  352|     82|  }
_ZN4absl12lts_2024011618container_internal13map_slot_typeINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEC2Ev:
  329|     82|  map_slot_type() {}
_ZN4absl12lts_2024011618container_internal13DecomposePairINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS9_INS5_4pairIKSB_SF_EEEEE11HashElementEJRSL_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSQ_DpOSR_:
  206|     28|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  207|     28|  return memory_internal::DecomposePairImpl(
  208|     28|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  209|     28|}
_ZN4absl12lts_2024011618container_internal15memory_internal17DecomposePairImplINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENSA_INS6_4pairIKSC_SG_EEEEE11HashElementERSL_NS6_5tupleIJRKSG_EEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS6_19piecewise_constructEEclsr3stdE7declvalINSR_IJSW_EEEEEclsr3stdE7declvalIT1_EEEEOSV_NSK_ISZ_S10_EE:
  138|     28|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  139|     28|  const auto& key = std::get<0>(p.first);
  140|     28|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  141|     28|                            std::move(p.second));
  142|     28|}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEE9constructINS7_INS3_4pairIKS9_SD_EEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJRSH_EEENSN_IJRKSD_EEEEEEvPT_PNS1_13map_slot_typeIS9_SD_EEDpOT0_:
  383|     32|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  384|     32|    emplace(slot);
  385|     32|    if (kMutableKeys::value) {
  ------------------
  |  Branch (385:9): [True: 32, Folded]
  ------------------
  386|     32|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
  387|     32|                                                   std::forward<Args>(args)...);
  388|     32|    } else {
  389|      0|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->value,
  390|      0|                                                   std::forward<Args>(args)...);
  391|      0|    }
  392|     32|  }
_ZN4absl12lts_2024011618container_internal8PairArgsINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS3_4pairINS3_5tupleIJRKT_EEENSF_IJRKT0_EEEEERKNSE_ISG_SK_EE:
  187|     32|    const std::pair<F, S>& p) {
  188|     32|  return PairArgs(p.first, p.second);
  189|     32|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS7_EEE12EqualElementIS7_EERS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISK_EEEEOSJ_OSK_:
  214|     33|DecomposeValue(F&& f, Arg&& arg) {
  215|     33|  const auto& key = arg;
  216|     33|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|     33|}
_ZN4absl12lts_2024011618container_internal23SanitizerUnpoisonObjectINS1_13map_slot_typeINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorEEEEEvPKT_:
  248|      1|inline void SanitizerUnpoisonObject(const T* object) {
  249|      1|  SanitizerUnpoisonMemoryRegion(object, sizeof(T));
  250|      1|}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS6_15FieldDescriptorEE7emplaceEPNS1_13map_slot_typeISA_SD_EE:
  348|      1|  static void emplace(slot_type* slot) {
  349|       |    // The construction of union doesn't do anything at runtime but it allows us
  350|       |    // to access its members without violating aliasing rules.
  351|      1|    new (slot) slot_type;
  352|      1|  }
_ZN4absl12lts_2024011618container_internal13map_slot_typeINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS6_15FieldDescriptorEEC2Ev:
  329|      1|  map_slot_type() {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS6_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS9_EEE19EmplaceDecomposableERKPS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISN_EEEEOSM_OSN_:
  214|     15|DecomposeValue(F&& f, Arg&& arg) {
  215|     15|  const auto& key = arg;
  216|     15|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|     15|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS6_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS9_EEE11HashElementERS9_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISL_EEEEOSK_OSL_:
  214|     14|DecomposeValue(F&& f, Arg&& arg) {
  215|     14|  const auto& key = arg;
  216|     14|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|     14|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS7_EEE19EmplaceDecomposableERKS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISK_EEEEOSJ_OSK_:
  214|    362|DecomposeValue(F&& f, Arg&& arg) {
  215|    362|  const auto& key = arg;
  216|    362|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    362|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_120SymbolByFullNameHashENS9_18SymbolByFullNameEqENSt3__19allocatorIS7_EEE11HashElementERS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISJ_EEEEOSI_OSJ_:
  214|    434|DecomposeValue(F&& f, Arg&& arg) {
  215|    434|  const auto& key = arg;
  216|    434|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    434|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS7_EEE19EmplaceDecomposableERKS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISK_EEEEOSJ_OSK_:
  214|    443|DecomposeValue(F&& f, Arg&& arg) {
  215|    443|  const auto& key = arg;
  216|    443|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    443|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS7_EEE12EqualElementIS7_EERS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISK_EEEEOSJ_OSK_:
  214|     43|DecomposeValue(F&& f, Arg&& arg) {
  215|     43|  const auto& key = arg;
  216|     43|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|     43|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS6_12_GLOBAL__N_118SymbolByParentHashENS9_16SymbolByParentEqENSt3__19allocatorIS7_EEE11HashElementERS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISJ_EEEEOSI_OSJ_:
  214|    476|DecomposeValue(F&& f, Arg&& arg) {
  215|    476|  const auto& key = arg;
  216|    476|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    476|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS6_12_GLOBAL__N_121DescriptorsByNameHashIS7_EENSB_19DescriptorsByNameEqIS7_EENSt3__19allocatorIS9_EEE19EmplaceDecomposableERKS9_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISO_EEEEOSN_OSO_:
  214|      4|DecomposeValue(F&& f, Arg&& arg) {
  215|      4|  const auto& key = arg;
  216|      4|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      4|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS6_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS9_EEE19EmplaceDecomposableERKPS7_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISN_EEEEOSM_OSN_:
  214|    100|DecomposeValue(F&& f, Arg&& arg) {
  215|    100|  const auto& key = arg;
  216|    100|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|    100|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS6_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS9_EEE12EqualElementIPS7_EERS9_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISN_EEEEOSM_OSN_:
  214|      4|DecomposeValue(F&& f, Arg&& arg) {
  215|      4|  const auto& key = arg;
  216|      4|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      4|}
descriptor.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS6_12_GLOBAL__N_116ParentNumberHashENSB_14ParentNumberEqENSt3__19allocatorIS9_EEE11HashElementERS9_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISL_EEEEOSK_OSL_:
  214|     98|DecomposeValue(F&& f, Arg&& arg) {
  215|     98|  const auto& key = arg;
  216|     98|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|     98|}
_ZN4absl12lts_2024011618container_internal8AllocateILm8ENSt3__19allocatorINS3_4pairIKNS5_IPKN6google8protobuf10DescriptorEiEEPKNS7_15FieldDescriptorEEEEEEEPvPT0_m:
   55|      1|void* Allocate(Alloc* alloc, size_t n) {
   56|      1|  static_assert(Alignment > 0, "");
   57|      1|  assert(n && "n must be positive");
   58|      1|  using M = AlignedType<Alignment>;
   59|      1|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   60|      1|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   61|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   62|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   63|       |  // with the "foo(bar)" syntax.
   64|      1|  A my_mem_alloc(*alloc);
   65|      1|  void* p = AT::allocate(my_mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
   66|       |  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
   67|      1|         "allocator does not respect alignment");
   68|      1|  return p;
   69|      1|}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS6_15FieldDescriptorEE9constructINS3_9allocatorINS4_IKSA_SD_EEEEJSI_EEEvPT_PNS1_13map_slot_typeISA_SD_EEDpOT0_:
  383|      1|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  384|      1|    emplace(slot);
  385|      1|    if (kMutableKeys::value) {
  ------------------
  |  Branch (385:9): [True: 1, Folded]
  ------------------
  386|      1|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
  387|      1|                                                   std::forward<Args>(args)...);
  388|      1|    } else {
  389|      0|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->value,
  390|      0|                                                   std::forward<Args>(args)...);
  391|      0|    }
  392|      1|  }
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS6_15FieldDescriptorEE7elementEPNS1_13map_slot_typeISA_SD_EE:
  359|      1|  static value_type& element(slot_type* slot) { return slot->value; }
_ZN4absl12lts_2024011618container_internal13DecomposePairINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS5_10unique_ptrIN6google8protobuf10FeatureSetENS5_14default_deleteISF_EEEEEENS1_10StringHashENS1_8StringEqENS9_INS5_4pairIKSB_SI_EEEEE12EqualElementISB_EEJRSO_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSU_DpOSV_:
  206|    206|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  207|    206|  return memory_internal::DecomposePairImpl(
  208|    206|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  209|    206|}
_ZN4absl12lts_2024011618container_internal15memory_internal17DecomposePairImplINS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISG_EEEEEENS1_10StringHashENS1_8StringEqENSA_INS6_4pairIKSC_SJ_EEEEE12EqualElementISC_EERSO_NS6_5tupleIJRKSJ_EEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNS6_19piecewise_constructEEclsr3stdE7declvalINSV_IJS10_EEEEEclsr3stdE7declvalIT1_EEEEOSZ_NSN_IS13_S14_EE:
  138|    206|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  139|    206|  const auto& key = std::get<0>(p.first);
  140|    206|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  141|    206|                            std::move(p.second));
  142|    206|}
_ZN4absl12lts_2024011618container_internal8PairArgsIKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISE_EEEEEENS3_4pairINS3_5tupleIJRKT_EEENSJ_IJRKT0_EEEEERKNSI_ISK_SO_EE:
  187|    206|    const std::pair<F, S>& p) {
  188|    206|  return PairArgs(p.first, p.second);
  189|    206|}
_ZN4absl12lts_2024011618container_internal8PairArgsIRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKNS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISF_EEEEEENS3_4pairINS3_5tupleIJOT_EEENSM_IJOT0_EEEEESO_SR_:
  181|    206|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
  182|    206|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
  183|    206|          std::forward_as_tuple(std::forward<S>(s))};
  184|    206|}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE8transferINS7_INS3_4pairIKS9_SG_EEEEEEDaPT_PNS1_13map_slot_typeIS9_SG_EESR_:
  427|      4|                       slot_type* old_slot) {
  428|      4|    auto is_relocatable =
  429|      4|        typename absl::is_trivially_relocatable<value_type>::type();
  430|       |
  431|      4|    emplace(new_slot);
  432|      4|#if defined(__cpp_lib_launder) && __cpp_lib_launder >= 201606
  433|      4|    if (is_relocatable) {
  ------------------
  |  Branch (433:9): [Folded, False: 4]
  ------------------
  434|       |      // TODO(b/247130232,b/251814870): remove casts after fixing warnings.
  435|      0|      std::memcpy(static_cast<void*>(std::launder(&new_slot->value)),
  436|      0|                  static_cast<const void*>(&old_slot->value),
  437|      0|                  sizeof(value_type));
  438|      0|      return is_relocatable;
  439|      0|    }
  440|      4|#endif
  441|       |
  442|      4|    if (kMutableKeys::value) {
  ------------------
  |  Branch (442:9): [True: 4, Folded]
  ------------------
  443|      4|      absl::allocator_traits<Allocator>::construct(
  444|      4|          *alloc, &new_slot->mutable_value, std::move(old_slot->mutable_value));
  445|      4|    } else {
  446|      0|      absl::allocator_traits<Allocator>::construct(*alloc, &new_slot->value,
  447|      0|                                                   std::move(old_slot->value));
  448|      0|    }
  449|      4|    destroy(alloc, old_slot);
  450|      4|    return is_relocatable;
  451|      4|  }
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE7emplaceEPNS1_13map_slot_typeIS9_SG_EE:
  348|      8|  static void emplace(slot_type* slot) {
  349|       |    // The construction of union doesn't do anything at runtime but it allows us
  350|       |    // to access its members without violating aliasing rules.
  351|      8|    new (slot) slot_type;
  352|      8|  }
_ZN4absl12lts_2024011618container_internal13map_slot_typeINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEEC2Ev:
  329|      8|  map_slot_type() {}
_ZN4absl12lts_2024011618container_internal15map_slot_policyINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_10unique_ptrIN6google8protobuf10FeatureSetENS3_14default_deleteISD_EEEEE9constructINS7_INS3_4pairIKS9_SG_EEEEJRKNS3_21piecewise_construct_tENS3_5tupleIJOS9_EEENSQ_IJEEEEEEvPT_PNS1_13map_slot_typeIS9_SG_EEDpOT0_:
  383|      4|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  384|      4|    emplace(slot);
  385|      4|    if (kMutableKeys::value) {
  ------------------
  |  Branch (385:9): [True: 4, Folded]
  ------------------
  386|      4|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
  387|      4|                                                   std::forward<Args>(args)...);
  388|      4|    } else {
  389|      0|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->value,
  390|      0|                                                   std::forward<Args>(args)...);
  391|      0|    }
  392|      4|  }
_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS5_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS5_9allocatorIS9_EEE19EmplaceDecomposableERKNS5_12basic_stringIcS8_NSD_IcEEEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISN_EEEEOSM_OSN_:
  214|      3|DecomposeValue(F&& f, Arg&& arg) {
  215|      3|  const auto& key = arg;
  216|      3|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      3|}
_ZN4absl12lts_2024011618container_internal8AllocateILm8ENSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEEEPvPT0_m:
   55|      6|void* Allocate(Alloc* alloc, size_t n) {
   56|      6|  static_assert(Alignment > 0, "");
   57|      6|  assert(n && "n must be positive");
   58|      6|  using M = AlignedType<Alignment>;
   59|      6|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   60|      6|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   61|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   62|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   63|       |  // with the "foo(bar)" syntax.
   64|      6|  A my_mem_alloc(*alloc);
   65|      6|  void* p = AT::allocate(my_mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
   66|       |  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
   67|      6|         "allocator does not respect alignment");
   68|      6|  return p;
   69|      6|}
_ZN4absl12lts_2024011618container_internal23SanitizerUnpoisonObjectIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvPKT_:
  248|     13|inline void SanitizerUnpoisonObject(const T* object) {
  249|     13|  SanitizerUnpoisonMemoryRegion(object, sizeof(T));
  250|     13|}
_ZN4absl12lts_2024011618container_internal21SanitizerPoisonObjectIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEvPKT_:
  243|     11|inline void SanitizerPoisonObject(const T* object) {
  244|     11|  SanitizerPoisonMemoryRegion(object, sizeof(T));
  245|     11|}
_ZN4absl12lts_2024011618container_internal10DeallocateILm8ENSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEEEvPT0_Pvm:
   74|      5|void Deallocate(Alloc* alloc, void* p, size_t n) {
   75|      5|  static_assert(Alignment > 0, "");
   76|      5|  assert(n && "n must be positive");
   77|      5|  using M = AlignedType<Alignment>;
   78|      5|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   79|      5|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   80|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   81|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   82|       |  // with the "foo(bar)" syntax.
   83|      5|  A my_mem_alloc(*alloc);
   84|      5|  AT::deallocate(my_mem_alloc, static_cast<M*>(p),
   85|      5|                 (n + sizeof(M) - 1) / sizeof(M));
   86|      5|}
_ZN4absl12lts_2024011618container_internal8AllocateILm8ENSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEEEPvPT0_m:
   55|      1|void* Allocate(Alloc* alloc, size_t n) {
   56|      1|  static_assert(Alignment > 0, "");
   57|      1|  assert(n && "n must be positive");
   58|      1|  using M = AlignedType<Alignment>;
   59|      1|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   60|      1|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   61|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   62|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   63|       |  // with the "foo(bar)" syntax.
   64|      1|  A my_mem_alloc(*alloc);
   65|      1|  void* p = AT::allocate(my_mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
   66|       |  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
   67|      1|         "allocator does not respect alignment");
   68|      1|  return p;
   69|      1|}
_ZN4absl12lts_2024011618container_internal23SanitizerUnpoisonObjectIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEvPKT_:
  248|      1|inline void SanitizerUnpoisonObject(const T* object) {
  249|      1|  SanitizerUnpoisonMemoryRegion(object, sizeof(T));
  250|      1|}
_ZN4absl12lts_2024011618container_internal21SanitizerPoisonObjectIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEvPKT_:
  243|      1|inline void SanitizerPoisonObject(const T* object) {
  244|      1|  SanitizerPoisonMemoryRegion(object, sizeof(T));
  245|      1|}
_ZN4absl12lts_2024011618container_internal10DeallocateILm8ENSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEEEvPT0_Pvm:
   74|      1|void Deallocate(Alloc* alloc, void* p, size_t n) {
   75|      1|  static_assert(Alignment > 0, "");
   76|      1|  assert(n && "n must be positive");
   77|      1|  using M = AlignedType<Alignment>;
   78|      1|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   79|      1|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   80|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   81|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   82|       |  // with the "foo(bar)" syntax.
   83|      1|  A my_mem_alloc(*alloc);
   84|      1|  AT::deallocate(my_mem_alloc, static_cast<M*>(p),
   85|      1|                 (n + sizeof(M) - 1) / sizeof(M));
   86|      1|}
_ZN4absl12lts_2024011618container_internal8AllocateILm8ENSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEEEPvPT0_m:
   55|     18|void* Allocate(Alloc* alloc, size_t n) {
   56|     18|  static_assert(Alignment > 0, "");
   57|     18|  assert(n && "n must be positive");
   58|     18|  using M = AlignedType<Alignment>;
   59|     18|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   60|     18|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   61|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   62|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   63|       |  // with the "foo(bar)" syntax.
   64|     18|  A my_mem_alloc(*alloc);
   65|     18|  void* p = AT::allocate(my_mem_alloc, (n + sizeof(M) - 1) / sizeof(M));
   66|       |  assert(reinterpret_cast<uintptr_t>(p) % Alignment == 0 &&
   67|     18|         "allocator does not respect alignment");
   68|     18|  return p;
   69|     18|}
_ZN4absl12lts_2024011618container_internal23SanitizerUnpoisonObjectIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvPKT_:
  248|    237|inline void SanitizerUnpoisonObject(const T* object) {
  249|    237|  SanitizerUnpoisonMemoryRegion(object, sizeof(T));
  250|    237|}
_ZN4absl12lts_2024011618container_internal21SanitizerPoisonObjectIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEvPKT_:
  243|    226|inline void SanitizerPoisonObject(const T* object) {
  244|    226|  SanitizerPoisonMemoryRegion(object, sizeof(T));
  245|    226|}
_ZN4absl12lts_2024011618container_internal10DeallocateILm8ENSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEEEvPT0_Pvm:
   74|     15|void Deallocate(Alloc* alloc, void* p, size_t n) {
   75|     15|  static_assert(Alignment > 0, "");
   76|     15|  assert(n && "n must be positive");
   77|     15|  using M = AlignedType<Alignment>;
   78|     15|  using A = typename absl::allocator_traits<Alloc>::template rebind_alloc<M>;
   79|     15|  using AT = typename absl::allocator_traits<Alloc>::template rebind_traits<M>;
   80|       |  // On macOS, "mem_alloc" is a #define with one argument defined in
   81|       |  // rpc/types.h, so we can't name the variable "mem_alloc" and initialize it
   82|       |  // with the "foo(bar)" syntax.
   83|     15|  A my_mem_alloc(*alloc);
   84|     15|  AT::deallocate(my_mem_alloc, static_cast<M*>(p),
   85|     15|                 (n + sizeof(M) - 1) / sizeof(M));
   86|     15|}
_ZN4absl12lts_2024011618container_internal21SanitizerPoisonObjectIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEEvPKT_:
  243|      4|inline void SanitizerPoisonObject(const T* object) {
  244|      4|  SanitizerPoisonMemoryRegion(object, sizeof(T));
  245|      4|}
_ZN4absl12lts_2024011618container_internal23SanitizerUnpoisonObjectIPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEEvPKT_:
  248|     16|inline void SanitizerUnpoisonObject(const T* object) {
  249|     16|  SanitizerUnpoisonMemoryRegion(object, sizeof(T));
  250|     16|}
extension_set.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS7_12_GLOBAL__N_115ExtensionHasherENSA_11ExtensionEqENSt3__19allocatorIS8_EEE12EqualElementINSA_16ExtensionInfoKeyEEERS8_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISM_EEEEOSL_OSM_:
  214|      8|DecomposeValue(F&& f, Arg&& arg) {
  215|      8|  const auto& key = arg;
  216|      8|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      8|}
extension_set.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS7_12_GLOBAL__N_115ExtensionHasherENSA_11ExtensionEqENSt3__19allocatorIS8_EEE19EmplaceDecomposableERKS8_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISL_EEEEOSK_OSL_:
  214|      1|DecomposeValue(F&& f, Arg&& arg) {
  215|      1|  const auto& key = arg;
  216|      1|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      1|}
message.cc:_ZN4absl12lts_2024011618container_internal13DecomposePairINS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS6_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS9_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS9_SC_EEEEE12EqualElementIS9_EEJRSM_EEEDTclsr15memory_internalE17DecomposePairImplclsr3stdE7forwardIT_Efp_Ecl8PairArgsspclsr3stdE7forwardIT0_Efp0_EEEEOSS_DpOST_:
  206|  3.98k|        std::forward<F>(f), PairArgs(std::forward<Args>(args)...))) {
  207|  3.98k|  return memory_internal::DecomposePairImpl(
  208|  3.98k|      std::forward<F>(f), PairArgs(std::forward<Args>(args)...));
  209|  3.98k|}
message.cc:_ZN4absl12lts_2024011618container_internal15memory_internal17DecomposePairImplINS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS7_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqISA_vE4HashENSG_2EqENSt3__19allocatorINSJ_4pairIKSA_SD_EEEEE12EqualElementISA_EERSM_NSJ_5tupleIJRKSD_EEEEEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEL_ZNSJ_19piecewise_constructEEclsr3stdE7declvalINST_IJSY_EEEEEclsr3stdE7declvalIT1_EEEEOSX_NSL_IS11_S12_EE:
  138|  3.98k|DecomposePairImpl(F&& f, std::pair<std::tuple<K>, V> p) {
  139|  3.98k|  const auto& key = std::get<0>(p.first);
  140|  3.98k|  return std::forward<F>(f)(key, std::piecewise_construct, std::move(p.first),
  141|  3.98k|                            std::move(p.second));
  142|  3.98k|}
message.cc:_ZN4absl12lts_2024011618container_internal8PairArgsIKPKN6google8protobuf10DescriptorENS4_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENSt3__14pairINSC_5tupleIJRKT_EEENSE_IJRKT0_EEEEERKNSD_ISF_SJ_EE:
  187|  3.98k|    const std::pair<F, S>& p) {
  188|  3.98k|  return PairArgs(p.first, p.second);
  189|  3.98k|}
message.cc:_ZN4absl12lts_2024011618container_internal8PairArgsIRKPKN6google8protobuf10DescriptorERKNS4_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENSt3__14pairINSF_5tupleIJOT_EEENSH_IJOT0_EEEEESJ_SM_:
  181|  3.98k|std::pair<std::tuple<F&&>, std::tuple<S&&>> PairArgs(F&& f, S&& s) {
  182|  3.98k|  return {std::piecewise_construct, std::forward_as_tuple(std::forward<F>(f)),
  183|  3.98k|          std::forward_as_tuple(std::forward<S>(s))};
  184|  3.98k|}
message.cc:_ZN4absl12lts_2024011618container_internal15map_slot_policyIPKN6google8protobuf10DescriptorENS4_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEE7emplaceEPNS1_13map_slot_typeIS7_SA_EE:
  348|     10|  static void emplace(slot_type* slot) {
  349|       |    // The construction of union doesn't do anything at runtime but it allows us
  350|       |    // to access its members without violating aliasing rules.
  351|     10|    new (slot) slot_type;
  352|     10|  }
message.cc:_ZN4absl12lts_2024011618container_internal13map_slot_typeIPKN6google8protobuf10DescriptorENS4_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEC2Ev:
  329|     10|  map_slot_type() {}
message.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS6_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSD_18DescriptorByNameEqENSt3__19allocatorISA_EEE12EqualElementINSG_17basic_string_viewIcNSG_11char_traitsIcEEEEEERSA_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISS_EEEEOSR_OSS_:
  214|      1|DecomposeValue(F&& f, Arg&& arg) {
  215|      1|  const auto& key = arg;
  216|      1|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      1|}
message.cc:_ZN4absl12lts_2024011618container_internal14DecomposeValueINS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS6_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSD_18DescriptorByNameEqENSt3__19allocatorISA_EEE19EmplaceDecomposableERKSA_EEDTclclsr3stdE7declvalIT_EEclsr3stdE7declvalIRKT0_EEclsr3stdE7declvalISO_EEEEOSN_OSO_:
  214|      6|DecomposeValue(F&& f, Arg&& arg) {
  215|      6|  const auto& key = arg;
  216|      6|  return std::forward<F>(f)(key, std::forward<Arg>(arg));
  217|      6|}
message.cc:_ZN4absl12lts_2024011618container_internal15map_slot_policyIPKN6google8protobuf10DescriptorENS4_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEE9constructINSt3__19allocatorINSD_4pairIKS7_SA_EEEEJRKNSD_21piecewise_construct_tENSD_5tupleIJRSG_EEENSM_IJRPKNS4_7MessageEEEEEEEvPT_PNS1_13map_slot_typeIS7_SA_EEDpOT0_:
  383|     10|  static void construct(Allocator* alloc, slot_type* slot, Args&&... args) {
  384|     10|    emplace(slot);
  385|     10|    if (kMutableKeys::value) {
  ------------------
  |  Branch (385:9): [True: 10, Folded]
  ------------------
  386|     10|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->mutable_value,
  387|     10|                                                   std::forward<Args>(args)...);
  388|     10|    } else {
  389|      0|      absl::allocator_traits<Allocator>::construct(*alloc, &slot->value,
  390|      0|                                                   std::forward<Args>(args)...);
  391|      0|    }
  392|     10|  }

_ZNK4absl12lts_2024011618container_internal10StringHashclENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
   77|    617|  size_t operator()(absl::string_view v) const {
   78|    617|    return absl::Hash<absl::string_view>{}(v);
   79|    617|  }
_ZNK4absl12lts_2024011618container_internal8StringEqclENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEES7_:
   87|    214|  bool operator()(absl::string_view lhs, absl::string_view rhs) const {
   88|    214|    return lhs == rhs;
   89|    214|  }
_ZN4absl12lts_2024011618container_internal6HashEqIPKN6google8protobuf14FileDescriptorEvE5ToPtrES7_:
  175|     98|  static const T* ToPtr(const T* ptr) { return ptr; }
_ZNK4absl12lts_2024011618container_internal6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashclIS7_EEmRKT_:
  162|     98|    size_t operator()(const U& ptr) const {
  163|     98|      return absl::Hash<const T*>{}(HashEq::ToPtr(ptr));
  164|     98|    }
_ZNK4absl12lts_2024011618container_internal6HashEqIPKN6google8protobuf10DescriptorEvE2EqclIS7_S7_EEbRKT_RKT0_:
  169|  3.98k|    bool operator()(const A& a, const B& b) const {
  170|  3.98k|      return HashEq::ToPtr(a) == HashEq::ToPtr(b);
  171|  3.98k|    }
_ZN4absl12lts_2024011618container_internal6HashEqIPKN6google8protobuf10DescriptorEvE5ToPtrES7_:
  175|  11.9k|  static const T* ToPtr(const T* ptr) { return ptr; }
_ZNK4absl12lts_2024011618container_internal6HashEqIPKN6google8protobuf10DescriptorEvE4HashclIS7_EEmRKT_:
  162|  4.00k|    size_t operator()(const U& ptr) const {
  163|  4.00k|      return absl::Hash<const T*>{}(HashEq::ToPtr(ptr));
  164|  4.00k|    }

descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_120SymbolByFullNameHashENSB_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE12EqualElementINSB_13FullNameQueryEEEJRS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSN_DpOSO_:
  133|    102|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    102|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    102|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSD_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE12EqualElementINSI_17basic_string_viewIcNSI_11char_traitsIcEEEEEEJRS8_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSU_DpOSV_:
  133|      6|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      6|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      6|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_118SymbolByParentHashENSB_16SymbolByParentEqENSt3__19allocatorIS6_EEE12EqualElementINSB_15ParentNameQueryEEEJRS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSN_DpOSO_:
  133|  63.4k|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|  63.4k|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|  63.4k|  }
_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE5applyINS1_12raw_hash_setISF_NS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE19EmplaceDecomposableEJRKNSL_ISA_SE_EEESF_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSV_DpOSW_:
  133|     32|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     32|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     32|  }
_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE5applyINS1_12raw_hash_setISF_NS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE12EqualElementISA_EEJRSN_ESF_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSU_DpOSV_:
  133|      8|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      8|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      8|  }
_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvE5applyINS1_12raw_hash_setISF_NS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE11HashElementEJRSN_ESF_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOST_DpOSU_:
  133|     28|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     28|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     28|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_120SymbolByFullNameHashENSB_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE12EqualElementIS6_EEJRS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSN_:
  133|     33|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     33|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     33|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_116ParentNumberHashENSD_14ParentNumberEqENSt3__19allocatorIS8_EEE19EmplaceDecomposableEJRKPS6_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSP_DpOSQ_:
  133|     15|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     15|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     15|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_116ParentNumberHashENSD_14ParentNumberEqENSt3__19allocatorIS8_EEE11HashElementEJRS8_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSN_DpOSO_:
  133|     14|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     14|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     14|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_120SymbolByFullNameHashENSB_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE19EmplaceDecomposableEJRKS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSN_:
  133|    362|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    362|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    362|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_120SymbolByFullNameHashENSB_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE11HashElementEJRS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSL_DpOSM_:
  133|    434|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    434|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    434|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_118SymbolByParentHashENSB_16SymbolByParentEqENSt3__19allocatorIS6_EEE19EmplaceDecomposableEJRKS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSN_:
  133|    443|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    443|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    443|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_118SymbolByParentHashENSB_16SymbolByParentEqENSt3__19allocatorIS6_EEE12EqualElementIS6_EEJRS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSM_DpOSN_:
  133|     43|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     43|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     43|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEEvE5applyINS1_12raw_hash_setIS7_NS5_12_GLOBAL__N_118SymbolByParentHashENSB_16SymbolByParentEqENSt3__19allocatorIS6_EEE11HashElementEJRS6_ES7_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSL_DpOSM_:
  133|    476|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    476|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    476|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSD_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE19EmplaceDecomposableEJRKS8_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSQ_DpOSR_:
  133|      4|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      4|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_116ParentNumberHashENSD_14ParentNumberEqENSt3__19allocatorIS8_EEE19EmplaceDecomposableEJRKPS6_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSP_DpOSQ_:
  133|    100|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    100|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    100|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_116ParentNumberHashENSD_14ParentNumberEqENSt3__19allocatorIS8_EEE12EqualElementIPS6_EEJRS8_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSP_DpOSQ_:
  133|      4|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      4|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEEvE5applyINS1_12raw_hash_setIS9_NS5_12_GLOBAL__N_116ParentNumberHashENSD_14ParentNumberEqENSt3__19allocatorIS8_EEE11HashElementEJRS8_ES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSN_DpOSO_:
  133|     98|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|     98|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|     98|  }
_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEEvE5applyINS1_12raw_hash_setISI_NS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE12EqualElementISA_EEJRSQ_ESI_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSX_DpOSY_:
  133|    206|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|    206|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|    206|  }
_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEvE5applyINS1_12raw_hash_setIS9_NS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE19EmplaceDecomposableEJRKNS4_12basic_stringIcS7_NSF_IcEEEEES9_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSP_DpOSQ_:
  133|      3|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      3|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      3|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEEvE5applyINS1_12raw_hash_setIS8_NS6_12_GLOBAL__N_115ExtensionHasherENSC_11ExtensionEqENSt3__19allocatorIS7_EEE12EqualElementINSC_16ExtensionInfoKeyEEEJRS7_ES8_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSO_DpOSP_:
  133|      8|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      8|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      8|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEEvE5applyINS1_12raw_hash_setIS8_NS6_12_GLOBAL__N_115ExtensionHasherENSC_11ExtensionEqENSt3__19allocatorIS7_EEE19EmplaceDecomposableEJRKS7_ES8_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSN_DpOSO_:
  133|      1|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      1|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      1|  }
message.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEvE5applyINS1_12raw_hash_setISC_NS1_6HashEqIS8_vE4HashENSH_2EqENSt3__19allocatorINSK_4pairIKS8_SB_EEEEE12EqualElementIS8_EEJRSO_ESC_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSV_DpOSW_:
  133|  3.98k|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|  3.98k|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|  3.98k|  }
message.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEEvE5applyINS1_12raw_hash_setISA_NS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSF_18DescriptorByNameEqENSt3__19allocatorIS9_EEE12EqualElementINSI_17basic_string_viewIcNSI_11char_traitsIcEEEEEEJRS9_ESA_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSU_DpOSV_:
  133|      1|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      1|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      1|  }
message.cc:_ZN4absl12lts_2024011618container_internal18hash_policy_traitsINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEEvE5applyINS1_12raw_hash_setISA_NS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSF_18DescriptorByNameEqENSt3__19allocatorIS9_EEE19EmplaceDecomposableEJRKS9_ESA_EEDTclsrT1_5applyclsr3stdE7forwardIT_Efp_Espclsr3stdE7forwardIT0_Efp0_EEEOSQ_DpOSR_:
  133|      6|      -> decltype(P::apply(std::forward<F>(f), std::forward<Ts>(ts)...)) {
  134|      6|    return P::apply(std::forward<F>(f), std::forward<Ts>(ts)...);
  135|      6|  }

_ZN4absl12lts_2024011618container_internal20HashtablezInfoHandleC2EDn:
  187|     19|  explicit HashtablezInfoHandle(std::nullptr_t) {}
_ZN4absl12lts_2024011618container_internal20HashtablezInfoHandle10UnregisterEv:
  189|      3|  inline void Unregister() {}
_ZNK4absl12lts_2024011618container_internal20HashtablezInfoHandle9IsSampledEv:
  190|     72|  inline bool IsSampled() const { return false; }
_ZN4absl12lts_2024011618container_internal20HashtablezInfoHandle12RecordRehashEm:
  192|     18|  inline void RecordRehash(size_t /*total_probe_length*/) {}
_ZN4absl12lts_2024011618container_internal20HashtablezInfoHandle12RecordInsertEmm:
  195|    980|  inline void RecordInsert(size_t /*hash*/, size_t /*distance_from_desired*/) {}
_ZN4absl12lts_2024011618container_internal6SampleEm:
  210|     19|    size_t inline_element_size ABSL_ATTRIBUTE_UNUSED) {
  211|       |#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE)
  212|       |  if (ABSL_PREDICT_TRUE(--global_next_sample.next_sample > 0)) {
  213|       |    return HashtablezInfoHandle(nullptr);
  214|       |  }
  215|       |  return HashtablezInfoHandle(
  216|       |      SampleSlow(global_next_sample, inline_element_size));
  217|       |#else
  218|     19|  return HashtablezInfoHandle(nullptr);
  219|     19|#endif  // !ABSL_PER_THREAD_TLS
  220|     19|}

_ZNK4absl12lts_2024011623inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEE14GetIsAllocatedEv:
  386|     24|  bool GetIsAllocated() const { return GetSizeAndIsAllocated() & 1; }
_ZNK4absl12lts_2024011623inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEE21GetSizeAndIsAllocatedEv:
  380|     48|  const SizeType<A>& GetSizeAndIsAllocated() const {
  381|     48|    return metadata_.template get<1>();
  382|     48|  }
_ZN4absl12lts_2024011623inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEE14GetInlinedDataEv:
  410|     24|  ABSL_ATTRIBUTE_NO_SANITIZE_CFI Pointer<A> GetInlinedData() {
  411|     24|    return reinterpret_cast<Pointer<A>>(data_.inlined.inlined_data);
  412|     24|  }
_ZNK4absl12lts_2024011623inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEE7GetSizeEv:
  384|     24|  SizeType<A> GetSize() const { return GetSizeAndIsAllocated() >> 1; }
_ZN4absl12lts_2024011623inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEEC2Ev:
  351|     24|  Storage() : metadata_(A(), /* size and is_allocated */ 0u) {}
_ZN4absl12lts_2024011623inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEED2Ev:
  356|     24|  ~Storage() {
  357|       |    // Fast path: if we are empty and not allocated, there's nothing to do.
  358|     24|    if (GetSizeAndIsAllocated() == 0) {
  ------------------
  |  Branch (358:9): [True: 24, False: 0]
  ------------------
  359|     24|      return;
  360|     24|    }
  361|       |
  362|       |    // Fast path: if no destructors need to be run and we know the allocator
  363|       |    // doesn't do anything fancy, then all we need to do is deallocate (and
  364|       |    // maybe not even that).
  365|      0|    if (absl::is_trivially_destructible<ValueType<A>>::value &&
  ------------------
  |  Branch (365:9): [True: 0, Folded]
  ------------------
  366|      0|        std::is_same<A, std::allocator<ValueType<A>>>::value) {
  ------------------
  |  Branch (366:9): [True: 0, Folded]
  ------------------
  367|      0|      DeallocateIfAllocated();
  368|      0|      return;
  369|      0|    }
  370|       |
  371|      0|    DestroyContents();
  372|      0|  }
_ZN4absl12lts_2024011623inlined_vector_internal7StorageIPNS0_7LogSinkELm16ENSt3__19allocatorIS4_EEE21GetSizeAndIsAllocatedEv:
  378|     24|  SizeType<A>& GetSizeAndIsAllocated() { return metadata_.template get<1>(); }

_ZN4absl12lts_2024011618container_internal15internal_layout11adl_barrier5AlignEmm:
  276|  6.79k|constexpr size_t Align(size_t n, size_t m) { return (n + m - 1) & ~(m - 1); }
_ZN4absl12lts_2024011618container_internal6LayoutIJN6google8protobuf8internal22SerialArenaChunkHeaderENSt3__16atomicIPvEENS8_IPNS5_11SerialArenaEEEEE7PartialIJEEENS1_15internal_layout10LayoutImplINS7_5tupleIJS6_SA_SD_EEE18__make_integer_seqINS7_16integer_sequenceEmXsZT_EESK_ISL_mXclL_ZNSG_11adl_barrier3MinEmmEsZT0_plsZT_Li1EEEEEEDpOT_:
  707|     10|  static constexpr PartialType<sizeof...(Sizes)> Partial(Sizes&&... sizes) {
  708|     10|    static_assert(sizeof...(Sizes) <= sizeof...(Ts), "");
  709|     10|    return PartialType<sizeof...(Sizes)>(absl::forward<Sizes>(sizes)...);
  710|     10|  }
_ZN4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJN6google8protobuf8internal22SerialArenaChunkHeaderENS4_6atomicIPvEENSA_IPNS8_11SerialArenaEEEEEENS4_16integer_sequenceImJEEENSH_ImJLm0EEEEEC2Ev:
  367|     10|      : size_{sizes...} {}
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJN6google8protobuf8internal22SerialArenaChunkHeaderENS4_6atomicIPvEENSA_IPNS8_11SerialArenaEEEEEENS4_16integer_sequenceImJEEENSH_ImJLm0EEEEE6OffsetILm0ETnNS4_9enable_ifIXeqT_Li0EEiE4typeELi0EEEmv:
  384|     10|  constexpr size_t Offset() const {
  385|     10|    return 0;
  386|     10|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJN6google8protobuf8internal22SerialArenaChunkHeaderENS4_6atomicIPvEENSA_IPNS8_11SerialArenaEEEEEENS4_16integer_sequenceImJEEENSH_ImJLm0EEEEE7PointerILm0EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESG_E4typeESR_E4typeEPSO_:
  460|     10|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     10|    using C = typename std::remove_const<Char>::type;
  462|     10|    static_assert(
  463|     10|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     10|            std::is_same<C, signed char>(),
  465|     10|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     10|    constexpr size_t alignment = Alignment();
  467|     10|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     10|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     10|  }
_ZN4absl12lts_2024011618container_internal6LayoutIJPNS1_10btree_nodeINS1_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISC_SF_EESO_EEC2Emmmmm:
  721|     24|      : internal_layout::LayoutType<sizeof...(Ts), Ts...>(sizes...) {}
_ZN4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_EC2Emmmmm:
  367|     24|      : size_{sizes...} {}
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E7PointerILm2EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_EST_E4typeES13_E4typeEPS10_:
  460|     12|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     12|    using C = typename std::remove_const<Char>::type;
  462|     12|    static_assert(
  463|     12|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     12|            std::is_same<C, signed char>(),
  465|     12|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     12|    constexpr size_t alignment = Alignment();
  467|     12|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     12|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     12|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E6OffsetILm2ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|     22|  constexpr size_t Offset() const {
  390|     22|    static_assert(N < NumOffsets, "Index out of bounds");
  391|     22|    return adl_barrier::Align(
  392|     22|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|     22|        ElementAlignment<N>::value);
  394|     22|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E6OffsetILm1ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|     22|  constexpr size_t Offset() const {
  390|     22|    static_assert(N < NumOffsets, "Index out of bounds");
  391|     22|    return adl_barrier::Align(
  392|     22|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|     22|        ElementAlignment<N>::value);
  394|     22|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E6OffsetILm0ETnNS4_9enable_ifIXeqT_Li0EEiE4typeELi0EEEmv:
  384|     24|  constexpr size_t Offset() const {
  385|     24|    return 0;
  386|     24|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E7PointerILm3EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_EST_E4typeES12_E4typeEPSZ_:
  460|      4|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      4|    using C = typename std::remove_const<Char>::type;
  462|      4|    static_assert(
  463|      4|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      4|            std::is_same<C, signed char>(),
  465|      4|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      4|    constexpr size_t alignment = Alignment();
  467|      4|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      4|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      4|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E6OffsetILm3ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|      5|  constexpr size_t Offset() const {
  390|      5|    static_assert(N < NumOffsets, "Index out of bounds");
  391|      5|    return adl_barrier::Align(
  392|      5|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|      5|        ElementAlignment<N>::value);
  394|      5|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E9AllocSizeEv:
  582|      1|  constexpr size_t AllocSize() const {
  583|      1|    static_assert(NumTypes == NumSizes, "You must specify sizes of all fields");
  584|      1|    return Offset<NumTypes - 1>() +
  585|      1|        SizeOf<ElementType<NumTypes - 1>>::value * size_[NumTypes - 1];
  586|      1|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E6OffsetILm4ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|      1|  constexpr size_t Offset() const {
  390|      1|    static_assert(N < NumOffsets, "Index out of bounds");
  391|      1|    return adl_barrier::Align(
  392|      1|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|      1|        ElementAlignment<N>::value);
  394|      1|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E7PointerILm0EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_EST_E4typeES13_E4typeEPS10_:
  460|      1|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      1|    using C = typename std::remove_const<Char>::type;
  462|      1|    static_assert(
  463|      1|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      1|            std::is_same<C, signed char>(),
  465|      1|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      1|    constexpr size_t alignment = Alignment();
  467|      1|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      1|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      1|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E7PointerILm2EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_EST_E4typeES12_E4typeEPSZ_:
  460|      5|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      5|    using C = typename std::remove_const<Char>::type;
  462|      5|    static_assert(
  463|      5|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      5|            std::is_same<C, signed char>(),
  465|      5|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      5|    constexpr size_t alignment = Alignment();
  467|      5|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      5|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      5|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10map_paramsINS4_4pairIPKN6google8protobuf10DescriptorEiEEPKNSA_15FieldDescriptorENS4_4lessISE_EENS4_9allocatorINS8_IKSE_SH_EEEELi256ELb0EEEEEjhNS1_13map_slot_typeISE_SH_EESQ_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESV_E7PointerILm0EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_EST_E4typeES12_E4typeEPSZ_:
  460|      1|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      1|    using C = typename std::remove_const<Char>::type;
  462|      1|    static_assert(
  463|      1|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      1|            std::is_same<C, signed char>(),
  465|      1|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      1|    constexpr size_t alignment = Alignment();
  467|      1|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      1|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      1|  }
_ZN4absl12lts_2024011618container_internal6LayoutIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEjhS9_SG_EEC2Emmmmm:
  721|    221|      : internal_layout::LayoutType<sizeof...(Ts), Ts...>(sizes...) {}
_ZN4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_EC2Emmmmm:
  367|    221|      : size_{sizes...} {}
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E9AllocSizeEv:
  582|     11|  constexpr size_t AllocSize() const {
  583|     11|    static_assert(NumTypes == NumSizes, "You must specify sizes of all fields");
  584|     11|    return Offset<NumTypes - 1>() +
  585|     11|        SizeOf<ElementType<NumTypes - 1>>::value * size_[NumTypes - 1];
  586|     11|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm4ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|     11|  constexpr size_t Offset() const {
  390|     11|    static_assert(N < NumOffsets, "Index out of bounds");
  391|     11|    return adl_barrier::Align(
  392|     11|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|     11|        ElementAlignment<N>::value);
  394|     11|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm3ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|     64|  constexpr size_t Offset() const {
  390|     64|    static_assert(N < NumOffsets, "Index out of bounds");
  391|     64|    return adl_barrier::Align(
  392|     64|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|     64|        ElementAlignment<N>::value);
  394|     64|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm2ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|    208|  constexpr size_t Offset() const {
  390|    208|    static_assert(N < NumOffsets, "Index out of bounds");
  391|    208|    return adl_barrier::Align(
  392|    208|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|    208|        ElementAlignment<N>::value);
  394|    208|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm1ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|    208|  constexpr size_t Offset() const {
  390|    208|    static_assert(N < NumOffsets, "Index out of bounds");
  391|    208|    return adl_barrier::Align(
  392|    208|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|    208|        ElementAlignment<N>::value);
  394|    208|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm0ETnNS4_9enable_ifIXeqT_Li0EEiE4typeELi0EEEmv:
  384|    221|  constexpr size_t Offset() const {
  385|    221|    return 0;
  386|    221|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm0EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|      6|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      6|    using C = typename std::remove_const<Char>::type;
  462|      6|    static_assert(
  463|      6|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      6|            std::is_same<C, signed char>(),
  465|      6|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      6|    constexpr size_t alignment = Alignment();
  467|      6|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      6|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      6|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm2EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|     36|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     36|    using C = typename std::remove_const<Char>::type;
  462|     36|    static_assert(
  463|     36|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     36|            std::is_same<C, signed char>(),
  465|     36|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     36|    constexpr size_t alignment = Alignment();
  467|     36|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     36|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     36|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm3EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|     46|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     46|    using C = typename std::remove_const<Char>::type;
  462|     46|    static_assert(
  463|     46|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     46|            std::is_same<C, signed char>(),
  465|     46|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     46|    constexpr size_t alignment = Alignment();
  467|     46|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     46|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     46|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm3EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|      7|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      7|    using C = typename std::remove_const<Char>::type;
  462|      7|    static_assert(
  463|      7|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      7|            std::is_same<C, signed char>(),
  465|      7|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      7|    constexpr size_t alignment = Alignment();
  467|      7|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      7|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      7|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm2EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|    108|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|    108|    using C = typename std::remove_const<Char>::type;
  462|    108|    static_assert(
  463|    108|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|    108|            std::is_same<C, signed char>(),
  465|    108|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|    108|    constexpr size_t alignment = Alignment();
  467|    108|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|    108|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|    108|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENSB_11FileCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm0EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|      7|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      7|    using C = typename std::remove_const<Char>::type;
  462|      7|    static_assert(
  463|      7|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      7|            std::is_same<C, signed char>(),
  465|      7|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      7|    constexpr size_t alignment = Alignment();
  467|      7|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      7|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      7|  }
_ZN4absl12lts_2024011618container_internal6LayoutIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEjhS9_SG_EEC2Emmmmm:
  721|     39|      : internal_layout::LayoutType<sizeof...(Ts), Ts...>(sizes...) {}
_ZN4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_EC2Emmmmm:
  367|     39|      : size_{sizes...} {}
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E9AllocSizeEv:
  582|      2|  constexpr size_t AllocSize() const {
  583|      2|    static_assert(NumTypes == NumSizes, "You must specify sizes of all fields");
  584|      2|    return Offset<NumTypes - 1>() +
  585|      2|        SizeOf<ElementType<NumTypes - 1>>::value * size_[NumTypes - 1];
  586|      2|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm4ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|      2|  constexpr size_t Offset() const {
  390|      2|    static_assert(N < NumOffsets, "Index out of bounds");
  391|      2|    return adl_barrier::Align(
  392|      2|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|      2|        ElementAlignment<N>::value);
  394|      2|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm3ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|      8|  constexpr size_t Offset() const {
  390|      8|    static_assert(N < NumOffsets, "Index out of bounds");
  391|      8|    return adl_barrier::Align(
  392|      8|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|      8|        ElementAlignment<N>::value);
  394|      8|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm2ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|     35|  constexpr size_t Offset() const {
  390|     35|    static_assert(N < NumOffsets, "Index out of bounds");
  391|     35|    return adl_barrier::Align(
  392|     35|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|     35|        ElementAlignment<N>::value);
  394|     35|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm1ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|     35|  constexpr size_t Offset() const {
  390|     35|    static_assert(N < NumOffsets, "Index out of bounds");
  391|     35|    return adl_barrier::Align(
  392|     35|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|     35|        ElementAlignment<N>::value);
  394|     35|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm0ETnNS4_9enable_ifIXeqT_Li0EEiE4typeELi0EEEmv:
  384|     39|  constexpr size_t Offset() const {
  385|     39|    return 0;
  386|     39|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm0EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|      1|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      1|    using C = typename std::remove_const<Char>::type;
  462|      1|    static_assert(
  463|      1|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      1|            std::is_same<C, signed char>(),
  465|      1|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      1|    constexpr size_t alignment = Alignment();
  467|      1|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      1|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      1|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm2EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|      5|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      5|    using C = typename std::remove_const<Char>::type;
  462|      5|    static_assert(
  463|      5|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      5|            std::is_same<C, signed char>(),
  465|      5|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      5|    constexpr size_t alignment = Alignment();
  467|      5|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      5|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      5|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm3EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|      6|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      6|    using C = typename std::remove_const<Char>::type;
  462|      6|    static_assert(
  463|      6|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      6|            std::is_same<C, signed char>(),
  465|      6|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      6|    constexpr size_t alignment = Alignment();
  467|      6|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      6|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      6|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm2EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|     22|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     22|    using C = typename std::remove_const<Char>::type;
  462|     22|    static_assert(
  463|     22|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     22|            std::is_same<C, signed char>(),
  465|     22|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     22|    constexpr size_t alignment = Alignment();
  467|     22|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     22|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     22|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENSB_16ExtensionCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm0EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|      3|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|      3|    using C = typename std::remove_const<Char>::type;
  462|      3|    static_assert(
  463|      3|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|      3|            std::is_same<C, signed char>(),
  465|      3|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|      3|    constexpr size_t alignment = Alignment();
  467|      3|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|      3|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|      3|  }
_ZN4absl12lts_2024011618container_internal6LayoutIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEjhS9_SG_EEC2Emmmmm:
  721|  2.77k|      : internal_layout::LayoutType<sizeof...(Ts), Ts...>(sizes...) {}
_ZN4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_EC2Emmmmm:
  367|  2.77k|      : size_{sizes...} {}
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm2EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|  1.50k|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|  1.50k|    using C = typename std::remove_const<Char>::type;
  462|  1.50k|    static_assert(
  463|  1.50k|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|  1.50k|            std::is_same<C, signed char>(),
  465|  1.50k|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|  1.50k|    constexpr size_t alignment = Alignment();
  467|  1.50k|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|  1.50k|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|  1.50k|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm2ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|  2.57k|  constexpr size_t Offset() const {
  390|  2.57k|    static_assert(N < NumOffsets, "Index out of bounds");
  391|  2.57k|    return adl_barrier::Align(
  392|  2.57k|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|  2.57k|        ElementAlignment<N>::value);
  394|  2.57k|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm1ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|  2.57k|  constexpr size_t Offset() const {
  390|  2.57k|    static_assert(N < NumOffsets, "Index out of bounds");
  391|  2.57k|    return adl_barrier::Align(
  392|  2.57k|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|  2.57k|        ElementAlignment<N>::value);
  394|  2.57k|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm0ETnNS4_9enable_ifIXeqT_Li0EEiE4typeELi0EEEmv:
  384|  2.77k|  constexpr size_t Offset() const {
  385|  2.77k|    return 0;
  386|  2.77k|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm3EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|    354|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|    354|    using C = typename std::remove_const<Char>::type;
  462|    354|    static_assert(
  463|    354|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|    354|            std::is_same<C, signed char>(),
  465|    354|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|    354|    constexpr size_t alignment = Alignment();
  467|    354|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|    354|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|    354|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm3ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|    889|  constexpr size_t Offset() const {
  390|    889|    static_assert(N < NumOffsets, "Index out of bounds");
  391|    889|    return adl_barrier::Align(
  392|    889|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|    889|        ElementAlignment<N>::value);
  394|    889|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm4EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|     74|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     74|    using C = typename std::remove_const<Char>::type;
  462|     74|    static_assert(
  463|     74|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     74|            std::is_same<C, signed char>(),
  465|     74|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     74|    constexpr size_t alignment = Alignment();
  467|     74|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     74|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     74|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E6OffsetILm4ETnNS4_9enable_ifIXneT_Li0EEiE4typeELi0EEEmv:
  389|    145|  constexpr size_t Offset() const {
  390|    145|    static_assert(N < NumOffsets, "Index out of bounds");
  391|    145|    return adl_barrier::Align(
  392|    145|        Offset<N - 1>() + SizeOf<ElementType<N - 1>>::value * size_[N - 1],
  393|    145|        ElementAlignment<N>::value);
  394|    145|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm0EKcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeEST_E4typeEPSQ_:
  460|    180|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|    180|    using C = typename std::remove_const<Char>::type;
  462|    180|    static_assert(
  463|    180|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|    180|            std::is_same<C, signed char>(),
  465|    180|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|    180|    constexpr size_t alignment = Alignment();
  467|    180|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|    180|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|    180|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E9AllocSizeEv:
  582|     33|  constexpr size_t AllocSize() const {
  583|     33|    static_assert(NumTypes == NumSizes, "You must specify sizes of all fields");
  584|     33|    return Offset<NumTypes - 1>() +
  585|     33|        SizeOf<ElementType<NumTypes - 1>>::value * size_[NumTypes - 1];
  586|     33|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm0EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|     20|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     20|    using C = typename std::remove_const<Char>::type;
  462|     20|    static_assert(
  463|     20|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     20|            std::is_same<C, signed char>(),
  465|     20|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     20|    constexpr size_t alignment = Alignment();
  467|     20|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     20|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     20|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm2EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|    182|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|    182|    using C = typename std::remove_const<Char>::type;
  462|    182|    static_assert(
  463|    182|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|    182|            std::is_same<C, signed char>(),
  465|    182|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|    182|    constexpr size_t alignment = Alignment();
  467|    182|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|    182|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|    182|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm3EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|    390|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|    390|    using C = typename std::remove_const<Char>::type;
  462|    390|    static_assert(
  463|    390|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|    390|            std::is_same<C, signed char>(),
  465|    390|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|    390|    constexpr size_t alignment = Alignment();
  467|    390|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|    390|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|    390|  }
_ZNK4absl12lts_2024011618container_internal15internal_layout10LayoutImplINSt3__15tupleIJPNS1_10btree_nodeINS1_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENSB_13SymbolCompareENS4_9allocatorISC_EELi256ELb0EEEEEjhSC_SI_EEENS4_16integer_sequenceImJLm0ELm1ELm2ELm3ELm4EEEESL_E7PointerILm4EcEEPNS4_11conditionalIXsr3std8is_constIT0_EE5valueEKNS4_13tuple_elementIXT_ESJ_E4typeESS_E4typeEPSP_:
  460|     38|  CopyConst<Char, ElementType<N>>* Pointer(Char* p) const {
  461|     38|    using C = typename std::remove_const<Char>::type;
  462|     38|    static_assert(
  463|     38|        std::is_same<C, char>() || std::is_same<C, unsigned char>() ||
  464|     38|            std::is_same<C, signed char>(),
  465|     38|        "The argument must be a pointer to [const] [signed|unsigned] char");
  466|     38|    constexpr size_t alignment = Alignment();
  467|     38|    (void)alignment;
  468|       |    assert(reinterpret_cast<uintptr_t>(p) % alignment == 0);
  469|     38|    return reinterpret_cast<CopyConst<Char, ElementType<N>>*>(p + Offset<N>());
  470|     38|  }

_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEEC2Ev:
   64|      5|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEEC2Ev:
   64|      2|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEEC2Ev:
   64|      2|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPKN6google8protobuf23SourceCodeInfo_LocationEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SF_EEEEEC2Ev:
   64|      4|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEEixISA_SI_TnPT_LPSA_0EEEDTclsrT0_5valueclL_ZNS4_9addressofB8nn220000ISN_EESS_RSR_EclL_ZNS4_7declvalB8nn220000IRSN_EEDTclsr3stdE9__declvalISR_ELi0EEEvEEEEEOSR_:
  179|    210|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  180|       |    // It is safe to use unchecked_deref here because try_emplace
  181|       |    // will always return an iterator pointing to a valid item in the table,
  182|       |    // since it inserts if nothing is found for the given key.
  183|    210|    return Policy::value(
  184|    210|        &this->unchecked_deref(try_emplace(std::forward<K>(key)).first));
  185|    210|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE11try_emplaceISA_JETnNS4_9enable_ifIXntsr3std14is_convertibleIT_NS1_12raw_hash_setISI_SJ_SK_SO_E14const_iteratorEEE5valueEiE4typeELi0ETnPSS_LPSA_0EEENSL_INSU_8iteratorEbEEOSS_DpOT0_:
  132|    210|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  133|    210|    return try_emplace_impl(std::forward<K>(k), std::forward<Args>(args)...);
  134|    210|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE16try_emplace_implISA_JEEENSL_INS1_12raw_hash_setISI_SJ_SK_SO_E8iteratorEbEEOT_DpOT0_:
  210|    210|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  211|    210|    auto res = this->find_or_prepare_insert(k);
  212|    210|    if (res.second)
  ------------------
  |  Branch (212:9): [True: 4, False: 206]
  ------------------
  213|      4|      this->emplace_at(res.first, std::piecewise_construct,
  214|      4|                       std::forward_as_tuple(std::forward<K>(k)),
  215|      4|                       std::forward_as_tuple(std::forward<Args>(args)...));
  216|    210|    return {this->iterator_at(res.first), res.second};
  217|    210|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEbEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_bEEEEEC2Ev:
   64|      2|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEEC2Ev:
   64|      4|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEES8_EENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_S8_EEEEEC2Ev:
   64|      4|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEEiEENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_iEEEEEC2Ev:
   64|      4|  raw_hash_map() {}
_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEEC2Ev:
   64|      6|  raw_hash_map() {}
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEEC2Ev:
   64|      2|  raw_hash_map() {}
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE11try_emplaceIS8_JRPKNS5_7MessageEETnNSH_9enable_ifIXntsr3std14is_convertibleIT_NS1_12raw_hash_setISC_SF_SG_SM_E14const_iteratorEEE5valueEiE4typeELi0EEENSJ_INSW_8iteratorEbEERKSU_DpOT0_:
  140|     10|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  141|     10|    return try_emplace_impl(k, std::forward<Args>(args)...);
  142|     10|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_mapINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE16try_emplace_implIRSK_JRPKNS5_7MessageEEEENSJ_INS1_12raw_hash_setISC_SF_SG_SM_E8iteratorEbEEOT_DpOT0_:
  210|     10|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  211|     10|    auto res = this->find_or_prepare_insert(k);
  212|     10|    if (res.second)
  ------------------
  |  Branch (212:9): [True: 10, False: 0]
  ------------------
  213|     10|      this->emplace_at(res.first, std::piecewise_construct,
  214|     10|                       std::forward_as_tuple(std::forward<K>(k)),
  215|     10|                       std::forward_as_tuple(std::forward<Args>(args)...));
  216|     10|    return {this->iterator_at(res.first), res.second};
  217|     10|  }

_ZNK4absl12lts_2024011618container_internal19HashSetResizeHelper38GrowIntoSingleGroupShuffleControlBytesEPNS1_6ctrl_tEm:
  276|     35|    ctrl_t* new_ctrl, size_t new_capacity) const {
  277|     35|  assert(is_single_group(new_capacity));
  278|     35|  constexpr size_t kHalfWidth = Group::kWidth / 2;
  279|     35|  assert(old_capacity_ < kHalfWidth);
  280|       |
  281|     35|  const size_t half_old_capacity = old_capacity_ / 2;
  282|       |
  283|       |  // NOTE: operations are done with compile time known size = kHalfWidth.
  284|       |  // Compiler optimizes that into single ASM operation.
  285|       |
  286|       |  // Copy second half of bytes to the beginning.
  287|       |  // We potentially copy more bytes in order to have compile time known size.
  288|       |  // Mirrored bytes from the old_ctrl_ will also be copied.
  289|       |  // In case of old_capacity_ == 3, we will copy 1st element twice.
  290|       |  // Examples:
  291|       |  // old_ctrl = 0S0EEEEEEE...
  292|       |  // new_ctrl = S0EEEEEEEE...
  293|       |  //
  294|       |  // old_ctrl = 01S01EEEEE...
  295|       |  // new_ctrl = 1S01EEEEEE...
  296|       |  //
  297|       |  // old_ctrl = 0123456S0123456EE...
  298|       |  // new_ctrl = 456S0123?????????...
  299|     35|  std::memcpy(new_ctrl, old_ctrl_ + half_old_capacity + 1, kHalfWidth);
  300|       |  // Clean up copied kSentinel from old_ctrl.
  301|     35|  new_ctrl[half_old_capacity] = ctrl_t::kEmpty;
  302|       |
  303|       |  // Clean up damaged or uninitialized bytes.
  304|       |
  305|       |  // Clean bytes after the intended size of the copy.
  306|       |  // Example:
  307|       |  // new_ctrl = 1E01EEEEEEE????
  308|       |  // *new_ctrl= 1E0EEEEEEEE????
  309|       |  // position      /
  310|     35|  std::memset(new_ctrl + old_capacity_ + 1, static_cast<int8_t>(ctrl_t::kEmpty),
  311|     35|              kHalfWidth);
  312|       |  // Clean non-mirrored bytes that are not initialized.
  313|       |  // For small old_capacity that may be inside of mirrored bytes zone.
  314|       |  // Examples:
  315|       |  // new_ctrl = 1E0EEEEEEEE??????????....
  316|       |  // *new_ctrl= 1E0EEEEEEEEEEEEE?????....
  317|       |  // position           /
  318|       |  //
  319|       |  // new_ctrl = 456E0123???????????...
  320|       |  // *new_ctrl= 456E0123EEEEEEEE???...
  321|       |  // position           /
  322|     35|  std::memset(new_ctrl + kHalfWidth, static_cast<int8_t>(ctrl_t::kEmpty),
  323|     35|              kHalfWidth);
  324|       |  // Clean last mirrored bytes that are not initialized
  325|       |  // and will not be overwritten by mirroring.
  326|       |  // Examples:
  327|       |  // new_ctrl = 1E0EEEEEEEEEEEEE????????
  328|       |  // *new_ctrl= 1E0EEEEEEEEEEEEEEEEEEEEE
  329|       |  // position           S       /
  330|       |  //
  331|       |  // new_ctrl = 456E0123EEEEEEEE???????????????
  332|       |  // *new_ctrl= 456E0123EEEEEEEE???????EEEEEEEE
  333|       |  // position                  S       /
  334|     35|  std::memset(new_ctrl + new_capacity + kHalfWidth,
  335|     35|              static_cast<int8_t>(ctrl_t::kEmpty), kHalfWidth);
  336|       |
  337|       |  // Create mirrored bytes. old_capacity_ < kHalfWidth
  338|       |  // Example:
  339|       |  // new_ctrl = 456E0123EEEEEEEE???????EEEEEEEE
  340|       |  // *new_ctrl= 456E0123EEEEEEEE456E0123EEEEEEE
  341|       |  // position                  S/
  342|     35|  ctrl_t g[kHalfWidth];
  343|     35|  std::memcpy(g, new_ctrl, kHalfWidth);
  344|     35|  std::memcpy(new_ctrl + new_capacity + 1, g, kHalfWidth);
  345|       |
  346|       |  // Finally set sentinel to its place.
  347|     35|  new_ctrl[new_capacity] = ctrl_t::kSentinel;
  348|     35|}
_ZNK4absl12lts_2024011618container_internal19HashSetResizeHelper43GrowIntoSingleGroupShuffleTransferableSlotsEPvS3_m:
  351|     27|    void* old_slots, void* new_slots, size_t slot_size) const {
  352|     27|  assert(old_capacity_ > 0);
  353|     27|  const size_t half_old_capacity = old_capacity_ / 2;
  354|       |
  355|     27|  SanitizerUnpoisonMemoryRegion(old_slots, slot_size * old_capacity_);
  356|     27|  std::memcpy(new_slots,
  357|     27|              SlotAddress(old_slots, half_old_capacity + 1, slot_size),
  358|     27|              slot_size * half_old_capacity);
  359|     27|  std::memcpy(SlotAddress(new_slots, half_old_capacity + 1, slot_size),
  360|     27|              old_slots, slot_size * (half_old_capacity + 1));
  361|     27|}
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper35GrowSizeIntoSingleGroupTransferableERNS1_12CommonFieldsEPvm:
  364|     27|    CommonFields& c, void* old_slots, size_t slot_size) {
  365|     27|  assert(old_capacity_ < Group::kWidth / 2);
  366|     27|  assert(is_single_group(c.capacity()));
  367|     27|  assert(IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity()));
  368|       |
  369|     27|  GrowIntoSingleGroupShuffleControlBytes(c.control(), c.capacity());
  370|     27|  GrowIntoSingleGroupShuffleTransferableSlots(old_slots, c.slot_array(),
  371|     27|                                              slot_size);
  372|       |
  373|       |  // We poison since GrowIntoSingleGroupShuffleTransferableSlots
  374|       |  // may leave empty slots unpoisoned.
  375|     27|  PoisonSingleGroupEmptySlots(c, slot_size);
  376|     27|}

_ZN4absl12lts_2024011618container_internal13GroupSse2ImplC2EPKNS1_6ctrl_tE:
  615|  71.4k|  explicit GroupSse2Impl(const ctrl_t* pos) {
  616|  71.4k|    ctrl = _mm_loadu_si128(reinterpret_cast<const __m128i*>(pos));
  617|  71.4k|  }
_ZNK4absl12lts_2024011618container_internal13GroupSse2Impl5MatchEh:
  620|  69.3k|  BitMask<uint16_t, kWidth> Match(h2_t hash) const {
  621|  69.3k|    auto match = _mm_set1_epi8(static_cast<char>(hash));
  622|  69.3k|    BitMask<uint16_t, kWidth> result = BitMask<uint16_t, kWidth>(0);
  623|  69.3k|    result = BitMask<uint16_t, kWidth>(
  624|  69.3k|        static_cast<uint16_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
  625|  69.3k|    return result;
  626|  69.3k|  }
_ZNK4absl12lts_2024011618container_internal13GroupSse2Impl9MaskEmptyEv:
  629|  1.56k|  NonIterableBitMask<uint16_t, kWidth> MaskEmpty() const {
  630|       |#ifdef ABSL_INTERNAL_HAVE_SSSE3
  631|       |    // This only works because ctrl_t::kEmpty is -128.
  632|       |    return NonIterableBitMask<uint16_t, kWidth>(
  633|       |        static_cast<uint16_t>(_mm_movemask_epi8(_mm_sign_epi8(ctrl, ctrl))));
  634|       |#else
  635|  1.56k|    auto match = _mm_set1_epi8(static_cast<char>(ctrl_t::kEmpty));
  636|  1.56k|    return NonIterableBitMask<uint16_t, kWidth>(
  637|  1.56k|        static_cast<uint16_t>(_mm_movemask_epi8(_mm_cmpeq_epi8(match, ctrl))));
  638|  1.56k|#endif
  639|  1.56k|  }
_ZNK4absl12lts_2024011618container_internal13GroupSse2Impl18MaskEmptyOrDeletedEv:
  650|  2.10k|  NonIterableBitMask<uint16_t, kWidth> MaskEmptyOrDeleted() const {
  651|  2.10k|    auto special = _mm_set1_epi8(static_cast<char>(ctrl_t::kSentinel));
  652|  2.10k|    return NonIterableBitMask<uint16_t, kWidth>(static_cast<uint16_t>(
  653|  2.10k|        _mm_movemask_epi8(_mm_cmpgt_epi8_fixed(special, ctrl))));
  654|  2.10k|  }
_ZNK4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled41should_rehash_for_bug_detection_on_insertEPKNS1_6ctrl_tEm:
  926|    980|  bool should_rehash_for_bug_detection_on_insert(const ctrl_t*, size_t) const {
  927|    980|    return false;
  928|    980|  }
_ZN4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled36maybe_increment_generation_on_insertEv:
  932|    980|  void maybe_increment_generation_on_insert() {}
_ZN4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled19set_reserved_growthEm:
  936|     18|  void set_reserved_growth(size_t) {}
_ZN4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled20set_reservation_sizeEm:
  938|     18|  void set_reservation_size(size_t) {}
_ZNK4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled10generationEv:
  939|     72|  GenerationType generation() const { return 0; }
_ZN4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled14set_generationEh:
  940|     72|  void set_generation(GenerationType) {}
_ZNK4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled14generation_ptrEv:
  941|   137k|  GenerationType* generation_ptr() const { return nullptr; }
_ZN4absl12lts_2024011618container_internal34CommonFieldsGenerationInfoDisabled18set_generation_ptrEPh:
  942|     72|  void set_generation_ptr(GenerationType*) {}
_ZN4absl12lts_2024011618container_internal37HashSetIteratorGenerationInfoDisabledC2EPKh:
  965|   137k|  explicit HashSetIteratorGenerationInfoDisabled(const GenerationType*) {}
_ZNK4absl12lts_2024011618container_internal37HashSetIteratorGenerationInfoDisabled10generationEv:
  967|   207k|  GenerationType generation() const { return 0; }
_ZNK4absl12lts_2024011618container_internal37HashSetIteratorGenerationInfoDisabled14generation_ptrEv:
  969|   342k|  const GenerationType* generation_ptr() const { return nullptr; }
_ZNK4absl12lts_2024011618container_internal12CommonFields7controlEv:
 1038|   288k|  ctrl_t* control() const { return control_; }
_ZN4absl12lts_2024011618container_internal12CommonFields11set_controlEPNS1_6ctrl_tE:
 1039|     72|  void set_control(ctrl_t* c) { control_ = c; }
_ZNK4absl12lts_2024011618container_internal12CommonFields19backing_array_startEv:
 1040|      3|  void* backing_array_start() const {
 1041|       |    // growth_left (and maybe infoz) is stored before control bytes.
 1042|       |    assert(reinterpret_cast<uintptr_t>(control()) % alignof(size_t) == 0);
 1043|      3|    return control() - ControlOffset(has_infoz());
 1044|      3|  }
_ZNK4absl12lts_2024011618container_internal12CommonFields10slot_arrayEv:
 1047|   140k|  void* slot_array() const { return slots_; }
_ZN4absl12lts_2024011618container_internal12CommonFields9set_slotsEPv:
 1048|     72|  void set_slots(void* s) { slots_ = s; }
_ZNK4absl12lts_2024011618container_internal12CommonFields4sizeEv:
 1051|    172|  size_t size() const { return size_ >> HasInfozShift(); }
_ZN4absl12lts_2024011618container_internal12CommonFields14increment_sizeEv:
 1055|    980|  void increment_size() {
 1056|       |    assert(size() < capacity());
 1057|    980|    size_ += size_t{1} << HasInfozShift();
 1058|    980|  }
_ZNK4absl12lts_2024011618container_internal12CommonFields8capacityEv:
 1065|  75.4k|  size_t capacity() const { return capacity_; }
_ZN4absl12lts_2024011618container_internal12CommonFields12set_capacityEm:
 1066|     72|  void set_capacity(size_t c) {
 1067|       |    assert(c == 0 || IsValidCapacity(c));
 1068|     72|    capacity_ = c;
 1069|     72|  }
_ZNK4absl12lts_2024011618container_internal12CommonFields11growth_leftEv:
 1073|  1.96k|  size_t growth_left() const {
 1074|  1.96k|    const size_t* gl_ptr = reinterpret_cast<size_t*>(control()) - 1;
 1075|       |    assert(reinterpret_cast<uintptr_t>(gl_ptr) % alignof(size_t) == 0);
 1076|  1.96k|    return *gl_ptr;
 1077|  1.96k|  }
_ZN4absl12lts_2024011618container_internal12CommonFields15set_growth_leftEm:
 1078|  1.05k|  void set_growth_left(size_t gl) {
 1079|  1.05k|    size_t* gl_ptr = reinterpret_cast<size_t*>(control()) - 1;
 1080|       |    assert(reinterpret_cast<uintptr_t>(gl_ptr) % alignof(size_t) == 0);
 1081|  1.05k|    *gl_ptr = gl;
 1082|  1.05k|  }
_ZNK4absl12lts_2024011618container_internal12CommonFields9has_infozEv:
 1084|  1.13k|  bool has_infoz() const {
 1085|  1.13k|    return ABSL_PREDICT_FALSE((size_ & HasInfozMask()) != 0);
  ------------------
  |  |  178|  1.13k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:49): [Folded, False: 1.13k]
  |  |  |  Branch (178:58): [True: 0, False: 1.13k]
  |  |  ------------------
  ------------------
 1086|  1.13k|  }
_ZN4absl12lts_2024011618container_internal12CommonFields13set_has_infozEb:
 1087|     72|  void set_has_infoz(bool has_infoz) {
 1088|     72|    size_ = (size() << HasInfozShift()) | static_cast<size_t>(has_infoz);
 1089|     72|  }
_ZN4absl12lts_2024011618container_internal12CommonFields5infozEv:
 1091|  1.05k|  HashtablezInfoHandle infoz() {
 1092|  1.05k|    return has_infoz()
  ------------------
  |  Branch (1092:12): [True: 0, False: 1.05k]
  ------------------
 1093|  1.05k|               ? *reinterpret_cast<HashtablezInfoHandle*>(backing_array_start())
 1094|  1.05k|               : HashtablezInfoHandle();
 1095|  1.05k|  }
_ZNK4absl12lts_2024011618container_internal12CommonFields41should_rehash_for_bug_detection_on_insertEv:
 1101|    980|  bool should_rehash_for_bug_detection_on_insert() const {
 1102|    980|    return CommonFieldsGenerationInfo::
 1103|    980|        should_rehash_for_bug_detection_on_insert(control(), capacity());
 1104|    980|  }
_ZNK4absl12lts_2024011618container_internal12CommonFields10alloc_sizeEmm:
 1118|      3|  size_t alloc_size(size_t slot_size, size_t slot_align) const {
 1119|      3|    return AllocSize(capacity(), slot_size, slot_align, has_infoz());
 1120|      3|  }
_ZN4absl12lts_2024011618container_internal12CommonFields13HasInfozShiftEv:
 1130|  2.35k|  static constexpr size_t HasInfozShift() { return 1; }
_ZN4absl12lts_2024011618container_internal12CommonFields12HasInfozMaskEv:
 1131|  1.13k|  static constexpr size_t HasInfozMask() {
 1132|  1.13k|    return (size_t{1} << HasInfozShift()) - 1;
 1133|  1.13k|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelperC2ERNS1_12CommonFieldsE:
 1525|     72|      : old_ctrl_(c.control()),
 1526|     72|        old_capacity_(c.capacity()),
 1527|     72|        had_infoz_(c.has_infoz()) {}
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper27FindFirstNonFullAfterResizeERKNS1_12CommonFieldsEmm:
 1537|     72|                                              size_t hash) {
 1538|     72|    if (!IsGrowingIntoSingleGroupApplicable(old_capacity, c.capacity())) {
  ------------------
  |  Branch (1538:9): [True: 18, False: 54]
  ------------------
 1539|     18|      return find_first_non_full(c, hash);
 1540|     18|    }
 1541|       |    // Find a location for the new element non-deterministically.
 1542|       |    // Note that any position is correct.
 1543|       |    // It will located at `half_old_capacity` or one of the other
 1544|       |    // empty slots with approximately 50% probability each.
 1545|     54|    size_t offset = probe(c, hash).offset();
 1546|       |
 1547|       |    // Note that we intentionally use unsigned int underflow.
 1548|     54|    if (offset - (old_capacity + 1) >= old_capacity) {
  ------------------
  |  Branch (1548:9): [True: 41, False: 13]
  ------------------
 1549|       |      // Offset fall on kSentinel or into the mostly occupied first half.
 1550|     41|      offset = old_capacity / 2;
 1551|     41|    }
 1552|       |    assert(IsEmpty(c.control()[offset]));
 1553|     54|    return FindInfo{offset, 0};
 1554|     72|  }
_ZNK4absl12lts_2024011618container_internal19HashSetResizeHelper8old_ctrlEv:
 1556|  1.18k|  ctrl_t* old_ctrl() const { return old_ctrl_; }
_ZNK4absl12lts_2024011618container_internal19HashSetResizeHelper12old_capacityEv:
 1557|  1.27k|  size_t old_capacity() const { return old_capacity_; }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper34IsGrowingIntoSingleGroupApplicableEmm:
 1686|    144|                                                 size_t new_capacity) {
 1687|       |    // NOTE that `old_capacity < new_capacity` in order to have
 1688|       |    // `old_capacity < Group::kWidth / 2` to make faster copies of 8 bytes.
 1689|    144|    return is_single_group(new_capacity) && old_capacity < new_capacity;
  ------------------
  |  Branch (1689:12): [True: 108, False: 36]
  |  Branch (1689:45): [True: 108, False: 0]
  ------------------
 1690|    144|  }
_ZNK4absl12lts_2024011618container_internal19HashSetResizeHelper27PoisonSingleGroupEmptySlotsERNS1_12CommonFieldsEm:
 1753|     35|  void PoisonSingleGroupEmptySlots(CommonFields& c, size_t slot_size) const {
 1754|       |    // poison non full items
 1755|    296|    for (size_t i = 0; i < c.capacity(); ++i) {
  ------------------
  |  Branch (1755:24): [True: 261, False: 35]
  ------------------
 1756|    261|      if (!IsFull(c.control()[i])) {
  ------------------
  |  Branch (1756:11): [True: 148, False: 113]
  ------------------
 1757|    148|        SanitizerPoisonMemoryRegion(SlotAddress(c.slot_array(), i, slot_size),
 1758|    148|                                    slot_size);
 1759|    148|      }
 1760|    261|    }
 1761|     35|  }
_ZN4absl12lts_2024011618container_internal23SentinelEmptyGenerationEv:
  252|     72|constexpr GenerationType SentinelEmptyGeneration() { return 0; }
_ZN4absl12lts_2024011618container_internal14NextGenerationEh:
  254|     72|constexpr GenerationType NextGeneration(GenerationType generation) {
  255|     72|  return ++generation == SentinelEmptyGeneration() ? ++generation : generation;
  ------------------
  |  Branch (255:10): [True: 0, False: 72]
  ------------------
  256|     72|}
_ZN4absl12lts_2024011618container_internal18NumGenerationBytesEv:
  263|    200|constexpr size_t NumGenerationBytes() { return 0; }
_ZN4absl12lts_2024011618container_internal10EmptyGroupEv:
  521|    143|inline ctrl_t* EmptyGroup() {
  522|       |  // Const must be cast away here; no uses of this function will actually write
  523|       |  // to it, because it is only used for empty tables.
  524|    143|  return const_cast<ctrl_t*>(kEmptyGroup + 16);
  525|    143|}
_ZN4absl12lts_2024011618container_internal12PerTableSaltEPKNS1_6ctrl_tE:
  545|  71.3k|inline size_t PerTableSalt(const ctrl_t* ctrl) {
  546|       |  // The low bits of the pointer have little or no entropy because of
  547|       |  // alignment. We shift the pointer to try to use higher entropy bits. A
  548|       |  // good number seems to be 12 bits, because that aligns with page size.
  549|  71.3k|  return reinterpret_cast<uintptr_t>(ctrl) >> 12;
  550|  71.3k|}
_ZN4absl12lts_2024011618container_internal2H1EmPKNS1_6ctrl_tE:
  552|  71.3k|inline size_t H1(size_t hash, const ctrl_t* ctrl) {
  553|  71.3k|  return (hash >> 7) ^ PerTableSalt(ctrl);
  554|  71.3k|}
_ZN4absl12lts_2024011618container_internal2H2Em:
  559|  71.3k|inline h2_t H2(size_t hash) { return hash & 0x7F; }
_ZN4absl12lts_2024011618container_internal7IsEmptyENS1_6ctrl_tE:
  562|    980|inline bool IsEmpty(ctrl_t c) { return c == ctrl_t::kEmpty; }
_ZN4absl12lts_2024011618container_internal6IsFullENS1_6ctrl_tE:
  563|  3.50k|inline bool IsFull(ctrl_t c) { return c >= static_cast<ctrl_t>(0); }
_ZN4absl12lts_2024011618container_internal9IsDeletedENS1_6ctrl_tE:
  564|     72|inline bool IsDeleted(ctrl_t c) { return c == ctrl_t::kDeleted; }
_ZN4absl12lts_2024011618container_internal16IsEmptyOrDeletedENS1_6ctrl_tE:
  565|      4|inline bool IsEmptyOrDeleted(ctrl_t c) { return c < ctrl_t::kSentinel; }
_ZN4absl12lts_2024011618container_internal20_mm_cmpgt_epi8_fixedEDv2_xS2_:
  601|  2.10k|inline __m128i _mm_cmpgt_epi8_fixed(__m128i a, __m128i b) {
  602|       |#if defined(__GNUC__) && !defined(__clang__)
  603|       |  if (std::is_unsigned<char>::value) {
  604|       |    const __m128i mask = _mm_set1_epi8(0x80);
  605|       |    const __m128i diff = _mm_subs_epi8(b, a);
  606|       |    return _mm_cmpeq_epi8(_mm_and_si128(diff, mask), mask);
  607|       |  }
  608|       |#endif
  609|  2.10k|  return _mm_cmpgt_epi8(a, b);
  610|  2.10k|}
_ZN4absl12lts_2024011618container_internal13ControlOffsetEb:
  988|    400|inline size_t ControlOffset(bool has_infoz) {
  989|    400|  return (has_infoz ? sizeof(HashtablezInfoHandle) : 0) + sizeof(size_t);
  ------------------
  |  Branch (989:11): [True: 0, False: 400]
  ------------------
  990|    400|}
_ZN4absl12lts_2024011618container_internal14NumClonedBytesEv:
  997|  4.36k|constexpr size_t NumClonedBytes() { return Group::kWidth - 1; }
_ZN4absl12lts_2024011618container_internal16GenerationOffsetEmb:
 1001|    272|inline size_t GenerationOffset(size_t capacity, bool has_infoz) {
 1002|       |  assert(IsValidCapacity(capacity));
 1003|    272|  const size_t num_control_bytes = capacity + 1 + NumClonedBytes();
 1004|    272|  return ControlOffset(has_infoz) + num_control_bytes;
 1005|    272|}
_ZN4absl12lts_2024011618container_internal10SlotOffsetEmmb:
 1009|    200|inline size_t SlotOffset(size_t capacity, size_t slot_align, bool has_infoz) {
 1010|       |  assert(IsValidCapacity(capacity));
 1011|    200|  return (GenerationOffset(capacity, has_infoz) + NumGenerationBytes() +
 1012|    200|          slot_align - 1) &
 1013|    200|         (~slot_align + 1);
 1014|    200|}
_ZN4absl12lts_2024011618container_internal9AllocSizeEmmmb:
 1019|    128|                        bool has_infoz) {
 1020|    128|  return SlotOffset(capacity, slot_align, has_infoz) + capacity * slot_size;
 1021|    128|}
_ZN4absl12lts_2024011618container_internal12NextCapacityEm:
 1167|     72|inline size_t NextCapacity(size_t n) {
 1168|       |  assert(IsValidCapacity(n) || n == 0);
 1169|     72|  return n * 2 + 1;
 1170|     72|}
_ZN4absl12lts_2024011618container_internal16CapacityToGrowthEm:
 1197|     72|inline size_t CapacityToGrowth(size_t capacity) {
 1198|     72|  assert(IsValidCapacity(capacity));
 1199|       |  // `capacity*7/8`
 1200|     72|  if (Group::kWidth == 8 && capacity == 7) {
  ------------------
  |  Branch (1200:7): [Folded, False: 72]
  |  Branch (1200:29): [True: 0, False: 0]
  ------------------
 1201|       |    // x-x/8 does not work when x==7.
 1202|      0|    return 6;
 1203|      0|  }
 1204|     72|  return capacity - capacity / 8;
 1205|     72|}
_ZN4absl12lts_2024011618container_internal12AssertIsFullEPKNS1_6ctrl_tEhPKhPKc:
 1248|  71.5k|                         const char* operation) {
 1249|  71.5k|  if (!SwisstableDebugEnabled()) return;
  ------------------
  |  Branch (1249:7): [True: 71.5k, Folded]
  ------------------
 1250|       |  // `SwisstableDebugEnabled()` is also true for release builds with hardening
 1251|       |  // enabled. To minimize their impact in those builds:
 1252|       |  // - use `ABSL_PREDICT_FALSE()` to provide a compiler hint for code layout
 1253|       |  // - use `ABSL_RAW_LOG()` with a format string to reduce code size and improve
 1254|       |  //   the chances that the hot paths will be inlined.
 1255|      0|  if (ABSL_PREDICT_FALSE(ctrl == nullptr)) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1256|      0|    ABSL_RAW_LOG(FATAL, "%s called on end() iterator.", operation);
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1257|      0|  }
 1258|      0|  if (ABSL_PREDICT_FALSE(ctrl == EmptyGroup())) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1259|      0|    ABSL_RAW_LOG(FATAL, "%s called on default-constructed iterator.",
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1260|      0|                 operation);
 1261|      0|  }
 1262|      0|  if (SwisstableGenerationsEnabled()) {
  ------------------
  |  Branch (1262:7): [Folded, False: 0]
  ------------------
 1263|      0|    if (ABSL_PREDICT_FALSE(generation != *generation_ptr)) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1264|      0|      ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1265|      0|                   "%s called on invalid iterator. The table could have "
 1266|      0|                   "rehashed or moved since this iterator was initialized.",
 1267|      0|                   operation);
 1268|      0|    }
 1269|      0|    if (ABSL_PREDICT_FALSE(!IsFull(*ctrl))) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1270|      0|      ABSL_RAW_LOG(
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1271|      0|          FATAL,
 1272|      0|          "%s called on invalid iterator. The element was likely erased.",
 1273|      0|          operation);
 1274|      0|    }
 1275|      0|  } else {
 1276|      0|    if (ABSL_PREDICT_FALSE(!IsFull(*ctrl))) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1277|       |      ABSL_RAW_LOG(
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1278|      0|          FATAL,
 1279|      0|          "%s called on invalid iterator. The element might have been erased "
 1280|      0|          "or the table might have rehashed. Consider running with "
 1281|      0|          "--config=asan to diagnose rehashing issues.",
 1282|      0|          operation);
 1283|      0|    }
 1284|      0|  }
 1285|      0|}
_ZN4absl12lts_2024011618container_internal26AssertIsValidForComparisonEPKNS1_6ctrl_tEhPKh:
 1290|   135k|                                       const GenerationType* generation_ptr) {
 1291|   135k|  if (!SwisstableDebugEnabled()) return;
  ------------------
  |  Branch (1291:7): [True: 135k, Folded]
  ------------------
 1292|      0|  const bool ctrl_is_valid_for_comparison =
 1293|      0|      ctrl == nullptr || ctrl == EmptyGroup() || IsFull(*ctrl);
  ------------------
  |  Branch (1293:7): [True: 0, False: 0]
  |  Branch (1293:26): [True: 0, False: 0]
  |  Branch (1293:50): [True: 0, False: 0]
  ------------------
 1294|      0|  if (SwisstableGenerationsEnabled()) {
  ------------------
  |  Branch (1294:7): [Folded, False: 0]
  ------------------
 1295|      0|    if (ABSL_PREDICT_FALSE(generation != *generation_ptr)) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1296|      0|      ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1297|      0|                   "Invalid iterator comparison. The table could have rehashed "
 1298|      0|                   "or moved since this iterator was initialized.");
 1299|      0|    }
 1300|      0|    if (ABSL_PREDICT_FALSE(!ctrl_is_valid_for_comparison)) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1301|      0|      ABSL_RAW_LOG(
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1302|      0|          FATAL, "Invalid iterator comparison. The element was likely erased.");
 1303|      0|    }
 1304|      0|  } else {
 1305|      0|    ABSL_HARDENING_ASSERT(
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1306|      0|        ctrl_is_valid_for_comparison &&
 1307|      0|        "Invalid iterator comparison. The element might have been erased or "
 1308|      0|        "the table might have rehashed. Consider running with --config=asan to "
 1309|      0|        "diagnose rehashing issues.");
 1310|      0|  }
 1311|      0|}
_ZN4absl12lts_2024011618container_internal19AssertSameContainerEPKNS1_6ctrl_tES4_RKPKvS8_PKhSA_:
 1339|  67.8k|                                const GenerationType* generation_ptr_b) {
 1340|  67.8k|  if (!SwisstableDebugEnabled()) return;
  ------------------
  |  Branch (1340:7): [True: 67.8k, Folded]
  ------------------
 1341|       |  // `SwisstableDebugEnabled()` is also true for release builds with hardening
 1342|       |  // enabled. To minimize their impact in those builds:
 1343|       |  // - use `ABSL_PREDICT_FALSE()` to provide a compiler hint for code layout
 1344|       |  // - use `ABSL_RAW_LOG()` with a format string to reduce code size and improve
 1345|       |  //   the chances that the hot paths will be inlined.
 1346|      0|  const bool a_is_default = ctrl_a == EmptyGroup();
 1347|      0|  const bool b_is_default = ctrl_b == EmptyGroup();
 1348|      0|  if (ABSL_PREDICT_FALSE(a_is_default != b_is_default)) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1349|      0|    ABSL_RAW_LOG(
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1350|      0|        FATAL,
 1351|      0|        "Invalid iterator comparison. Comparing default-constructed iterator "
 1352|      0|        "with non-default-constructed iterator.");
 1353|      0|  }
 1354|      0|  if (a_is_default && b_is_default) return;
  ------------------
  |  Branch (1354:7): [True: 0, False: 0]
  |  Branch (1354:23): [True: 0, False: 0]
  ------------------
 1355|       |
 1356|      0|  if (SwisstableGenerationsEnabled()) {
  ------------------
  |  Branch (1356:7): [Folded, False: 0]
  ------------------
 1357|      0|    if (ABSL_PREDICT_TRUE(generation_ptr_a == generation_ptr_b)) return;
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1358|      0|    const bool a_is_empty = IsEmptyGeneration(generation_ptr_a);
 1359|      0|    const bool b_is_empty = IsEmptyGeneration(generation_ptr_b);
 1360|      0|    if (a_is_empty != b_is_empty) {
  ------------------
  |  Branch (1360:9): [True: 0, False: 0]
  ------------------
 1361|      0|      ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1362|      0|                   "Invalid iterator comparison. Comparing iterator from a "
 1363|      0|                   "non-empty hashtable with an iterator from an empty "
 1364|      0|                   "hashtable.");
 1365|      0|    }
 1366|      0|    if (a_is_empty && b_is_empty) {
  ------------------
  |  Branch (1366:9): [True: 0, False: 0]
  |  Branch (1366:23): [True: 0, False: 0]
  ------------------
 1367|      0|      ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1368|      0|                   "Invalid iterator comparison. Comparing iterators from "
 1369|      0|                   "different empty hashtables.");
 1370|      0|    }
 1371|      0|    const bool a_is_end = ctrl_a == nullptr;
 1372|      0|    const bool b_is_end = ctrl_b == nullptr;
 1373|      0|    if (a_is_end || b_is_end) {
  ------------------
  |  Branch (1373:9): [True: 0, False: 0]
  |  Branch (1373:21): [True: 0, False: 0]
  ------------------
 1374|      0|      ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1375|      0|                   "Invalid iterator comparison. Comparing iterator with an "
 1376|      0|                   "end() iterator from a different hashtable.");
 1377|      0|    }
 1378|      0|    ABSL_RAW_LOG(FATAL,
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1379|      0|                 "Invalid iterator comparison. Comparing non-end() iterators "
 1380|      0|                 "from different hashtables.");
 1381|      0|  } else {
 1382|      0|    ABSL_HARDENING_ASSERT(
  ------------------
  |  |  128|      0|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|      0|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, False: 0]
  |  |  |  |  |  Branch (95:30): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1383|      0|        AreItersFromSameContainer(ctrl_a, ctrl_b, slot_a, slot_b) &&
 1384|      0|        "Invalid iterator comparison. The iterators may be from different "
 1385|      0|        "containers or the container might have rehashed or moved. Consider "
 1386|      0|        "running with --config=asan to diagnose issues.");
 1387|      0|  }
 1388|      0|}
_ZN4absl12lts_2024011618container_internal15is_single_groupEm:
 1411|    144|inline bool is_single_group(size_t capacity) {
 1412|    144|  return capacity <= Group::kWidth;
 1413|    144|}
_ZN4absl12lts_2024011618container_internal5probeEPKNS1_6ctrl_tEmm:
 1417|  71.3k|                                      size_t hash) {
 1418|  71.3k|  return probe_seq<Group::kWidth>(H1(hash, ctrl), capacity);
 1419|  71.3k|}
_ZN4absl12lts_2024011618container_internal5probeERKNS1_12CommonFieldsEm:
 1420|  71.3k|inline probe_seq<Group::kWidth> probe(const CommonFields& common, size_t hash) {
 1421|  71.3k|  return probe(common.control(), common.capacity(), hash);
 1422|  71.3k|}
_ZN4absl12lts_2024011618container_internal15ResetGrowthLeftERNS1_12CommonFieldsE:
 1464|     72|inline void ResetGrowthLeft(CommonFields& common) {
 1465|     72|  common.set_growth_left(CapacityToGrowth(common.capacity()) - common.size());
 1466|     72|}
_ZN4absl12lts_2024011618container_internal9ResetCtrlERNS1_12CommonFieldsEm:
 1470|     37|inline void ResetCtrl(CommonFields& common, size_t slot_size) {
 1471|     37|  const size_t capacity = common.capacity();
 1472|     37|  ctrl_t* ctrl = common.control();
 1473|     37|  std::memset(ctrl, static_cast<int8_t>(ctrl_t::kEmpty),
 1474|     37|              capacity + 1 + NumClonedBytes());
 1475|     37|  ctrl[capacity] = ctrl_t::kSentinel;
 1476|     37|  SanitizerPoisonMemoryRegion(common.slot_array(), slot_size * capacity);
 1477|     37|}
_ZN4absl12lts_2024011618container_internal7SetCtrlERKNS1_12CommonFieldsEmNS1_6ctrl_tEm:
 1484|  2.03k|                    size_t slot_size) {
 1485|  2.03k|  const size_t capacity = common.capacity();
 1486|  2.03k|  assert(i < capacity);
 1487|       |
 1488|  2.03k|  auto* slot_i = static_cast<const char*>(common.slot_array()) + i * slot_size;
 1489|  2.03k|  if (IsFull(h)) {
  ------------------
  |  Branch (1489:7): [True: 2.03k, False: 0]
  ------------------
 1490|  2.03k|    SanitizerUnpoisonMemoryRegion(slot_i, slot_size);
 1491|  2.03k|  } else {
 1492|      0|    SanitizerPoisonMemoryRegion(slot_i, slot_size);
 1493|      0|  }
 1494|       |
 1495|  2.03k|  ctrl_t* ctrl = common.control();
 1496|  2.03k|  ctrl[i] = h;
 1497|  2.03k|  ctrl[((i - NumClonedBytes()) & capacity) + (NumClonedBytes() & capacity)] = h;
 1498|  2.03k|}
_ZN4absl12lts_2024011618container_internal7SetCtrlERKNS1_12CommonFieldsEmhm:
 1502|  2.03k|                    size_t slot_size) {
 1503|  2.03k|  SetCtrl(common, i, static_cast<ctrl_t>(h), slot_size);
 1504|  2.03k|}
_ZN4absl12lts_2024011618container_internal11SlotAddressEPvmm:
 1513|    202|inline void* SlotAddress(void* slot_array, size_t slot, size_t slot_size) {
 1514|    202|  return reinterpret_cast<void*>(reinterpret_cast<char*>(slot_array) +
 1515|    202|                                 (slot * slot_size));
 1516|    202|}
_ZN4absl12lts_2024011618container_internal19find_first_non_fullIvEENS1_8FindInfoERKNS1_12CommonFieldsEm:
 1432|  2.04k|inline FindInfo find_first_non_full(const CommonFields& common, size_t hash) {
 1433|  2.04k|  auto seq = probe(common, hash);
 1434|  2.04k|  const ctrl_t* ctrl = common.control();
 1435|  2.10k|  while (true) {
  ------------------
  |  Branch (1435:10): [True: 2.10k, Folded]
  ------------------
 1436|  2.10k|    GroupEmptyOrDeleted g{ctrl + seq.offset()};
 1437|  2.10k|    auto mask = g.MaskEmptyOrDeleted();
 1438|  2.10k|    if (mask) {
  ------------------
  |  Branch (1438:9): [True: 2.04k, False: 54]
  ------------------
 1439|       |#if !defined(NDEBUG)
 1440|       |      // We want to add entropy even when ASLR is not enabled.
 1441|       |      // In debug build we will randomly insert in either the front or back of
 1442|       |      // the group.
 1443|       |      // TODO(kfm,sbenza): revisit after we do unconditional mixing
 1444|       |      if (!is_small(common.capacity()) && ShouldInsertBackwards(hash, ctrl)) {
 1445|       |        return {seq.offset(mask.HighestBitSet()), seq.index()};
 1446|       |      }
 1447|       |#endif
 1448|  2.04k|      return {seq.offset(mask.LowestBitSet()), seq.index()};
 1449|  2.04k|    }
 1450|     54|    seq.next();
 1451|       |    assert(seq.index() <= common.capacity() && "full table!");
 1452|     54|  }
 1453|  2.04k|}
_ZNK4absl12lts_2024011618container_internal18NonIterableBitMaskItLi16ELi0EEcvbEv:
  391|  3.66k|  explicit operator bool() const { return this->mask_ != 0; }
_ZNK4absl12lts_2024011618container_internal9probe_seqILm16EE6offsetEm:
  324|   137k|  size_t offset(size_t i) const { return (offset_ + i) & mask_; }
_ZNK4absl12lts_2024011618container_internal18NonIterableBitMaskItLi16ELi0EE12LowestBitSetEv:
  394|  69.9k|  uint32_t LowestBitSet() const {
  395|  69.9k|    return container_internal::TrailingZeros(mask_) >> Shift;
  396|  69.9k|  }
_ZN4absl12lts_2024011618container_internal13TrailingZerosItEEjT_:
  372|  69.9k|uint32_t TrailingZeros(T x) {
  373|  69.9k|  ABSL_ASSUME(x != 0);
  ------------------
  |  |  259|  69.9k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
  374|  69.9k|  return static_cast<uint32_t>(countr_zero(x));
  375|  69.9k|}
_ZNK4absl12lts_2024011618container_internal9probe_seqILm16EE5indexEv:
  332|  2.04k|  size_t index() const { return index_; }
_ZN4absl12lts_2024011618container_internal9probe_seqILm16EE4nextEv:
  326|    108|  void next() {
  327|    108|    index_ += Width;
  328|    108|    offset_ += index_;
  329|    108|    offset_ &= mask_;
  330|    108|  }
_ZNK4absl12lts_2024011618container_internal9probe_seqILm16EE6offsetEv:
  323|  71.4k|  size_t offset() const { return offset_; }
_ZNK4absl12lts_2024011618container_internal7BitMaskItLi16ELi0EE5beginEv:
  454|  69.3k|  BitMask begin() const { return *this; }
_ZNK4absl12lts_2024011618container_internal7BitMaskItLi16ELi0EE3endEv:
  455|  69.3k|  BitMask end() const { return BitMask(0); }
_ZN4absl12lts_2024011618container_internalneERKNS1_7BitMaskItLi16ELi0EEES5_:
  461|  69.4k|  friend bool operator!=(const BitMask& a, const BitMask& b) {
  462|  69.4k|    return a.mask_ != b.mask_;
  463|  69.4k|  }
_ZN4absl12lts_2024011618container_internal7BitMaskItLi16ELi0EEppEv:
  443|     96|  BitMask& operator++() {
  444|     96|    if (Shift == 3) {
  ------------------
  |  Branch (444:9): [Folded, False: 96]
  ------------------
  445|      0|      constexpr uint64_t msbs = 0x8080808080808080ULL;
  446|      0|      this->mask_ &= msbs;
  447|      0|    }
  448|     96|    this->mask_ &= (this->mask_ - 1);
  449|     96|    return *this;
  450|     96|  }
_ZNK4absl12lts_2024011618container_internal7BitMaskItLi16ELi0EEdeEv:
  452|  67.8k|  uint32_t operator*() const { return Base::LowestBitSet(); }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper15InitializeSlotsINSt3__19allocatorIcEELm16ELb1ELm8EEEbRNS1_12CommonFieldsEPvT_:
 1595|      7|                                               Alloc alloc) {
 1596|      7|    assert(c.capacity());
 1597|       |    // Folks with custom allocators often make unwarranted assumptions about the
 1598|       |    // behavior of their classes vis-a-vis trivial destructability and what
 1599|       |    // calls they will or won't make.  Avoid sampling for people with custom
 1600|       |    // allocators to get us out of this mess.  This is not a hard guarantee but
 1601|       |    // a workaround while we plan the exact guarantee we want to provide.
 1602|      7|    const size_t sample_size =
 1603|      7|        (std::is_same<Alloc, std::allocator<char>>::value &&
  ------------------
  |  Branch (1603:10): [True: 7, Folded]
  ------------------
 1604|      7|         c.slot_array() == nullptr)
  ------------------
  |  Branch (1604:10): [True: 4, False: 3]
  ------------------
 1605|      7|            ? SizeOfSlot
 1606|      7|            : 0;
 1607|      7|    HashtablezInfoHandle infoz =
 1608|      7|        sample_size > 0 ? Sample(sample_size) : c.infoz();
  ------------------
  |  Branch (1608:9): [True: 4, False: 3]
  ------------------
 1609|       |
 1610|      7|    const bool has_infoz = infoz.IsSampled();
 1611|      7|    const size_t cap = c.capacity();
 1612|      7|    const size_t alloc_size =
 1613|      7|        AllocSize(cap, SizeOfSlot, AlignOfSlot, has_infoz);
 1614|      7|    char* mem = static_cast<char*>(
 1615|      7|        Allocate<BackingArrayAlignment(AlignOfSlot)>(&alloc, alloc_size));
 1616|      7|    const GenerationType old_generation = c.generation();
 1617|      7|    c.set_generation_ptr(reinterpret_cast<GenerationType*>(
 1618|      7|        mem + GenerationOffset(cap, has_infoz)));
 1619|      7|    c.set_generation(NextGeneration(old_generation));
 1620|      7|    c.set_control(reinterpret_cast<ctrl_t*>(mem + ControlOffset(has_infoz)));
 1621|      7|    c.set_slots(mem + SlotOffset(cap, AlignOfSlot, has_infoz));
 1622|      7|    ResetGrowthLeft(c);
 1623|       |
 1624|      7|    const bool grow_single_group =
 1625|      7|        IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity());
 1626|      7|    if (old_capacity_ != 0 && grow_single_group) {
  ------------------
  |  Branch (1626:9): [True: 3, False: 4]
  |  Branch (1626:31): [True: 3, False: 0]
  ------------------
 1627|      3|      if (TransferUsesMemcpy) {
  ------------------
  |  Branch (1627:11): [True: 3, Folded]
  ------------------
 1628|      3|        GrowSizeIntoSingleGroupTransferable(c, old_slots, SizeOfSlot);
 1629|      3|        DeallocateOld<AlignOfSlot>(alloc, SizeOfSlot, old_slots);
 1630|      3|      } else {
 1631|      0|        GrowIntoSingleGroupShuffleControlBytes(c.control(), c.capacity());
 1632|      0|      }
 1633|      4|    } else {
 1634|      4|      ResetCtrl(c, SizeOfSlot);
 1635|      4|    }
 1636|       |
 1637|      7|    c.set_has_infoz(has_infoz);
 1638|      7|    if (has_infoz) {
  ------------------
  |  Branch (1638:9): [True: 0, False: 7]
  ------------------
 1639|      0|      infoz.RecordStorageChanged(c.size(), cap);
 1640|      0|      if (grow_single_group || old_capacity_ == 0) {
  ------------------
  |  Branch (1640:11): [True: 0, False: 0]
  |  Branch (1640:32): [True: 0, False: 0]
  ------------------
 1641|      0|        infoz.RecordRehash(0);
 1642|      0|      }
 1643|      0|      c.set_infoz(infoz);
 1644|      0|    }
 1645|      7|    return grow_single_group;
 1646|      7|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper13DeallocateOldILm8ENSt3__19allocatorIcEEEEvT0_mPv:
 1676|     53|  void DeallocateOld(CharAlloc alloc_ref, size_t slot_size, void* old_slots) {
 1677|     53|    SanitizerUnpoisonMemoryRegion(old_slots, slot_size * old_capacity_);
 1678|     53|    Deallocate<BackingArrayAlignment(AlignOfSlot)>(
 1679|     53|        &alloc_ref, old_ctrl_ - ControlOffset(had_infoz_),
 1680|     53|        AllocSize(old_capacity_, slot_size, AlignOfSlot, had_infoz_));
 1681|     53|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE8capacityEv:
 2288|      6|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE6commonEv:
 3194|  1.07k|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE7controlEv:
 3196|    637|  ctrl_t* control() const { return common().control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE10slot_arrayEv:
 3197|    423|  slot_type* slot_array() const {
 3198|    423|    return static_cast<slot_type*>(common().slot_array());
 3199|    423|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE9alloc_refEv:
 3206|     11|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE5infozEv:
 3200|      4|  HashtablezInfoHandle infoz() { return common().infoz(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE6commonEv:
 3193|    462|  CommonFields& common() { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8capacityEv:
 2288|      6|  size_t capacity() const { return common().capacity(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE6commonEv:
 3194|    112|  const CommonFields& common() const { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE7controlEv:
 3196|     53|  ctrl_t* control() const { return common().control(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE10slot_arrayEv:
 3197|     31|  slot_type* slot_array() const {
 3198|     31|    return static_cast<slot_type*>(common().slot_array());
 3199|     31|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE9alloc_refEv:
 3206|      7|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE5infozEv:
 3200|      4|  HashtablezInfoHandle infoz() { return common().infoz(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE6commonEv:
 3193|     76|  CommonFields& common() { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8capacityEv:
 2288|     18|  size_t capacity() const { return common().capacity(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE6commonEv:
 3194|  3.58k|  const CommonFields& common() const { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE7controlEv:
 3196|  1.76k|  ctrl_t* control() const { return common().control(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE10slot_arrayEv:
 3197|    974|  slot_type* slot_array() const {
 3198|    974|    return static_cast<slot_type*>(common().slot_array());
 3199|    974|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE9alloc_refEv:
 3206|    810|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE5infozEv:
 3200|    367|  HashtablezInfoHandle infoz() { return common().infoz(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE6commonEv:
 3193|  4.37k|  CommonFields& common() { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8capacityEv:
 2288|     20|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE6commonEv:
 3194|    437|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE7controlEv:
 3196|    229|  ctrl_t* control() const { return common().control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE10slot_arrayEv:
 3197|    124|  slot_type* slot_array() const {
 3198|    124|    return static_cast<slot_type*>(common().slot_array());
 3199|    124|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE9alloc_refEv:
 3206|     84|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE5infozEv:
 3200|     34|  HashtablezInfoHandle infoz() { return common().infoz(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE6commonEv:
 3193|    527|  CommonFields& common() { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8capacityEv:
 2288|     10|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE6commonEv:
 3194|     42|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE7controlEv:
 3196|     16|  ctrl_t* control() const { return common().control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE10slot_arrayEv:
 3197|      8|  slot_type* slot_array() const {
 3198|      8|    return static_cast<slot_type*>(common().slot_array());
 3199|      8|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE6commonEv:
 3193|     36|  CommonFields& common() { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8capacityEv:
 2288|     10|  size_t capacity() const { return common().capacity(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6commonEv:
 3194|    141|  const CommonFields& common() const { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE7controlEv:
 3196|     65|  ctrl_t* control() const { return common().control(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE10slot_arrayEv:
 3197|     36|  slot_type* slot_array() const {
 3198|     36|    return static_cast<slot_type*>(common().slot_array());
 3199|     36|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE9alloc_refEv:
 3206|     35|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE5infozEv:
 3200|     16|  HashtablezInfoHandle infoz() { return common().infoz(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6commonEv:
 3193|    184|  CommonFields& common() { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8capacityEv:
 2288|     16|  size_t capacity() const { return common().capacity(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6commonEv:
 3194|    841|  const CommonFields& common() const { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE7controlEv:
 3196|    408|  ctrl_t* control() const { return common().control(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE10slot_arrayEv:
 3197|    215|  slot_type* slot_array() const {
 3198|    215|    return static_cast<slot_type*>(common().slot_array());
 3199|    215|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE9alloc_refEv:
 3206|    209|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE5infozEv:
 3200|    103|  HashtablezInfoHandle infoz() { return common().infoz(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6commonEv:
 3193|  1.13k|  CommonFields& common() { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8capacityEv:
 2288|     42|  size_t capacity() const { return common().capacity(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE6commonEv:
 3194|   384k|  const CommonFields& common() const { return settings_.template get<0>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE7controlEv:
 3196|   192k|  ctrl_t* control() const { return common().control(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE10slot_arrayEv:
 3197|   127k|  slot_type* slot_array() const {
 3198|   127k|    return static_cast<slot_type*>(common().slot_array());
 3199|   127k|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE9alloc_refEv:
 3206|    947|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE5infozEv:
 3200|    450|  HashtablezInfoHandle infoz() { return common().infoz(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE6commonEv:
 3193|   132k|  CommonFields& common() { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEE6commonEv:
 3194|     14|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal9probe_seqILm16EEC2Emm:
  316|  71.3k|  probe_seq(size_t hash, size_t mask) {
  317|       |    assert(((mask + 1) & mask) == 0 && "not a mask");
  318|  71.3k|    mask_ = mask;
  319|  71.3k|    offset_ = hash & mask_;
  320|  71.3k|  }
_ZN4absl12lts_2024011618container_internal7BitMaskItLi16ELi0EEC2Et:
  437|   208k|  explicit BitMask(T mask) : Base(mask) {}
_ZN4absl12lts_2024011618container_internal18NonIterableBitMaskItLi16ELi0EEC2Et:
  389|   211k|  explicit NonIterableBitMask(T mask) : mask_(mask) {}
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE4findINS8_13FullNameQueryEEENSE_14const_iteratorERKT_:
 2718|    104|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|    104|    prefetch_heap_block();
 2720|    104|    return find(key, hash_ref()(key));
 2721|    104|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE19prefetch_heap_blockEv:
 3187|    466|  void prefetch_heap_block() const {
 3188|    466|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|    466|    __builtin_prefetch(control(), 0, 1);
 3190|    466|#endif
 3191|    466|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE4findINS8_13FullNameQueryEEENSE_14const_iteratorERKT_m:
 2713|    104|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|    104|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|    104|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE4findINS8_13FullNameQueryEEENSE_8iteratorERKT_m:
 2688|    104|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|    104|    auto seq = probe(common(), hash);
 2690|    104|    slot_type* slot_ptr = slot_array();
 2691|    104|    const ctrl_t* ctrl = control();
 2692|    105|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 105, Folded]
  ------------------
 2693|    105|      Group g{ctrl + seq.offset()};
 2694|    105|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 102, False: 6]
  ------------------
 2695|    102|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|    102|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 99, False: 3]
  |  |  |  Branch (179:48): [Folded, False: 102]
  |  |  |  Branch (179:57): [True: 99, False: 3]
  |  |  ------------------
  ------------------
 2696|    102|                EqualElement<K>{key, eq_ref()},
 2697|    102|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|     99|          return iterator_at(seq.offset(i));
 2699|    102|      }
 2700|      6|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|      6|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 5, False: 1]
  |  |  |  Branch (179:48): [Folded, False: 6]
  |  |  |  Branch (179:57): [True: 5, False: 1]
  |  |  ------------------
  ------------------
 2701|      1|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      1|    }
 2704|    104|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE12EqualElementINS8_13FullNameQueryEEclIS6_JRS6_EEEbRKT_DpOT0_:
 2813|    102|    bool operator()(const K2& lhs, Args&&...) const {
 2814|    102|      return eq(lhs, rhs);
 2815|    102|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE6eq_refEv:
 3204|    135|  key_equal& eq_ref() { return settings_.template get<2>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE11iterator_atEm:
 3159|    461|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|    461|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|    461|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8iteratorC2EPNS1_6ctrl_tEPS6_PKh:
 1984|    461|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|    461|          ctrl_(ctrl),
 1986|    461|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|    461|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|    461|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|    461|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE3endEv:
 2271|      5|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|      5|    return iterator(common().generation_ptr());
 2273|      5|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8iteratorC2EPKh:
 1993|    109|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE14const_iteratorC2ENSE_8iteratorE:
 2047|    208|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8hash_refEv:
 3203|    104|  const hasher& hash_ref() const { return settings_.template get<1>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE14const_iteratorESH_:
 2058|    104|    friend bool operator==(const const_iterator& a, const const_iterator& b) {
 2059|    104|      return a.inner_ == b.inner_;
 2060|    104|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8iteratorESH_:
 1970|    104|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|    104|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|    104|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|    104|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|    104|                          a.generation_ptr(), b.generation_ptr());
 1975|    104|      return a.ctrl_ == b.ctrl_;
 1976|    104|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE3endEv:
 2278|    104|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|    104|    return iterator(common().generation_ptr());
 2280|    104|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE14const_iteratordeEv:
 2049|     99|    reference operator*() const { return *inner_; }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8iteratordeEv:
 1944|     99|    reference operator*() const {
 1945|     99|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator*()");
 1946|     99|      return unchecked_deref();
 1947|     99|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8iterator15unchecked_derefEv:
 2029|     99|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEEC2Ev:
 2088|      5|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12CommonFieldsC2Ev:
 1028|    143|  CommonFields() = default;
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEE5emptyEv:
 2286|      9|  bool empty() const { return !size(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEE4sizeEv:
 2287|      9|  size_t size() const { return common().size(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEE8capacityEv:
 2288|      5|  size_t capacity() const { return common().capacity(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEED2Ev:
 2264|      5|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf14FileDescriptorENSt3__16vectorINS5_14DescriptorPool18DeferredValidation13LifetimesInfoENS9_9allocatorISD_EEEEEENS1_6HashEqIS8_vE4HashENSJ_2EqENSE_INS9_4pairIKS8_SG_EEEEE15destructor_implEv:
 2882|      5|  inline void destructor_impl() {
 2883|      5|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 5, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE19prefetch_heap_blockEv:
 3187|      8|  void prefetch_heap_block() const {
 3188|      8|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|      8|    __builtin_prefetch(control(), 0, 1);
 3190|      8|#endif
 3191|      8|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE4findINSF_17basic_string_viewIcNSF_11char_traitsIcEEEEEENSI_14const_iteratorERKT_:
 2718|     14|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|     14|    prefetch_heap_block();
 2720|     14|    return find(key, hash_ref()(key));
 2721|     14|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE19prefetch_heap_blockEv:
 3187|     18|  void prefetch_heap_block() const {
 3188|     18|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|     18|    __builtin_prefetch(control(), 0, 1);
 3190|     18|#endif
 3191|     18|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE4findINSF_17basic_string_viewIcNSF_11char_traitsIcEEEEEENSI_14const_iteratorERKT_m:
 2713|     14|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|     14|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|     14|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE4findINSF_17basic_string_viewIcNSF_11char_traitsIcEEEEEENSI_8iteratorERKT_m:
 2688|     14|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|     14|    auto seq = probe(common(), hash);
 2690|     14|    slot_type* slot_ptr = slot_array();
 2691|     14|    const ctrl_t* ctrl = control();
 2692|     14|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 14, Folded]
  ------------------
 2693|     14|      Group g{ctrl + seq.offset()};
 2694|     14|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 6, False: 8]
  ------------------
 2695|      6|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      6|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 6, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 6]
  |  |  |  Branch (179:57): [True: 6, False: 0]
  |  |  ------------------
  ------------------
 2696|      6|                EqualElement<K>{key, eq_ref()},
 2697|      6|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      6|          return iterator_at(seq.offset(i));
 2699|      6|      }
 2700|      8|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|      8|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 8, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 8]
  |  |  |  Branch (179:57): [True: 8, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|     14|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE12EqualElementINSF_17basic_string_viewIcNSF_11char_traitsIcEEEEEclIS8_JRS8_EEEbRKT_DpOT0_:
 2813|      6|    bool operator()(const K2& lhs, Args&&...) const {
 2814|      6|      return eq(lhs, rhs);
 2815|      6|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE6eq_refEv:
 3204|      6|  key_equal& eq_ref() { return settings_.template get<2>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE11iterator_atEm:
 3159|     10|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|     10|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|     10|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8iteratorC2EPNS1_6ctrl_tEPS8_PKh:
 1984|     10|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|     10|          ctrl_(ctrl),
 1986|     10|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|     10|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|     10|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|     10|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE3endEv:
 2271|      8|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|      8|    return iterator(common().generation_ptr());
 2273|      8|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8iteratorC2EPKh:
 1993|     22|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE14const_iteratorC2ENSI_8iteratorE:
 2047|     28|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8hash_refEv:
 3203|     14|  const hasher& hash_ref() const { return settings_.template get<1>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE14const_iteratorESL_:
 2058|     14|    friend bool operator==(const const_iterator& a, const const_iterator& b) {
 2059|     14|      return a.inner_ == b.inner_;
 2060|     14|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8iteratorESL_:
 1970|     14|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|     14|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|     14|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|     14|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|     14|                          a.generation_ptr(), b.generation_ptr());
 1975|     14|      return a.ctrl_ == b.ctrl_;
 1976|     14|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE3endEv:
 2278|     14|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|     14|    return iterator(common().generation_ptr());
 2280|     14|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE14const_iteratordeEv:
 2049|      6|    reference operator*() const { return *inner_; }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8iteratordeEv:
 1944|      6|    reference operator*() const {
 1945|      6|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator*()");
 1946|      6|      return unchecked_deref();
 1947|      6|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8iterator15unchecked_derefEv:
 2029|      6|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE19prefetch_heap_blockEv:
 3187|    100|  void prefetch_heap_block() const {
 3188|    100|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|    100|    __builtin_prefetch(control(), 0, 1);
 3190|    100|#endif
 3191|    100|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6eq_refEv:
 3204|      4|  key_equal& eq_ref() { return settings_.template get<2>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE11iterator_atEm:
 3159|    100|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|    100|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|    100|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8iteratorC2EPNS1_6ctrl_tEPS8_PKh:
 1984|    100|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|    100|          ctrl_(ctrl),
 1986|    100|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|    100|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|    100|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|    100|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE4findINS8_15ParentNameQueryEEENSE_14const_iteratorERKT_:
 2718|  63.5k|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|  63.5k|    prefetch_heap_block();
 2720|  63.5k|    return find(key, hash_ref()(key));
 2721|  63.5k|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE19prefetch_heap_blockEv:
 3187|  63.9k|  void prefetch_heap_block() const {
 3188|  63.9k|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|  63.9k|    __builtin_prefetch(control(), 0, 1);
 3190|  63.9k|#endif
 3191|  63.9k|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE4findINS8_15ParentNameQueryEEENSE_14const_iteratorERKT_m:
 2713|  63.5k|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|  63.5k|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|  63.5k|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE4findINS8_15ParentNameQueryEEENSE_8iteratorERKT_m:
 2688|  63.5k|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|  63.5k|    auto seq = probe(common(), hash);
 2690|  63.5k|    slot_type* slot_ptr = slot_array();
 2691|  63.5k|    const ctrl_t* ctrl = control();
 2692|  63.5k|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 63.5k, Folded]
  ------------------
 2693|  63.5k|      Group g{ctrl + seq.offset()};
 2694|  63.5k|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 63.4k, False: 72]
  ------------------
 2695|  63.4k|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|  63.4k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 63.4k, False: 6]
  |  |  |  Branch (179:48): [Folded, False: 63.4k]
  |  |  |  Branch (179:57): [True: 63.4k, False: 6]
  |  |  ------------------
  ------------------
 2696|  63.4k|                EqualElement<K>{key, eq_ref()},
 2697|  63.4k|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|  63.4k|          return iterator_at(seq.offset(i));
 2699|  63.4k|      }
 2700|     72|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|     72|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 72, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 72]
  |  |  |  Branch (179:57): [True: 72, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|  63.5k|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE12EqualElementINS8_15ParentNameQueryEEclIS6_JRS6_EEEbRKT_DpOT0_:
 2813|  63.4k|    bool operator()(const K2& lhs, Args&&...) const {
 2814|  63.4k|      return eq(lhs, rhs);
 2815|  63.4k|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE6eq_refEv:
 3204|  63.5k|  key_equal& eq_ref() { return settings_.template get<2>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE11iterator_atEm:
 3159|  63.9k|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|  63.9k|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|  63.9k|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8iteratorC2EPNS1_6ctrl_tEPS6_PKh:
 1984|  63.9k|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|  63.9k|          ctrl_(ctrl),
 1986|  63.9k|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|  63.9k|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|  63.9k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|  63.9k|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE3endEv:
 2271|     72|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|     72|    return iterator(common().generation_ptr());
 2273|     72|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8iteratorC2EPKh:
 1993|  63.6k|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE14const_iteratorC2ENSE_8iteratorE:
 2047|   127k|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8hash_refEv:
 3203|  63.5k|  const hasher& hash_ref() const { return settings_.template get<1>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE14const_iteratorESH_:
 2058|  63.5k|    friend bool operator==(const const_iterator& a, const const_iterator& b) {
 2059|  63.5k|      return a.inner_ == b.inner_;
 2060|  63.5k|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8iteratorESH_:
 1970|  63.5k|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|  63.5k|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|  63.5k|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|  63.5k|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|  63.5k|                          a.generation_ptr(), b.generation_ptr());
 1975|  63.5k|      return a.ctrl_ == b.ctrl_;
 1976|  63.5k|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE19prefetch_heap_blockEv:
 3187|     15|  void prefetch_heap_block() const {
 3188|     15|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|     15|    __builtin_prefetch(control(), 0, 1);
 3190|     15|#endif
 3191|     15|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE11iterator_atEm:
 3159|     15|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|     15|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|     15|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8iteratorC2EPNS1_6ctrl_tEPS8_PKh:
 1984|     15|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|     15|          ctrl_(ctrl),
 1986|     15|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|     15|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|     15|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|     15|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8hash_refEv:
 3202|     29|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIiEENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS8_9allocatorIiEEE6commonEv:
 3194|      4|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIiEENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS8_9allocatorIiEEE8capacityEv:
 2288|      4|  size_t capacity() const { return common().capacity(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIiEENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS8_9allocatorIiEEED2Ev:
 2264|      4|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIiEENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS8_9allocatorIiEEE15destructor_implEv:
 2882|      4|  inline void destructor_impl() {
 2883|      4|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 4, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEED2Ev:
 2264|      8|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE15destructor_implEv:
 2882|      8|  inline void destructor_impl() {
 2883|      8|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 8, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8capacityEv:
 2288|     16|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE6commonEv:
 3194|    315|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE7controlEv:
 3196|    196|  ctrl_t* control() const { return common().control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE10slot_arrayEv:
 3197|     98|  slot_type* slot_array() const {
 3198|     98|    return static_cast<slot_type*>(common().slot_array());
 3199|     98|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE6commonEv:
 3193|    309|  CommonFields& common() { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEED2Ev:
 2264|      4|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEE15destructor_implEv:
 2882|      4|  inline void destructor_impl() {
 2883|      4|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 4, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEE8capacityEv:
 2288|      4|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEE6commonEv:
 3194|      8|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEED2Ev:
 2264|     67|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE15destructor_implEv:
 2882|     67|  inline void destructor_impl() {
 2883|     67|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 64, False: 3]
  ------------------
 2884|      3|    destroy_slots();
 2885|      3|    dealloc();
 2886|      3|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE8capacityEv:
 2288|     79|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE6commonEv:
 3194|  1.28k|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE13destroy_slotsEv:
 2861|      3|  inline void destroy_slots() {
 2862|      3|    const size_t cap = capacity();
 2863|      3|    const ctrl_t* ctrl = control();
 2864|      3|    slot_type* slot = slot_array();
 2865|      6|    for (size_t i = 0; i != cap; ++i) {
  ------------------
  |  Branch (2865:24): [True: 3, False: 3]
  ------------------
 2866|      3|      if (IsFull(ctrl[i])) {
  ------------------
  |  Branch (2866:11): [True: 3, False: 0]
  ------------------
 2867|      3|        destroy(slot + i);
 2868|      3|      }
 2869|      3|    }
 2870|      3|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE7controlEv:
 3196|    600|  ctrl_t* control() const { return common().control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE10slot_arrayEv:
 3197|    306|  slot_type* slot_array() const {
 3198|    306|    return static_cast<slot_type*>(common().slot_array());
 3199|    306|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE7destroyEPS8_:
 2854|      3|  inline void destroy(slot_type* slot) {
 2855|      3|    PolicyTraits::destroy(&alloc_ref(), slot);
 2856|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE9alloc_refEv:
 3206|     12|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE7deallocEv:
 2872|      3|  inline void dealloc() {
 2873|      3|    assert(capacity() != 0);
 2874|       |    // Unpoison before returning the memory to the allocator.
 2875|      3|    SanitizerUnpoisonMemoryRegion(slot_array(), sizeof(slot_type) * capacity());
 2876|      3|    infoz().Unregister();
 2877|      3|    Deallocate<BackingArrayAlignment(alignof(slot_type))>(
 2878|      3|        &alloc_ref(), common().backing_array_start(),
 2879|      3|        common().alloc_size(sizeof(slot_type), alignof(slot_type)));
 2880|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE5infozEv:
 3200|      6|  HashtablezInfoHandle infoz() { return common().infoz(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE6commonEv:
 3193|    630|  CommonFields& common() { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE6resizeEm:
 2905|      3|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      3|    assert(IsValidCapacity(new_capacity));
 2907|      3|    HashSetResizeHelper resize_helper(common());
 2908|      3|    auto* old_slots = slot_array();
 2909|      3|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      3|    const bool grow_single_group =
 2914|      3|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      3|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      3|                                      alignof(slot_type)>(
 2917|      3|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      3|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      3|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 3, False: 0]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      3|      return;
 2923|      3|    }
 2924|       |
 2925|      0|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 0, False: 0]
  ------------------
 2926|      0|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [True: 0, Folded]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      0|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      0|                                                          old_slots);
 2934|      0|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      0|      auto* new_slots = slot_array();
 2937|      0|      size_t total_probe_length = 0;
 2938|      0|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 0, False: 0]
  ------------------
 2939|      0|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 0, False: 0]
  ------------------
 2940|      0|          size_t hash = PolicyTraits::apply(
 2941|      0|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|      0|          auto target = find_first_non_full(common(), hash);
 2943|      0|          size_t new_i = target.offset;
 2944|      0|          total_probe_length += target.probe_length;
 2945|      0|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|      0|          transfer(new_slots + new_i, old_slots + i);
 2947|      0|        }
 2948|      0|      }
 2949|      0|      infoz().RecordRehash(total_probe_length);
 2950|      0|    }
 2951|      0|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      0|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      0|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      0|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE8hash_refEv:
 3202|      3|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE19prefetch_heap_blockEv:
 3187|    294|  void prefetch_heap_block() const {
 3188|    294|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|    294|    __builtin_prefetch(control(), 0, 1);
 3190|    294|#endif
 3191|    294|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE14prepare_insertEm:
 3110|      3|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|      3|    const bool rehash_for_bug_detection =
 3112|      3|        common().should_rehash_for_bug_detection_on_insert();
 3113|      3|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 3]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|      3|    auto target = find_first_non_full(common(), hash);
 3119|      3|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 3, False: 0]
  ------------------
 3120|      3|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|      6|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 3, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 3]
  |  |  |  Branch (178:59): [True: 3, False: 0]
  |  |  |  Branch (178:59): [True: 3, False: 0]
  |  |  ------------------
  ------------------
 3121|      3|                           !IsDeleted(control()[target.offset]))) {
 3122|      3|      size_t old_capacity = capacity();
 3123|      3|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      3|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      3|          common(), old_capacity, hash);
 3133|      3|    }
 3134|      3|    common().increment_size();
 3135|      3|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|      3|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|      3|    common().maybe_increment_generation_on_insert();
 3138|      3|    infoz().RecordInsert(hash, target.probe_length);
 3139|      3|    return target.offset;
 3140|      3|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE11growth_leftEv:
 3181|      6|  size_t growth_left() const { return common().growth_left(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE28rehash_and_grow_if_necessaryEv:
 2970|      3|  void rehash_and_grow_if_necessary() {
 2971|      3|    const size_t cap = capacity();
 2972|      3|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 3]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      3|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      3|      resize(NextCapacity(cap));
 3020|      3|    }
 3021|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE15set_growth_leftEm:
 3182|      3|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE11iterator_atEm:
 3159|      3|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|      3|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE8iteratorC2EPNS1_6ctrl_tEPS8_PKh:
 1984|      3|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|      3|          ctrl_(ctrl),
 1986|      3|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|      3|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|      3|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|      3|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE3endEv:
 2271|    291|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|    291|    return iterator(common().generation_ptr());
 2273|    291|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE8iteratorC2EPKh:
 1993|    582|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE14const_iteratorC2ENSE_8iteratorE:
 2047|    582|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE8hash_refEv:
 3203|    291|  const hasher& hash_ref() const { return settings_.template get<1>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE14const_iterator16unchecked_equalsERKSF_:
 2075|    291|    bool unchecked_equals(const const_iterator& b) {
 2076|    291|      return inner_.unchecked_equals(b.inner_);
 2077|    291|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE8iterator16unchecked_equalsERKSF_:
 2025|    291|    bool unchecked_equals(const iterator& b) { return ctrl_ == b.control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE8iterator7controlEv:
 2009|    291|    ctrl_t* control() const { return ctrl_; }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE3endEv:
 2278|    291|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|    291|    return iterator(common().generation_ptr());
 2280|    291|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE4findINS4_17basic_string_viewIcS7_EEEENSF_8iteratorERKT_m:
 2688|      4|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|      4|    auto seq = probe(common(), hash);
 2690|      4|    slot_type* slot_ptr = slot_array();
 2691|      4|    const ctrl_t* ctrl = control();
 2692|      4|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 4, Folded]
  ------------------
 2693|      4|      Group g{ctrl + seq.offset()};
 2694|      4|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 0, False: 4]
  ------------------
 2695|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2696|      0|                EqualElement<K>{key, eq_ref()},
 2697|      0|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      0|          return iterator_at(seq.offset(i));
 2699|      0|      }
 2700|      4|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|      4|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 4, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 4]
  |  |  |  Branch (179:57): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE3endEv:
 2271|      8|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|      8|    return iterator(common().generation_ptr());
 2273|      8|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8iteratorC2EPKh:
 1993|     16|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEEiEENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_iEEEEED2Ev:
 2264|      4|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEEiEENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_iEEEEE15destructor_implEv:
 2882|      4|  inline void destructor_impl() {
 2883|      4|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 4, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEEiEENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_iEEEEE8capacityEv:
 2288|      4|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEEiEENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_iEEEEE6commonEv:
 3194|      4|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEES8_EENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_S8_EEEEED2Ev:
 2264|      4|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEES8_EENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_S8_EEEEE15destructor_implEv:
 2882|      4|  inline void destructor_impl() {
 2883|      4|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 4, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEES8_EENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_S8_EEEEE8capacityEv:
 2288|      4|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEES8_EENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_S8_EEEEE6commonEv:
 3194|      4|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf10DescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE6insertESt16initializer_listINSI_ISA_SE_EEE:
 2385|      2|  void insert(std::initializer_list<init_type> ilist) {
 2386|      2|    insert(ilist.begin(), ilist.end());
 2387|      2|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE6insertIPKNSI_ISA_SE_EEEEvT_SR_:
 2376|      2|  void insert(InputIt first, InputIt last) {
 2377|     34|    for (; first != last; ++first) emplace(*first);
  ------------------
  |  Branch (2377:12): [True: 32, False: 2]
  ------------------
 2378|      2|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE7emplaceIJRKNSI_ISA_SE_EEETnNS4_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSI_INSM_8iteratorEbEEDpOSS_:
 2422|     32|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|     32|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|     32|                               std::forward<Args>(args)...);
 2425|     32|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE19EmplaceDecomposableclISA_JRKNS4_21piecewise_construct_tENS4_5tupleIJRSJ_EEENSS_IJRKSE_EEEEEENSI_INSM_8iteratorEbEERKT_DpOT0_:
 2822|     32|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|     32|      auto res = s.find_or_prepare_insert(key);
 2824|     32|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 32, False: 0]
  ------------------
 2825|     32|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|     32|      }
 2827|     32|      return {s.iterator_at(res.first), res.second};
 2828|     32|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE22find_or_prepare_insertISA_EENSI_ImbEERKT_:
 3086|     32|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|     32|    prefetch_heap_block();
 3088|     32|    auto hash = hash_ref()(key);
 3089|     32|    auto seq = probe(common(), hash);
 3090|     32|    const ctrl_t* ctrl = control();
 3091|     32|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 32, Folded]
  ------------------
 3092|     32|      Group g{ctrl + seq.offset()};
 3093|     32|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 2, False: 32]
  ------------------
 3094|      2|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      2|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 2]
  |  |  |  Branch (179:48): [Folded, False: 2]
  |  |  |  Branch (179:57): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3095|      2|                EqualElement<K>{key, eq_ref()},
 3096|      2|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      2|      }
 3099|     32|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|     32|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 32, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 32]
  |  |  |  Branch (179:57): [True: 32, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|     32|    return {prepare_insert(hash), true};
 3104|     32|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE19prefetch_heap_blockEv:
 3187|     77|  void prefetch_heap_block() const {
 3188|     77|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|     77|    __builtin_prefetch(control(), 0, 1);
 3190|     77|#endif
 3191|     77|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8hash_refEv:
 3202|    105|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE12EqualElementISA_EclISA_JRKNS4_21piecewise_construct_tENS4_5tupleIJRSJ_EEENST_IJRKSE_EEEEEEbRKT_DpOT0_:
 2813|      8|    bool operator()(const K2& lhs, Args&&...) const {
 2814|      8|      return eq(lhs, rhs);
 2815|      8|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE6eq_refEv:
 3204|      8|  key_equal& eq_ref() { return settings_.template get<2>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE14prepare_insertEm:
 3110|     32|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|     32|    const bool rehash_for_bug_detection =
 3112|     32|        common().should_rehash_for_bug_detection_on_insert();
 3113|     32|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 32]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|     32|    auto target = find_first_non_full(common(), hash);
 3119|     32|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 32, False: 0]
  ------------------
 3120|     32|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|     42|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 10, False: 22]
  |  |  |  Branch (178:49): [Folded, False: 32]
  |  |  |  Branch (178:59): [True: 10, False: 22]
  |  |  |  Branch (178:59): [True: 10, False: 0]
  |  |  ------------------
  ------------------
 3121|     32|                           !IsDeleted(control()[target.offset]))) {
 3122|     10|      size_t old_capacity = capacity();
 3123|     10|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|     10|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|     10|          common(), old_capacity, hash);
 3133|     10|    }
 3134|     32|    common().increment_size();
 3135|     32|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|     32|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|     32|    common().maybe_increment_generation_on_insert();
 3138|     32|    infoz().RecordInsert(hash, target.probe_length);
 3139|     32|    return target.offset;
 3140|     32|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE6resizeEm:
 2905|     10|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|     10|    assert(IsValidCapacity(new_capacity));
 2907|     10|    HashSetResizeHelper resize_helper(common());
 2908|     10|    auto* old_slots = slot_array();
 2909|     10|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|     10|    const bool grow_single_group =
 2914|     10|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|     10|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|     10|                                      alignof(slot_type)>(
 2917|     10|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|     10|            CharAlloc(alloc_ref()));
 2919|       |
 2920|     10|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 2, False: 8]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      2|      return;
 2923|      2|    }
 2924|       |
 2925|      8|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 6, False: 2]
  ------------------
 2926|      6|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [Folded, False: 6]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      6|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      6|                                                          old_slots);
 2934|      6|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      2|      auto* new_slots = slot_array();
 2937|      2|      size_t total_probe_length = 0;
 2938|     32|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 30, False: 2]
  ------------------
 2939|     30|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 28, False: 2]
  ------------------
 2940|     28|          size_t hash = PolicyTraits::apply(
 2941|     28|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|     28|          auto target = find_first_non_full(common(), hash);
 2943|     28|          size_t new_i = target.offset;
 2944|     28|          total_probe_length += target.probe_length;
 2945|     28|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|     28|          transfer(new_slots + new_i, old_slots + i);
 2947|     28|        }
 2948|     30|      }
 2949|      2|      infoz().RecordRehash(total_probe_length);
 2950|      2|    }
 2951|      8|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      8|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      8|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      8|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper15InitializeSlotsINSt3__19allocatorIcEELm32ELb0ELm8EEEbRNS1_12CommonFieldsEPvT_:
 1595|     13|                                               Alloc alloc) {
 1596|     13|    assert(c.capacity());
 1597|       |    // Folks with custom allocators often make unwarranted assumptions about the
 1598|       |    // behavior of their classes vis-a-vis trivial destructability and what
 1599|       |    // calls they will or won't make.  Avoid sampling for people with custom
 1600|       |    // allocators to get us out of this mess.  This is not a hard guarantee but
 1601|       |    // a workaround while we plan the exact guarantee we want to provide.
 1602|     13|    const size_t sample_size =
 1603|     13|        (std::is_same<Alloc, std::allocator<char>>::value &&
  ------------------
  |  Branch (1603:10): [True: 13, Folded]
  ------------------
 1604|     13|         c.slot_array() == nullptr)
  ------------------
  |  Branch (1604:10): [True: 3, False: 10]
  ------------------
 1605|     13|            ? SizeOfSlot
 1606|     13|            : 0;
 1607|     13|    HashtablezInfoHandle infoz =
 1608|     13|        sample_size > 0 ? Sample(sample_size) : c.infoz();
  ------------------
  |  Branch (1608:9): [True: 3, False: 10]
  ------------------
 1609|       |
 1610|     13|    const bool has_infoz = infoz.IsSampled();
 1611|     13|    const size_t cap = c.capacity();
 1612|     13|    const size_t alloc_size =
 1613|     13|        AllocSize(cap, SizeOfSlot, AlignOfSlot, has_infoz);
 1614|     13|    char* mem = static_cast<char*>(
 1615|     13|        Allocate<BackingArrayAlignment(AlignOfSlot)>(&alloc, alloc_size));
 1616|     13|    const GenerationType old_generation = c.generation();
 1617|     13|    c.set_generation_ptr(reinterpret_cast<GenerationType*>(
 1618|     13|        mem + GenerationOffset(cap, has_infoz)));
 1619|     13|    c.set_generation(NextGeneration(old_generation));
 1620|     13|    c.set_control(reinterpret_cast<ctrl_t*>(mem + ControlOffset(has_infoz)));
 1621|     13|    c.set_slots(mem + SlotOffset(cap, AlignOfSlot, has_infoz));
 1622|     13|    ResetGrowthLeft(c);
 1623|       |
 1624|     13|    const bool grow_single_group =
 1625|     13|        IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity());
 1626|     13|    if (old_capacity_ != 0 && grow_single_group) {
  ------------------
  |  Branch (1626:9): [True: 10, False: 3]
  |  Branch (1626:31): [True: 8, False: 2]
  ------------------
 1627|      8|      if (TransferUsesMemcpy) {
  ------------------
  |  Branch (1627:11): [Folded, False: 8]
  ------------------
 1628|      0|        GrowSizeIntoSingleGroupTransferable(c, old_slots, SizeOfSlot);
 1629|      0|        DeallocateOld<AlignOfSlot>(alloc, SizeOfSlot, old_slots);
 1630|      8|      } else {
 1631|      8|        GrowIntoSingleGroupShuffleControlBytes(c.control(), c.capacity());
 1632|      8|      }
 1633|      8|    } else {
 1634|      5|      ResetCtrl(c, SizeOfSlot);
 1635|      5|    }
 1636|       |
 1637|     13|    c.set_has_infoz(has_infoz);
 1638|     13|    if (has_infoz) {
  ------------------
  |  Branch (1638:9): [True: 0, False: 13]
  ------------------
 1639|      0|      infoz.RecordStorageChanged(c.size(), cap);
 1640|      0|      if (grow_single_group || old_capacity_ == 0) {
  ------------------
  |  Branch (1640:11): [True: 0, False: 0]
  |  Branch (1640:32): [True: 0, False: 0]
  ------------------
 1641|      0|        infoz.RecordRehash(0);
 1642|      0|      }
 1643|      0|      c.set_infoz(infoz);
 1644|      0|    }
 1645|     13|    return grow_single_group;
 1646|     13|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper23GrowSizeIntoSingleGroupINS1_18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEvEENSA_INS6_4pairIKSC_SG_EEEEEEvRNS1_12CommonFieldsERT0_PNT_9slot_typeE:
 1655|      6|                               typename PolicyTraits::slot_type* old_slots) {
 1656|      6|    assert(old_capacity_ < Group::kWidth / 2);
 1657|      6|    assert(IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity()));
 1658|      6|    using slot_type = typename PolicyTraits::slot_type;
 1659|      6|    assert(is_single_group(c.capacity()));
 1660|       |
 1661|      6|    auto* new_slots = reinterpret_cast<slot_type*>(c.slot_array());
 1662|       |
 1663|      6|    size_t shuffle_bit = old_capacity_ / 2 + 1;
 1664|     28|    for (size_t i = 0; i < old_capacity_; ++i) {
  ------------------
  |  Branch (1664:24): [True: 22, False: 6]
  ------------------
 1665|     22|      if (IsFull(old_ctrl_[i])) {
  ------------------
  |  Branch (1665:11): [True: 22, False: 0]
  ------------------
 1666|     22|        size_t new_i = i ^ shuffle_bit;
 1667|     22|        SanitizerUnpoisonMemoryRegion(new_slots + new_i, sizeof(slot_type));
 1668|     22|        PolicyTraits::transfer(&alloc_ref, new_slots + new_i, old_slots + i);
 1669|     22|      }
 1670|     22|    }
 1671|      6|    PoisonSingleGroupEmptySlots(c, sizeof(slot_type));
 1672|      6|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE11HashElementclISA_JRKNS4_21piecewise_construct_tENS4_5tupleIJRSJ_EEENSS_IJRKSE_EEEEEEmRKT_DpOT0_:
 2804|     28|    size_t operator()(const K& key, Args&&...) const {
 2805|     28|      return h(key);
 2806|     28|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8transferEPNS1_13map_slot_typeISA_SE_EESP_:
 2857|     28|  inline void transfer(slot_type* to, slot_type* from) {
 2858|     28|    PolicyTraits::transfer(&alloc_ref(), to, from);
 2859|     28|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE11growth_leftEv:
 3181|     64|  size_t growth_left() const { return common().growth_left(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE28rehash_and_grow_if_necessaryEv:
 2970|     10|  void rehash_and_grow_if_necessary() {
 2971|     10|    const size_t cap = capacity();
 2972|     10|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 10]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|     10|    } else {
 3018|       |      // Otherwise grow the container.
 3019|     10|      resize(NextCapacity(cap));
 3020|     10|    }
 3021|     10|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE15set_growth_leftEm:
 3182|     32|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE10emplace_atIJRKNS4_21piecewise_construct_tENS4_5tupleIJRSJ_EEENSR_IJRKSE_EEEEEEvmDpOT_:
 3151|     32|  void emplace_at(size_t i, Args&&... args) {
 3152|     32|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|     32|               iterator_at(i) &&
 3156|     32|           "constructed value does not match the lookup key");
 3157|     32|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE9constructIJRKNS4_21piecewise_construct_tENS4_5tupleIJRSJ_EEENSR_IJRKSE_EEEEEEvPNS1_13map_slot_typeISA_SE_EEDpOT_:
 2851|     32|  inline void construct(slot_type* slot, Args&&... args) {
 2852|     32|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|     32|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE11iterator_atEm:
 3159|     33|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|     33|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|     33|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iteratorC2EPNS1_6ctrl_tEPNS1_13map_slot_typeISA_SE_EEPKh:
 1984|     33|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|     33|          ctrl_(ctrl),
 1986|     33|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|     33|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|     33|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|     33|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEEC2Ev:
 2088|      8|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEPKN6google8protobuf23SourceCodeInfo_LocationEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SF_EEEEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE12EqualElementIS6_EclIS6_JRS6_EEEbRKT_DpOT0_:
 2813|     33|    bool operator()(const K2& lhs, Args&&...) const {
 2814|     33|      return eq(lhs, rhs);
 2815|     33|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8hash_refEv:
 3202|    796|  hasher& hash_ref() { return settings_.template get<1>(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE8hash_refEv:
 3202|      4|  hasher& hash_ref() { return settings_.template get<1>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE3endEv:
 2278|  63.5k|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|  63.5k|    return iterator(common().generation_ptr());
 2280|  63.5k|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE14const_iteratordeEv:
 2049|  63.4k|    reference operator*() const { return *inner_; }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8iteratordeEv:
 1944|  63.4k|    reference operator*() const {
 1945|  63.4k|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator*()");
 1946|  63.4k|      return unchecked_deref();
 1947|  63.4k|    }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8iterator15unchecked_derefEv:
 2029|  63.4k|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE5clearEv:
 2291|     10|  ABSL_ATTRIBUTE_REINITIALIZES void clear() {
 2292|       |    // Iterating over this container is O(bucket_count()). When bucket_count()
 2293|       |    // is much greater than size(), iteration becomes prohibitively expensive.
 2294|       |    // For clear() it is more important to reuse the allocated array when the
 2295|       |    // container is small because allocation takes comparatively long time
 2296|       |    // compared to destruction of the elements of the container. So we pick the
 2297|       |    // largest bucket_count() threshold for which iteration is still fast and
 2298|       |    // past that we simply deallocate the array.
 2299|     10|    const size_t cap = capacity();
 2300|     10|    if (cap == 0) {
  ------------------
  |  Branch (2300:9): [True: 10, False: 0]
  ------------------
 2301|       |      // Already guaranteed to be empty; so nothing to do.
 2302|     10|    } else {
 2303|      0|      destroy_slots();
 2304|      0|      ClearBackingArray(common(), GetPolicyFunctions(), /*reuse=*/cap < 128);
 2305|      0|    }
 2306|     10|    common().set_reserved_growth(0);
 2307|     10|    common().set_reservation_size(0);
 2308|     10|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6insertIPS6_TnNSD_9enable_ifIXsr4absl11disjunctionINSD_14is_convertibleIRKT_S8_EENSG_22SameAsElementReferenceISN_EEEE5valueEiE4typeELi0ETnNSJ_IXsr14IsDecomposableISN_EE5valueEiE4typeELi0EEENSD_4pairINSG_8iteratorEbEESN_:
 2339|     15|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|     15|    return emplace(value);
 2341|     15|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE7emplaceIJRKPS6_ETnNSD_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSD_4pairINSG_8iteratorEbEEDpOSM_:
 2422|     15|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|     15|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|     15|                               std::forward<Args>(args)...);
 2425|     15|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE19EmplaceDecomposableclIPS6_JRKSJ_EEENSD_4pairINSG_8iteratorEbEERKT_DpOT0_:
 2822|     15|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|     15|      auto res = s.find_or_prepare_insert(key);
 2824|     15|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 15, False: 0]
  ------------------
 2825|     15|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|     15|      }
 2827|     15|      return {s.iterator_at(res.first), res.second};
 2828|     15|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE22find_or_prepare_insertIPS6_EENSD_4pairImbEERKT_:
 3086|     15|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|     15|    prefetch_heap_block();
 3088|     15|    auto hash = hash_ref()(key);
 3089|     15|    auto seq = probe(common(), hash);
 3090|     15|    const ctrl_t* ctrl = control();
 3091|     15|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 15, Folded]
  ------------------
 3092|     15|      Group g{ctrl + seq.offset()};
 3093|     15|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 0, False: 15]
  ------------------
 3094|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3095|      0|                EqualElement<K>{key, eq_ref()},
 3096|      0|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      0|      }
 3099|     15|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|     15|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 15, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 15]
  |  |  |  Branch (179:57): [True: 15, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|     15|    return {prepare_insert(hash), true};
 3104|     15|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE14prepare_insertEm:
 3110|     15|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|     15|    const bool rehash_for_bug_detection =
 3112|     15|        common().should_rehash_for_bug_detection_on_insert();
 3113|     15|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 15]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|     15|    auto target = find_first_non_full(common(), hash);
 3119|     15|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 15, False: 0]
  ------------------
 3120|     15|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|     20|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 5, False: 10]
  |  |  |  Branch (178:49): [Folded, False: 15]
  |  |  |  Branch (178:59): [True: 5, False: 10]
  |  |  |  Branch (178:59): [True: 5, False: 0]
  |  |  ------------------
  ------------------
 3121|     15|                           !IsDeleted(control()[target.offset]))) {
 3122|      5|      size_t old_capacity = capacity();
 3123|      5|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      5|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      5|          common(), old_capacity, hash);
 3133|      5|    }
 3134|     15|    common().increment_size();
 3135|     15|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|     15|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|     15|    common().maybe_increment_generation_on_insert();
 3138|     15|    infoz().RecordInsert(hash, target.probe_length);
 3139|     15|    return target.offset;
 3140|     15|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6resizeEm:
 2905|      5|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      5|    assert(IsValidCapacity(new_capacity));
 2907|      5|    HashSetResizeHelper resize_helper(common());
 2908|      5|    auto* old_slots = slot_array();
 2909|      5|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      5|    const bool grow_single_group =
 2914|      5|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      5|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      5|                                      alignof(slot_type)>(
 2917|      5|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      5|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      5|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 1, False: 4]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      1|      return;
 2923|      1|    }
 2924|       |
 2925|      4|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 3, False: 1]
  ------------------
 2926|      3|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [True: 3, Folded]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      3|        return;
 2929|      3|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      0|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      0|                                                          old_slots);
 2934|      1|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      1|      auto* new_slots = slot_array();
 2937|      1|      size_t total_probe_length = 0;
 2938|     16|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 15, False: 1]
  ------------------
 2939|     15|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 14, False: 1]
  ------------------
 2940|     14|          size_t hash = PolicyTraits::apply(
 2941|     14|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|     14|          auto target = find_first_non_full(common(), hash);
 2943|     14|          size_t new_i = target.offset;
 2944|     14|          total_probe_length += target.probe_length;
 2945|     14|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|     14|          transfer(new_slots + new_i, old_slots + i);
 2947|     14|        }
 2948|     15|      }
 2949|      1|      infoz().RecordRehash(total_probe_length);
 2950|      1|    }
 2951|      1|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      1|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      1|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      1|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper15InitializeSlotsINSt3__19allocatorIcEELm8ELb1ELm8EEEbRNS1_12CommonFieldsEPvT_:
 1595|     51|                                               Alloc alloc) {
 1596|     51|    assert(c.capacity());
 1597|       |    // Folks with custom allocators often make unwarranted assumptions about the
 1598|       |    // behavior of their classes vis-a-vis trivial destructability and what
 1599|       |    // calls they will or won't make.  Avoid sampling for people with custom
 1600|       |    // allocators to get us out of this mess.  This is not a hard guarantee but
 1601|       |    // a workaround while we plan the exact guarantee we want to provide.
 1602|     51|    const size_t sample_size =
 1603|     51|        (std::is_same<Alloc, std::allocator<char>>::value &&
  ------------------
  |  Branch (1603:10): [True: 51, Folded]
  ------------------
 1604|     51|         c.slot_array() == nullptr)
  ------------------
  |  Branch (1604:10): [True: 11, False: 40]
  ------------------
 1605|     51|            ? SizeOfSlot
 1606|     51|            : 0;
 1607|     51|    HashtablezInfoHandle infoz =
 1608|     51|        sample_size > 0 ? Sample(sample_size) : c.infoz();
  ------------------
  |  Branch (1608:9): [True: 11, False: 40]
  ------------------
 1609|       |
 1610|     51|    const bool has_infoz = infoz.IsSampled();
 1611|     51|    const size_t cap = c.capacity();
 1612|     51|    const size_t alloc_size =
 1613|     51|        AllocSize(cap, SizeOfSlot, AlignOfSlot, has_infoz);
 1614|     51|    char* mem = static_cast<char*>(
 1615|     51|        Allocate<BackingArrayAlignment(AlignOfSlot)>(&alloc, alloc_size));
 1616|     51|    const GenerationType old_generation = c.generation();
 1617|     51|    c.set_generation_ptr(reinterpret_cast<GenerationType*>(
 1618|     51|        mem + GenerationOffset(cap, has_infoz)));
 1619|     51|    c.set_generation(NextGeneration(old_generation));
 1620|     51|    c.set_control(reinterpret_cast<ctrl_t*>(mem + ControlOffset(has_infoz)));
 1621|     51|    c.set_slots(mem + SlotOffset(cap, AlignOfSlot, has_infoz));
 1622|     51|    ResetGrowthLeft(c);
 1623|       |
 1624|     51|    const bool grow_single_group =
 1625|     51|        IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity());
 1626|     51|    if (old_capacity_ != 0 && grow_single_group) {
  ------------------
  |  Branch (1626:9): [True: 40, False: 11]
  |  Branch (1626:31): [True: 24, False: 16]
  ------------------
 1627|     24|      if (TransferUsesMemcpy) {
  ------------------
  |  Branch (1627:11): [True: 24, Folded]
  ------------------
 1628|     24|        GrowSizeIntoSingleGroupTransferable(c, old_slots, SizeOfSlot);
 1629|     24|        DeallocateOld<AlignOfSlot>(alloc, SizeOfSlot, old_slots);
 1630|     24|      } else {
 1631|      0|        GrowIntoSingleGroupShuffleControlBytes(c.control(), c.capacity());
 1632|      0|      }
 1633|     27|    } else {
 1634|     27|      ResetCtrl(c, SizeOfSlot);
 1635|     27|    }
 1636|       |
 1637|     51|    c.set_has_infoz(has_infoz);
 1638|     51|    if (has_infoz) {
  ------------------
  |  Branch (1638:9): [True: 0, False: 51]
  ------------------
 1639|      0|      infoz.RecordStorageChanged(c.size(), cap);
 1640|      0|      if (grow_single_group || old_capacity_ == 0) {
  ------------------
  |  Branch (1640:11): [True: 0, False: 0]
  |  Branch (1640:32): [True: 0, False: 0]
  ------------------
 1641|      0|        infoz.RecordRehash(0);
 1642|      0|      }
 1643|      0|      c.set_infoz(infoz);
 1644|      0|    }
 1645|     51|    return grow_single_group;
 1646|     51|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE11HashElementclIS8_JRS8_EEEmRKT_DpOT0_:
 2804|     14|    size_t operator()(const K& key, Args&&...) const {
 2805|     14|      return h(key);
 2806|     14|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8transferEPS8_SH_:
 2857|     14|  inline void transfer(slot_type* to, slot_type* from) {
 2858|     14|    PolicyTraits::transfer(&alloc_ref(), to, from);
 2859|     14|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE11growth_leftEv:
 3181|     30|  size_t growth_left() const { return common().growth_left(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE28rehash_and_grow_if_necessaryEv:
 2970|      5|  void rehash_and_grow_if_necessary() {
 2971|      5|    const size_t cap = capacity();
 2972|      5|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 5]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      5|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      5|      resize(NextCapacity(cap));
 3020|      5|    }
 3021|      5|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE15set_growth_leftEm:
 3182|     15|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE10emplace_atIJRKPS6_EEEvmDpOT_:
 3151|     15|  void emplace_at(size_t i, Args&&... args) {
 3152|     15|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|     15|               iterator_at(i) &&
 3156|     15|           "constructed value does not match the lookup key");
 3157|     15|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf19EnumValueDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE9constructIJRKPS6_EEEvPS8_DpOT_:
 2851|     15|  inline void construct(slot_type* slot, Args&&... args) {
 2852|     15|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|     15|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE6insertIS6_TnNSB_9enable_ifIXsr4absl11disjunctionINSB_14is_convertibleIRKT_S6_EENSE_22SameAsElementReferenceISK_EEEE5valueEiE4typeELi0ETnNSG_IXsr14IsDecomposableISK_EE5valueEiE4typeELi0EEENSB_4pairINSE_8iteratorEbEESK_:
 2339|    362|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|    362|    return emplace(value);
 2341|    362|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE7emplaceIJRKS6_ETnNSB_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSB_4pairINSE_8iteratorEbEEDpOSJ_:
 2422|    362|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|    362|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|    362|                               std::forward<Args>(args)...);
 2425|    362|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE19EmplaceDecomposableclIS6_JRKS6_EEENSB_4pairINSE_8iteratorEbEERKT_DpOT0_:
 2822|    362|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|    362|      auto res = s.find_or_prepare_insert(key);
 2824|    362|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 362, False: 0]
  ------------------
 2825|    362|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|    362|      }
 2827|    362|      return {s.iterator_at(res.first), res.second};
 2828|    362|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE22find_or_prepare_insertIS6_EENSB_4pairImbEERKT_:
 3086|    362|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|    362|    prefetch_heap_block();
 3088|    362|    auto hash = hash_ref()(key);
 3089|    362|    auto seq = probe(common(), hash);
 3090|    362|    const ctrl_t* ctrl = control();
 3091|    395|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 395, Folded]
  ------------------
 3092|    395|      Group g{ctrl + seq.offset()};
 3093|    395|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 33, False: 395]
  ------------------
 3094|     33|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|     33|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 33]
  |  |  |  Branch (179:48): [Folded, False: 33]
  |  |  |  Branch (179:57): [True: 0, False: 33]
  |  |  ------------------
  ------------------
 3095|     33|                EqualElement<K>{key, eq_ref()},
 3096|     33|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|     33|      }
 3099|    395|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|    395|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 362, False: 33]
  |  |  |  Branch (179:48): [Folded, False: 395]
  |  |  |  Branch (179:57): [True: 362, False: 33]
  |  |  ------------------
  ------------------
 3100|     33|      seq.next();
 3101|     33|      assert(seq.index() <= capacity() && "full table!");
 3102|     33|    }
 3103|    362|    return {prepare_insert(hash), true};
 3104|    362|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE14prepare_insertEm:
 3110|    362|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|    362|    const bool rehash_for_bug_detection =
 3112|    362|        common().should_rehash_for_bug_detection_on_insert();
 3113|    362|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 362]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|    362|    auto target = find_first_non_full(common(), hash);
 3119|    362|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 362, False: 0]
  ------------------
 3120|    362|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|    371|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 9, False: 353]
  |  |  |  Branch (178:49): [Folded, False: 362]
  |  |  |  Branch (178:59): [True: 9, False: 353]
  |  |  |  Branch (178:59): [True: 9, False: 0]
  |  |  ------------------
  ------------------
 3121|    362|                           !IsDeleted(control()[target.offset]))) {
 3122|      9|      size_t old_capacity = capacity();
 3123|      9|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      9|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      9|          common(), old_capacity, hash);
 3133|      9|    }
 3134|    362|    common().increment_size();
 3135|    362|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|    362|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|    362|    common().maybe_increment_generation_on_insert();
 3138|    362|    infoz().RecordInsert(hash, target.probe_length);
 3139|    362|    return target.offset;
 3140|    362|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE6resizeEm:
 2905|      9|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      9|    assert(IsValidCapacity(new_capacity));
 2907|      9|    HashSetResizeHelper resize_helper(common());
 2908|      9|    auto* old_slots = slot_array();
 2909|      9|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      9|    const bool grow_single_group =
 2914|      9|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      9|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      9|                                      alignof(slot_type)>(
 2917|      9|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      9|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      9|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 1, False: 8]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      1|      return;
 2923|      1|    }
 2924|       |
 2925|      8|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 3, False: 5]
  ------------------
 2926|      3|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [True: 3, Folded]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      3|        return;
 2929|      3|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      0|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      0|                                                          old_slots);
 2934|      5|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      5|      auto* new_slots = slot_array();
 2937|      5|      size_t total_probe_length = 0;
 2938|    496|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 491, False: 5]
  ------------------
 2939|    491|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 434, False: 57]
  ------------------
 2940|    434|          size_t hash = PolicyTraits::apply(
 2941|    434|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|    434|          auto target = find_first_non_full(common(), hash);
 2943|    434|          size_t new_i = target.offset;
 2944|    434|          total_probe_length += target.probe_length;
 2945|    434|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|    434|          transfer(new_slots + new_i, old_slots + i);
 2947|    434|        }
 2948|    491|      }
 2949|      5|      infoz().RecordRehash(total_probe_length);
 2950|      5|    }
 2951|      5|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      5|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      5|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      5|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE11HashElementclIS6_JRS6_EEEmRKT_DpOT0_:
 2804|    434|    size_t operator()(const K& key, Args&&...) const {
 2805|    434|      return h(key);
 2806|    434|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE8transferEPS6_SF_:
 2857|    434|  inline void transfer(slot_type* to, slot_type* from) {
 2858|    434|    PolicyTraits::transfer(&alloc_ref(), to, from);
 2859|    434|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE11growth_leftEv:
 3181|    724|  size_t growth_left() const { return common().growth_left(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE28rehash_and_grow_if_necessaryEv:
 2970|      9|  void rehash_and_grow_if_necessary() {
 2971|      9|    const size_t cap = capacity();
 2972|      9|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 4, False: 5]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      4|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 4]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      9|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      9|      resize(NextCapacity(cap));
 3020|      9|    }
 3021|      9|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE4sizeEv:
 2287|      4|  size_t size() const { return common().size(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE15set_growth_leftEm:
 3182|    362|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE10emplace_atIJRKS6_EEEvmDpOT_:
 3151|    362|  void emplace_at(size_t i, Args&&... args) {
 3152|    362|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|    362|               iterator_at(i) &&
 3156|    362|           "constructed value does not match the lookup key");
 3157|    362|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_120SymbolByFullNameHashENS8_18SymbolByFullNameEqENSt3__19allocatorIS6_EEE9constructIJRKS6_EEEvPS6_DpOT_:
 2851|    362|  inline void construct(slot_type* slot, Args&&... args) {
 2852|    362|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|    362|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE6insertIS6_TnNSB_9enable_ifIXsr4absl11disjunctionINSB_14is_convertibleIRKT_S6_EENSE_22SameAsElementReferenceISK_EEEE5valueEiE4typeELi0ETnNSG_IXsr14IsDecomposableISK_EE5valueEiE4typeELi0EEENSB_4pairINSE_8iteratorEbEESK_:
 2339|    443|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|    443|    return emplace(value);
 2341|    443|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE7emplaceIJRKS6_ETnNSB_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSB_4pairINSE_8iteratorEbEEDpOSJ_:
 2422|    443|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|    443|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|    443|                               std::forward<Args>(args)...);
 2425|    443|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE19EmplaceDecomposableclIS6_JRKS6_EEENSB_4pairINSE_8iteratorEbEERKT_DpOT0_:
 2822|    443|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|    443|      auto res = s.find_or_prepare_insert(key);
 2824|    443|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 443, False: 0]
  ------------------
 2825|    443|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|    443|      }
 2827|    443|      return {s.iterator_at(res.first), res.second};
 2828|    443|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE22find_or_prepare_insertIS6_EENSB_4pairImbEERKT_:
 3086|    443|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|    443|    prefetch_heap_block();
 3088|    443|    auto hash = hash_ref()(key);
 3089|    443|    auto seq = probe(common(), hash);
 3090|    443|    const ctrl_t* ctrl = control();
 3091|    459|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 459, Folded]
  ------------------
 3092|    459|      Group g{ctrl + seq.offset()};
 3093|    459|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 43, False: 459]
  ------------------
 3094|     43|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|     43|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 43]
  |  |  |  Branch (179:48): [Folded, False: 43]
  |  |  |  Branch (179:57): [True: 0, False: 43]
  |  |  ------------------
  ------------------
 3095|     43|                EqualElement<K>{key, eq_ref()},
 3096|     43|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|     43|      }
 3099|    459|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|    459|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 443, False: 16]
  |  |  |  Branch (179:48): [Folded, False: 459]
  |  |  |  Branch (179:57): [True: 443, False: 16]
  |  |  ------------------
  ------------------
 3100|     16|      seq.next();
 3101|     16|      assert(seq.index() <= capacity() && "full table!");
 3102|     16|    }
 3103|    443|    return {prepare_insert(hash), true};
 3104|    443|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8hash_refEv:
 3202|    919|  hasher& hash_ref() { return settings_.template get<1>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE12EqualElementIS6_EclIS6_JRS6_EEEbRKT_DpOT0_:
 2813|     43|    bool operator()(const K2& lhs, Args&&...) const {
 2814|     43|      return eq(lhs, rhs);
 2815|     43|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE14prepare_insertEm:
 3110|    443|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|    443|    const bool rehash_for_bug_detection =
 3112|    443|        common().should_rehash_for_bug_detection_on_insert();
 3113|    443|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 443]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|    443|    auto target = find_first_non_full(common(), hash);
 3119|    443|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 443, False: 0]
  ------------------
 3120|    443|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|    464|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 21, False: 422]
  |  |  |  Branch (178:49): [Folded, False: 443]
  |  |  |  Branch (178:59): [True: 21, False: 422]
  |  |  |  Branch (178:59): [True: 21, False: 0]
  |  |  ------------------
  ------------------
 3121|    443|                           !IsDeleted(control()[target.offset]))) {
 3122|     21|      size_t old_capacity = capacity();
 3123|     21|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|     21|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|     21|          common(), old_capacity, hash);
 3133|     21|    }
 3134|    443|    common().increment_size();
 3135|    443|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|    443|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|    443|    common().maybe_increment_generation_on_insert();
 3138|    443|    infoz().RecordInsert(hash, target.probe_length);
 3139|    443|    return target.offset;
 3140|    443|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE6resizeEm:
 2905|     21|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|     21|    assert(IsValidCapacity(new_capacity));
 2907|     21|    HashSetResizeHelper resize_helper(common());
 2908|     21|    auto* old_slots = slot_array();
 2909|     21|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|     21|    const bool grow_single_group =
 2914|     21|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|     21|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|     21|                                      alignof(slot_type)>(
 2917|     21|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|     21|            CharAlloc(alloc_ref()));
 2919|       |
 2920|     21|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 4, False: 17]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      4|      return;
 2923|      4|    }
 2924|       |
 2925|     17|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 10, False: 7]
  ------------------
 2926|     10|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [True: 10, Folded]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|     10|        return;
 2929|     10|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      0|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      0|                                                          old_slots);
 2934|      7|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      7|      auto* new_slots = slot_array();
 2937|      7|      size_t total_probe_length = 0;
 2938|    544|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 537, False: 7]
  ------------------
 2939|    537|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 476, False: 61]
  ------------------
 2940|    476|          size_t hash = PolicyTraits::apply(
 2941|    476|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|    476|          auto target = find_first_non_full(common(), hash);
 2943|    476|          size_t new_i = target.offset;
 2944|    476|          total_probe_length += target.probe_length;
 2945|    476|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|    476|          transfer(new_slots + new_i, old_slots + i);
 2947|    476|        }
 2948|    537|      }
 2949|      7|      infoz().RecordRehash(total_probe_length);
 2950|      7|    }
 2951|      7|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      7|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      7|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      7|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE11HashElementclIS6_JRS6_EEEmRKT_DpOT0_:
 2804|    476|    size_t operator()(const K& key, Args&&...) const {
 2805|    476|      return h(key);
 2806|    476|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE8transferEPS6_SF_:
 2857|    476|  inline void transfer(slot_type* to, slot_type* from) {
 2858|    476|    PolicyTraits::transfer(&alloc_ref(), to, from);
 2859|    476|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE11growth_leftEv:
 3181|    886|  size_t growth_left() const { return common().growth_left(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE28rehash_and_grow_if_necessaryEv:
 2970|     21|  void rehash_and_grow_if_necessary() {
 2971|     21|    const size_t cap = capacity();
 2972|     21|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 5, False: 16]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      5|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 5]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|     21|    } else {
 3018|       |      // Otherwise grow the container.
 3019|     21|      resize(NextCapacity(cap));
 3020|     21|    }
 3021|     21|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE4sizeEv:
 2287|      5|  size_t size() const { return common().size(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE15set_growth_leftEm:
 3182|    443|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE10emplace_atIJRKS6_EEEvmDpOT_:
 3151|    443|  void emplace_at(size_t i, Args&&... args) {
 3152|    443|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|    443|               iterator_at(i) &&
 3156|    443|           "constructed value does not match the lookup key");
 3157|    443|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf6SymbolEEENS5_12_GLOBAL__N_118SymbolByParentHashENS8_16SymbolByParentEqENSt3__19allocatorIS6_EEE9constructIJRKS6_EEEvPS6_DpOT_:
 2851|    443|  inline void construct(slot_type* slot, Args&&... args) {
 2852|    443|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|    443|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE6insertIS8_TnNSF_9enable_ifIXsr4absl11disjunctionINSF_14is_convertibleIRKT_S8_EENSI_22SameAsElementReferenceISO_EEEE5valueEiE4typeELi0ETnNSK_IXsr14IsDecomposableISO_EE5valueEiE4typeELi0EEENSF_4pairINSI_8iteratorEbEESO_:
 2339|      4|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|      4|    return emplace(value);
 2341|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE7emplaceIJRKS8_ETnNSF_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSF_4pairINSI_8iteratorEbEEDpOSN_:
 2422|      4|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|      4|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|      4|                               std::forward<Args>(args)...);
 2425|      4|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE19EmplaceDecomposableclIS8_JRKS8_EEENSF_4pairINSI_8iteratorEbEERKT_DpOT0_:
 2822|      4|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|      4|      auto res = s.find_or_prepare_insert(key);
 2824|      4|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 4, False: 0]
  ------------------
 2825|      4|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|      4|      }
 2827|      4|      return {s.iterator_at(res.first), res.second};
 2828|      4|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE22find_or_prepare_insertIS8_EENSF_4pairImbEERKT_:
 3086|      4|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|      4|    prefetch_heap_block();
 3088|      4|    auto hash = hash_ref()(key);
 3089|      4|    auto seq = probe(common(), hash);
 3090|      4|    const ctrl_t* ctrl = control();
 3091|      4|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 4, Folded]
  ------------------
 3092|      4|      Group g{ctrl + seq.offset()};
 3093|      4|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 0, False: 4]
  ------------------
 3094|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3095|      0|                EqualElement<K>{key, eq_ref()},
 3096|      0|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      0|      }
 3099|      4|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|      4|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 4, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 4]
  |  |  |  Branch (179:57): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|      4|    return {prepare_insert(hash), true};
 3104|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE14prepare_insertEm:
 3110|      4|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|      4|    const bool rehash_for_bug_detection =
 3112|      4|        common().should_rehash_for_bug_detection_on_insert();
 3113|      4|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 4]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|      4|    auto target = find_first_non_full(common(), hash);
 3119|      4|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 4, False: 0]
  ------------------
 3120|      4|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|      7|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 3, False: 1]
  |  |  |  Branch (178:49): [Folded, False: 4]
  |  |  |  Branch (178:59): [True: 3, False: 1]
  |  |  |  Branch (178:59): [True: 3, False: 0]
  |  |  ------------------
  ------------------
 3121|      4|                           !IsDeleted(control()[target.offset]))) {
 3122|      3|      size_t old_capacity = capacity();
 3123|      3|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      3|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      3|          common(), old_capacity, hash);
 3133|      3|    }
 3134|      4|    common().increment_size();
 3135|      4|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|      4|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|      4|    common().maybe_increment_generation_on_insert();
 3138|      4|    infoz().RecordInsert(hash, target.probe_length);
 3139|      4|    return target.offset;
 3140|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE6resizeEm:
 2905|      3|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      3|    assert(IsValidCapacity(new_capacity));
 2907|      3|    HashSetResizeHelper resize_helper(common());
 2908|      3|    auto* old_slots = slot_array();
 2909|      3|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      3|    const bool grow_single_group =
 2914|      3|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      3|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      3|                                      alignof(slot_type)>(
 2917|      3|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      3|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      3|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 1, False: 2]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      1|      return;
 2923|      1|    }
 2924|       |
 2925|      2|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 2, False: 0]
  ------------------
 2926|      2|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [True: 2, Folded]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      2|        return;
 2929|      2|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      0|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      0|                                                          old_slots);
 2934|      0|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      0|      auto* new_slots = slot_array();
 2937|      0|      size_t total_probe_length = 0;
 2938|      0|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 0, False: 0]
  ------------------
 2939|      0|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 0, False: 0]
  ------------------
 2940|      0|          size_t hash = PolicyTraits::apply(
 2941|      0|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|      0|          auto target = find_first_non_full(common(), hash);
 2943|      0|          size_t new_i = target.offset;
 2944|      0|          total_probe_length += target.probe_length;
 2945|      0|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|      0|          transfer(new_slots + new_i, old_slots + i);
 2947|      0|        }
 2948|      0|      }
 2949|      0|      infoz().RecordRehash(total_probe_length);
 2950|      0|    }
 2951|      0|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      0|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      0|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      0|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE11growth_leftEv:
 3181|      8|  size_t growth_left() const { return common().growth_left(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE28rehash_and_grow_if_necessaryEv:
 2970|      3|  void rehash_and_grow_if_necessary() {
 2971|      3|    const size_t cap = capacity();
 2972|      3|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 3]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      3|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      3|      resize(NextCapacity(cap));
 3020|      3|    }
 3021|      3|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE15set_growth_leftEm:
 3182|      4|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE10emplace_atIJRKS8_EEEvmDpOT_:
 3151|      4|  void emplace_at(size_t i, Args&&... args) {
 3152|      4|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|      4|               iterator_at(i) &&
 3156|      4|           "constructed value does not match the lookup key");
 3157|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS5_12_GLOBAL__N_121DescriptorsByNameHashIS6_EENSA_19DescriptorsByNameEqIS6_EENSt3__19allocatorIS8_EEE9constructIJRKS8_EEEvPS8_DpOT_:
 2851|      4|  inline void construct(slot_type* slot, Args&&... args) {
 2852|      4|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|      4|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6insertIPS6_TnNSD_9enable_ifIXsr4absl11disjunctionINSD_14is_convertibleIRKT_S8_EENSG_22SameAsElementReferenceISN_EEEE5valueEiE4typeELi0ETnNSJ_IXsr14IsDecomposableISN_EE5valueEiE4typeELi0EEENSD_4pairINSG_8iteratorEbEESN_:
 2339|    100|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|    100|    return emplace(value);
 2341|    100|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE7emplaceIJRKPS6_ETnNSD_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSD_4pairINSG_8iteratorEbEEDpOSM_:
 2422|    100|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|    100|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|    100|                               std::forward<Args>(args)...);
 2425|    100|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE19EmplaceDecomposableclIPS6_JRKSJ_EEENSD_4pairINSG_8iteratorEbEERKT_DpOT0_:
 2822|    100|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|    100|      auto res = s.find_or_prepare_insert(key);
 2824|    100|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 100, False: 0]
  ------------------
 2825|    100|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|    100|      }
 2827|    100|      return {s.iterator_at(res.first), res.second};
 2828|    100|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE22find_or_prepare_insertIPS6_EENSD_4pairImbEERKT_:
 3086|    100|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|    100|    prefetch_heap_block();
 3088|    100|    auto hash = hash_ref()(key);
 3089|    100|    auto seq = probe(common(), hash);
 3090|    100|    const ctrl_t* ctrl = control();
 3091|    104|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 104, Folded]
  ------------------
 3092|    104|      Group g{ctrl + seq.offset()};
 3093|    104|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 4, False: 104]
  ------------------
 3094|      4|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      4|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 4]
  |  |  |  Branch (179:48): [Folded, False: 4]
  |  |  |  Branch (179:57): [True: 0, False: 4]
  |  |  ------------------
  ------------------
 3095|      4|                EqualElement<K>{key, eq_ref()},
 3096|      4|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      4|      }
 3099|    104|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|    104|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 100, False: 4]
  |  |  |  Branch (179:48): [Folded, False: 104]
  |  |  |  Branch (179:57): [True: 100, False: 4]
  |  |  ------------------
  ------------------
 3100|      4|      seq.next();
 3101|      4|      assert(seq.index() <= capacity() && "full table!");
 3102|      4|    }
 3103|    100|    return {prepare_insert(hash), true};
 3104|    100|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8hash_refEv:
 3202|    198|  hasher& hash_ref() { return settings_.template get<1>(); }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE12EqualElementIPS6_EclIS8_JRS8_EEEbRKT_DpOT0_:
 2813|      4|    bool operator()(const K2& lhs, Args&&...) const {
 2814|      4|      return eq(lhs, rhs);
 2815|      4|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE14prepare_insertEm:
 3110|    100|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|    100|    const bool rehash_for_bug_detection =
 3112|    100|        common().should_rehash_for_bug_detection_on_insert();
 3113|    100|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 100]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|    100|    auto target = find_first_non_full(common(), hash);
 3119|    100|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 100, False: 0]
  ------------------
 3120|    100|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|    108|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 8, False: 92]
  |  |  |  Branch (178:49): [Folded, False: 100]
  |  |  |  Branch (178:59): [True: 8, False: 92]
  |  |  |  Branch (178:59): [True: 8, False: 0]
  |  |  ------------------
  ------------------
 3121|    100|                           !IsDeleted(control()[target.offset]))) {
 3122|      8|      size_t old_capacity = capacity();
 3123|      8|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      8|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      8|          common(), old_capacity, hash);
 3133|      8|    }
 3134|    100|    common().increment_size();
 3135|    100|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|    100|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|    100|    common().maybe_increment_generation_on_insert();
 3138|    100|    infoz().RecordInsert(hash, target.probe_length);
 3139|    100|    return target.offset;
 3140|    100|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE6resizeEm:
 2905|      8|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      8|    assert(IsValidCapacity(new_capacity));
 2907|      8|    HashSetResizeHelper resize_helper(common());
 2908|      8|    auto* old_slots = slot_array();
 2909|      8|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      8|    const bool grow_single_group =
 2914|      8|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      8|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      8|                                      alignof(slot_type)>(
 2917|      8|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      8|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      8|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 2, False: 6]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      2|      return;
 2923|      2|    }
 2924|       |
 2925|      6|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 3, False: 3]
  ------------------
 2926|      3|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [True: 3, Folded]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      3|        return;
 2929|      3|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      0|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      0|                                                          old_slots);
 2934|      3|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      3|      auto* new_slots = slot_array();
 2937|      3|      size_t total_probe_length = 0;
 2938|    112|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 109, False: 3]
  ------------------
 2939|    109|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 98, False: 11]
  ------------------
 2940|     98|          size_t hash = PolicyTraits::apply(
 2941|     98|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|     98|          auto target = find_first_non_full(common(), hash);
 2943|     98|          size_t new_i = target.offset;
 2944|     98|          total_probe_length += target.probe_length;
 2945|     98|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|     98|          transfer(new_slots + new_i, old_slots + i);
 2947|     98|        }
 2948|    109|      }
 2949|      3|      infoz().RecordRehash(total_probe_length);
 2950|      3|    }
 2951|      3|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      3|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      3|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      3|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE11HashElementclIS8_JRS8_EEEmRKT_DpOT0_:
 2804|     98|    size_t operator()(const K& key, Args&&...) const {
 2805|     98|      return h(key);
 2806|     98|    }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE8transferEPS8_SH_:
 2857|     98|  inline void transfer(slot_type* to, slot_type* from) {
 2858|     98|    PolicyTraits::transfer(&alloc_ref(), to, from);
 2859|     98|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE11growth_leftEv:
 3181|    200|  size_t growth_left() const { return common().growth_left(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE28rehash_and_grow_if_necessaryEv:
 2970|      8|  void rehash_and_grow_if_necessary() {
 2971|      8|    const size_t cap = capacity();
 2972|      8|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 2, False: 6]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      2|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 2]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      8|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      8|      resize(NextCapacity(cap));
 3020|      8|    }
 3021|      8|  }
descriptor.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE4sizeEv:
 2287|      2|  size_t size() const { return common().size(); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE15set_growth_leftEm:
 3182|    100|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE10emplace_atIJRKPS6_EEEvmDpOT_:
 3151|    100|  void emplace_at(size_t i, Args&&... args) {
 3152|    100|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|    100|               iterator_at(i) &&
 3156|    100|           "constructed value does not match the lookup key");
 3157|    100|  }
descriptor.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf15FieldDescriptorEEENS5_12_GLOBAL__N_116ParentNumberHashENSA_14ParentNumberEqENSt3__19allocatorIS8_EEE9constructIJRKPS6_EEEvPS8_DpOT_:
 2851|    100|  inline void construct(slot_type* slot, Args&&... args) {
 2852|    100|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|    100|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE15unchecked_derefENSP_8iteratorE:
 3166|    210|  reference unchecked_deref(iterator it) { return it.unchecked_deref(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE8iterator15unchecked_derefEv:
 2029|    210|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE22find_or_prepare_insertISA_EENSL_ImbEERKT_:
 3086|    210|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|    210|    prefetch_heap_block();
 3088|    210|    auto hash = hash_ref()(key);
 3089|    210|    auto seq = probe(common(), hash);
 3090|    210|    const ctrl_t* ctrl = control();
 3091|    210|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 210, Folded]
  ------------------
 3092|    210|      Group g{ctrl + seq.offset()};
 3093|    210|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 206, False: 4]
  ------------------
 3094|    206|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|    206|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 206, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 206]
  |  |  |  Branch (179:57): [True: 206, False: 0]
  |  |  ------------------
  ------------------
 3095|    206|                EqualElement<K>{key, eq_ref()},
 3096|    206|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|    206|          return {seq.offset(i), false};
 3098|    206|      }
 3099|      4|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|      4|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 4, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 4]
  |  |  |  Branch (179:57): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|      4|    return {prepare_insert(hash), true};
 3104|    210|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE19prefetch_heap_blockEv:
 3187|    210|  void prefetch_heap_block() const {
 3188|    210|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|    210|    __builtin_prefetch(control(), 0, 1);
 3190|    210|#endif
 3191|    210|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE8hash_refEv:
 3202|    210|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE12EqualElementISA_EclISA_JRKNS4_21piecewise_construct_tENS4_5tupleIJRSM_EEENSW_IJRKSH_EEEEEEbRKT_DpOT0_:
 2813|    206|    bool operator()(const K2& lhs, Args&&...) const {
 2814|    206|      return eq(lhs, rhs);
 2815|    206|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE6eq_refEv:
 3204|    206|  key_equal& eq_ref() { return settings_.template get<2>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE14prepare_insertEm:
 3110|      4|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|      4|    const bool rehash_for_bug_detection =
 3112|      4|        common().should_rehash_for_bug_detection_on_insert();
 3113|      4|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 4]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|      4|    auto target = find_first_non_full(common(), hash);
 3119|      4|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 4, False: 0]
  ------------------
 3120|      4|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|      7|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 3, False: 1]
  |  |  |  Branch (178:49): [Folded, False: 4]
  |  |  |  Branch (178:59): [True: 3, False: 1]
  |  |  |  Branch (178:59): [True: 3, False: 0]
  |  |  ------------------
  ------------------
 3121|      4|                           !IsDeleted(control()[target.offset]))) {
 3122|      3|      size_t old_capacity = capacity();
 3123|      3|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      3|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      3|          common(), old_capacity, hash);
 3133|      3|    }
 3134|      4|    common().increment_size();
 3135|      4|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|      4|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|      4|    common().maybe_increment_generation_on_insert();
 3138|      4|    infoz().RecordInsert(hash, target.probe_length);
 3139|      4|    return target.offset;
 3140|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE6resizeEm:
 2905|      3|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      3|    assert(IsValidCapacity(new_capacity));
 2907|      3|    HashSetResizeHelper resize_helper(common());
 2908|      3|    auto* old_slots = slot_array();
 2909|      3|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      3|    const bool grow_single_group =
 2914|      3|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      3|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      3|                                      alignof(slot_type)>(
 2917|      3|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      3|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      3|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 1, False: 2]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      1|      return;
 2923|      1|    }
 2924|       |
 2925|      2|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 2, False: 0]
  ------------------
 2926|      2|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [Folded, False: 2]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      2|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      2|                                                          old_slots);
 2934|      2|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      0|      auto* new_slots = slot_array();
 2937|      0|      size_t total_probe_length = 0;
 2938|      0|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 0, False: 0]
  ------------------
 2939|      0|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 0, False: 0]
  ------------------
 2940|      0|          size_t hash = PolicyTraits::apply(
 2941|      0|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|      0|          auto target = find_first_non_full(common(), hash);
 2943|      0|          size_t new_i = target.offset;
 2944|      0|          total_probe_length += target.probe_length;
 2945|      0|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|      0|          transfer(new_slots + new_i, old_slots + i);
 2947|      0|        }
 2948|      0|      }
 2949|      0|      infoz().RecordRehash(total_probe_length);
 2950|      0|    }
 2951|      2|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      2|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      2|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      2|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper23GrowSizeIntoSingleGroupINS1_18hash_policy_traitsINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEENS6_10unique_ptrIN6google8protobuf10FeatureSetENS6_14default_deleteISG_EEEEEEvEENSA_INS6_4pairIKSC_SJ_EEEEEEvRNS1_12CommonFieldsERT0_PNT_9slot_typeE:
 1655|      2|                               typename PolicyTraits::slot_type* old_slots) {
 1656|      2|    assert(old_capacity_ < Group::kWidth / 2);
 1657|      2|    assert(IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity()));
 1658|      2|    using slot_type = typename PolicyTraits::slot_type;
 1659|      2|    assert(is_single_group(c.capacity()));
 1660|       |
 1661|      2|    auto* new_slots = reinterpret_cast<slot_type*>(c.slot_array());
 1662|       |
 1663|      2|    size_t shuffle_bit = old_capacity_ / 2 + 1;
 1664|      6|    for (size_t i = 0; i < old_capacity_; ++i) {
  ------------------
  |  Branch (1664:24): [True: 4, False: 2]
  ------------------
 1665|      4|      if (IsFull(old_ctrl_[i])) {
  ------------------
  |  Branch (1665:11): [True: 4, False: 0]
  ------------------
 1666|      4|        size_t new_i = i ^ shuffle_bit;
 1667|      4|        SanitizerUnpoisonMemoryRegion(new_slots + new_i, sizeof(slot_type));
 1668|      4|        PolicyTraits::transfer(&alloc_ref, new_slots + new_i, old_slots + i);
 1669|      4|      }
 1670|      4|    }
 1671|      2|    PoisonSingleGroupEmptySlots(c, sizeof(slot_type));
 1672|      2|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE11growth_leftEv:
 3181|      8|  size_t growth_left() const { return common().growth_left(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE28rehash_and_grow_if_necessaryEv:
 2970|      3|  void rehash_and_grow_if_necessary() {
 2971|      3|    const size_t cap = capacity();
 2972|      3|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 3]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      3|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      3|      resize(NextCapacity(cap));
 3020|      3|    }
 3021|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE15set_growth_leftEm:
 3182|      4|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE10emplace_atIJRKNS4_21piecewise_construct_tENS4_5tupleIJOSA_EEENSU_IJEEEEEEvmDpOT_:
 3151|      4|  void emplace_at(size_t i, Args&&... args) {
 3152|      4|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|      4|               iterator_at(i) &&
 3156|      4|           "constructed value does not match the lookup key");
 3157|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE9constructIJRKNS4_21piecewise_construct_tENS4_5tupleIJOSA_EEENSU_IJEEEEEEvPNS1_13map_slot_typeISA_SH_EEDpOT_:
 2851|      4|  inline void construct(slot_type* slot, Args&&... args) {
 2852|      4|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE11iterator_atEm:
 3159|    210|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|    210|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|    210|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_10unique_ptrIN6google8protobuf10FeatureSetENS4_14default_deleteISE_EEEEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SH_EEEEE8iteratorC2EPNS1_6ctrl_tEPNS1_13map_slot_typeISA_SH_EEPKh:
 1984|    210|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|    210|          ctrl_(ctrl),
 1986|    210|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|    210|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|    210|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|    210|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEbEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_bEEEEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8containsINS4_17basic_string_viewIcS7_EEEEbRKT_:
 2724|      4|  bool contains(const key_arg<K>& key) const {
 2725|       |    // Here neither the iterator returned by `find()` nor `end()` can be invalid
 2726|       |    // outside of potential thread-safety issues.
 2727|       |    // `find()`'s return value is constructed, used, and then destructed
 2728|       |    // all in this context.
 2729|      4|    return !find(key).unchecked_equals(end());
 2730|      4|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE4findINS4_17basic_string_viewIcS7_EEEENSF_14const_iteratorERKT_:
 2718|      4|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|      4|    prefetch_heap_block();
 2720|      4|    return find(key, hash_ref()(key));
 2721|      4|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE4findINS4_17basic_string_viewIcS7_EEEENSF_14const_iteratorERKT_m:
 2713|      4|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|      4|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE14const_iteratorC2ENSF_8iteratorE:
 2047|     16|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8hash_refEv:
 3203|      8|  const hasher& hash_ref() const { return settings_.template get<1>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE14const_iterator16unchecked_equalsERKSG_:
 2075|      8|    bool unchecked_equals(const const_iterator& b) {
 2076|      8|      return inner_.unchecked_equals(b.inner_);
 2077|      8|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8iterator16unchecked_equalsERKSG_:
 2025|      8|    bool unchecked_equals(const iterator& b) { return ctrl_ == b.control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8iterator7controlEv:
 2009|      8|    ctrl_t* control() const { return ctrl_; }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE3endEv:
 2278|      8|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|      8|    return iterator(common().generation_ptr());
 2280|      8|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE8containsISA_EEbRKT_:
 2724|      4|  bool contains(const key_arg<K>& key) const {
 2725|       |    // Here neither the iterator returned by `find()` nor `end()` can be invalid
 2726|       |    // outside of potential thread-safety issues.
 2727|       |    // `find()`'s return value is constructed, used, and then destructed
 2728|       |    // all in this context.
 2729|      4|    return !find(key).unchecked_equals(end());
 2730|      4|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE4findISA_EENSF_14const_iteratorERKT_:
 2718|      4|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|      4|    prefetch_heap_block();
 2720|      4|    return find(key, hash_ref()(key));
 2721|      4|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE4findISA_EENSF_14const_iteratorERKT_m:
 2713|      4|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|      4|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS1_10StringHashENS1_8StringEqENS8_ISA_EEE4findISA_EENSF_8iteratorERKT_m:
 2688|      4|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|      4|    auto seq = probe(common(), hash);
 2690|      4|    slot_type* slot_ptr = slot_array();
 2691|      4|    const ctrl_t* ctrl = control();
 2692|      4|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 4, Folded]
  ------------------
 2693|      4|      Group g{ctrl + seq.offset()};
 2694|      4|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 0, False: 4]
  ------------------
 2695|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2696|      0|                EqualElement<K>{key, eq_ref()},
 2697|      0|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      0|          return iterator_at(seq.offset(i));
 2699|      0|      }
 2700|      4|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|      4|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 4, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 4]
  |  |  |  Branch (179:57): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEEC2Ev:
 2088|      8|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE19prefetch_heap_blockEv:
 3187|     98|  void prefetch_heap_block() const {
 3188|     98|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|     98|    __builtin_prefetch(control(), 0, 1);
 3190|     98|#endif
 3191|     98|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8hash_refEv:
 3202|     97|  hasher& hash_ref() { return settings_.template get<1>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE4sizeEv:
 2287|      4|  size_t size() const { return common().size(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8containsIS8_EEbRKT_:
 2724|      1|  bool contains(const key_arg<K>& key) const {
 2725|       |    // Here neither the iterator returned by `find()` nor `end()` can be invalid
 2726|       |    // outside of potential thread-safety issues.
 2727|       |    // `find()`'s return value is constructed, used, and then destructed
 2728|       |    // all in this context.
 2729|      1|    return !find(key).unchecked_equals(end());
 2730|      1|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE4findIS8_EENSH_14const_iteratorERKT_:
 2718|      1|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|      1|    prefetch_heap_block();
 2720|      1|    return find(key, hash_ref()(key));
 2721|      1|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE4findIS8_EENSH_14const_iteratorERKT_m:
 2713|      1|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|      1|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|      1|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE4findIS8_EENSH_8iteratorERKT_m:
 2688|     98|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|     98|    auto seq = probe(common(), hash);
 2690|     98|    slot_type* slot_ptr = slot_array();
 2691|     98|    const ctrl_t* ctrl = control();
 2692|     98|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 98, Folded]
  ------------------
 2693|     98|      Group g{ctrl + seq.offset()};
 2694|     98|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 0, False: 98]
  ------------------
 2695|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2696|      0|                EqualElement<K>{key, eq_ref()},
 2697|      0|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      0|          return iterator_at(seq.offset(i));
 2699|      0|      }
 2700|     98|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|     98|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 98, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 98]
  |  |  |  Branch (179:57): [True: 98, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|     98|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE14const_iteratorC2ENSH_8iteratorE:
 2047|      2|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8hash_refEv:
 3203|      1|  const hasher& hash_ref() const { return settings_.template get<1>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE14const_iterator16unchecked_equalsERKSI_:
 2075|      1|    bool unchecked_equals(const const_iterator& b) {
 2076|      1|      return inner_.unchecked_equals(b.inner_);
 2077|      1|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8iterator16unchecked_equalsERKSI_:
 2025|      1|    bool unchecked_equals(const iterator& b) { return ctrl_ == b.control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8iterator7controlEv:
 2009|      1|    ctrl_t* control() const { return ctrl_; }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE3endEv:
 2278|      1|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|      1|    return iterator(common().generation_ptr());
 2280|      1|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8iteratorC2EPKh:
 1993|    196|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE5eraseIS8_EEmRKT_:
 2516|     97|  size_type erase(const key_arg<K>& key) {
 2517|     97|    auto it = find(key);
 2518|     97|    if (it == end()) return 0;
  ------------------
  |  Branch (2518:9): [True: 97, False: 0]
  ------------------
 2519|      0|    erase(it);
 2520|      0|    return 1;
 2521|     97|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE4findIS8_EENSH_8iteratorERKT_:
 2706|     97|  iterator find(const key_arg<K>& key) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2707|     97|    prefetch_heap_block();
 2708|     97|    return find(key, hash_ref()(key));
 2709|     97|  }
_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE8iteratorESK_:
 1970|     97|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|     97|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|     97|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|     97|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|     97|                          a.generation_ptr(), b.generation_ptr());
 1975|     97|      return a.ctrl_ == b.ctrl_;
 1976|     97|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE3endEv:
 2271|    195|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|    195|    return iterator(common().generation_ptr());
 2273|    195|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEEC2Ev:
 2088|     67|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE5clearEv:
 2291|      8|  ABSL_ATTRIBUTE_REINITIALIZES void clear() {
 2292|       |    // Iterating over this container is O(bucket_count()). When bucket_count()
 2293|       |    // is much greater than size(), iteration becomes prohibitively expensive.
 2294|       |    // For clear() it is more important to reuse the allocated array when the
 2295|       |    // container is small because allocation takes comparatively long time
 2296|       |    // compared to destruction of the elements of the container. So we pick the
 2297|       |    // largest bucket_count() threshold for which iteration is still fast and
 2298|       |    // past that we simply deallocate the array.
 2299|      8|    const size_t cap = capacity();
 2300|      8|    if (cap == 0) {
  ------------------
  |  Branch (2300:9): [True: 8, False: 0]
  ------------------
 2301|       |      // Already guaranteed to be empty; so nothing to do.
 2302|      8|    } else {
 2303|      0|      destroy_slots();
 2304|      0|      ClearBackingArray(common(), GetPolicyFunctions(), /*reuse=*/cap < 128);
 2305|      0|    }
 2306|      8|    common().set_reserved_growth(0);
 2307|      8|    common().set_reservation_size(0);
 2308|      8|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIiEENS0_13hash_internal4HashIiEENSt3__18equal_toIiEENS8_9allocatorIiEEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE6insertINS4_12basic_stringIcS7_NSC_IcEEEETnNS4_9enable_ifIXsr4absl11disjunctionINS4_14is_convertibleIRKT_S8_EENSE_22SameAsElementReferenceISN_EEEE5valueEiE4typeELi0ETnNSJ_IXsr14IsDecomposableISN_EE5valueEiE4typeELi0EEENS4_4pairINSE_8iteratorEbEESN_:
 2339|      3|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|      3|    return emplace(value);
 2341|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE7emplaceIJRKNS4_12basic_stringIcS7_NSC_IcEEEEETnNS4_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENS4_4pairINSE_8iteratorEbEEDpOSM_:
 2422|      3|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|      3|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|      3|                               std::forward<Args>(args)...);
 2425|      3|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE19EmplaceDecomposableclINS4_12basic_stringIcS7_NSC_IcEEEEJRKSJ_EEENS4_4pairINSE_8iteratorEbEERKT_DpOT0_:
 2822|      3|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|      3|      auto res = s.find_or_prepare_insert(key);
 2824|      3|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 3, False: 0]
  ------------------
 2825|      3|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|      3|      }
 2827|      3|      return {s.iterator_at(res.first), res.second};
 2828|      3|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE22find_or_prepare_insertINS4_12basic_stringIcS7_NSC_IcEEEEEENS4_4pairImbEERKT_:
 3086|      3|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|      3|    prefetch_heap_block();
 3088|      3|    auto hash = hash_ref()(key);
 3089|      3|    auto seq = probe(common(), hash);
 3090|      3|    const ctrl_t* ctrl = control();
 3091|      3|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 3, Folded]
  ------------------
 3092|      3|      Group g{ctrl + seq.offset()};
 3093|      3|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 0, False: 3]
  ------------------
 3094|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3095|      0|                EqualElement<K>{key, eq_ref()},
 3096|      0|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      0|      }
 3099|      3|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|      3|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 3, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 3]
  |  |  |  Branch (179:57): [True: 3, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|      3|    return {prepare_insert(hash), true};
 3104|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE10emplace_atIJRKNS4_12basic_stringIcS7_NSC_IcEEEEEEEvmDpOT_:
 3151|      3|  void emplace_at(size_t i, Args&&... args) {
 3152|      3|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|      3|               iterator_at(i) &&
 3156|      3|           "constructed value does not match the lookup key");
 3157|      3|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE9constructIJRKNS4_12basic_stringIcS7_NSC_IcEEEEEEEvPS8_DpOT_:
 2851|      3|  inline void construct(slot_type* slot, Args&&... args) {
 2852|      3|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|      3|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEE5emptyEv:
 2286|      4|  bool empty() const { return !size(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_17DescriptorBuilder12MessageHintsEEENS1_6HashEqIS8_vE4HashENSD_2EqENSt3__19allocatorINSG_4pairIKS8_SA_EEEEE4sizeEv:
 2287|      4|  size_t size() const { return common().size(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf14FileDescriptorEEENS1_6HashEqIS8_vE4HashENSB_2EqENSt3__19allocatorIS8_EEE5emptyEv:
 2286|      4|  bool empty() const { return !size(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE4findISA_EENSM_8iteratorERKT_:
 2706|     45|  iterator find(const key_arg<K>& key) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2707|     45|    prefetch_heap_block();
 2708|     45|    return find(key, hash_ref()(key));
 2709|     45|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE4findISA_EENSM_8iteratorERKT_m:
 2688|     45|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|     45|    auto seq = probe(common(), hash);
 2690|     45|    slot_type* slot_ptr = slot_array();
 2691|     45|    const ctrl_t* ctrl = control();
 2692|     45|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 45, Folded]
  ------------------
 2693|     45|      Group g{ctrl + seq.offset()};
 2694|     45|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 6, False: 44]
  ------------------
 2695|      6|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      6|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 1, False: 5]
  |  |  |  Branch (179:48): [Folded, False: 6]
  |  |  |  Branch (179:57): [True: 1, False: 5]
  |  |  ------------------
  ------------------
 2696|      6|                EqualElement<K>{key, eq_ref()},
 2697|      6|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      1|          return iterator_at(seq.offset(i));
 2699|      6|      }
 2700|     44|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|     44|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 44, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 44]
  |  |  |  Branch (179:57): [True: 44, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|     45|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE3endEv:
 2271|     89|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|     89|    return iterator(common().generation_ptr());
 2273|     89|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iteratorC2EPKh:
 1993|     89|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
_ZN4absl12lts_2024011618container_internalneERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iteratorESP_:
 1977|     45|    friend bool operator!=(const iterator& a, const iterator& b) {
 1978|     45|      return !(a == b);
 1979|     45|    }
_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iteratorESP_:
 1970|     45|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|     45|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|     45|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|     45|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|     45|                          a.generation_ptr(), b.generation_ptr());
 1975|     45|      return a.ctrl_ == b.ctrl_;
 1976|     45|    }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iteratorptEv:
 1950|      1|    pointer operator->() const {
 1951|      1|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator->");
 1952|      1|      return &operator*();
 1953|      1|    }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iteratordeEv:
 1944|      1|    reference operator*() const {
 1945|      1|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator*()");
 1946|      1|      return unchecked_deref();
 1947|      1|    }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEENS1_10StringHashENS1_8StringEqENS8_INS4_4pairIKSA_SE_EEEEE8iterator15unchecked_derefEv:
 2029|      1|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE8containsINS4_12basic_stringIcS7_NSC_IcEEEEEEbRKT_:
 2724|    291|  bool contains(const key_arg<K>& key) const {
 2725|       |    // Here neither the iterator returned by `find()` nor `end()` can be invalid
 2726|       |    // outside of potential thread-safety issues.
 2727|       |    // `find()`'s return value is constructed, used, and then destructed
 2728|       |    // all in this context.
 2729|    291|    return !find(key).unchecked_equals(end());
 2730|    291|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE4findINS4_12basic_stringIcS7_NSC_IcEEEEEENSE_14const_iteratorERKT_:
 2718|    291|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|    291|    prefetch_heap_block();
 2720|    291|    return find(key, hash_ref()(key));
 2721|    291|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE4findINS4_12basic_stringIcS7_NSC_IcEEEEEENSE_14const_iteratorERKT_m:
 2713|    291|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|    291|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|    291|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEENS1_10StringHashENS1_8StringEqENS4_9allocatorIS8_EEE4findINS4_12basic_stringIcS7_NSC_IcEEEEEENSE_8iteratorERKT_m:
 2688|    291|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|    291|    auto seq = probe(common(), hash);
 2690|    291|    slot_type* slot_ptr = slot_array();
 2691|    291|    const ctrl_t* ctrl = control();
 2692|    291|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 291, Folded]
  ------------------
 2693|    291|      Group g{ctrl + seq.offset()};
 2694|    291|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 0, False: 291]
  ------------------
 2695|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2696|      0|                EqualElement<K>{key, eq_ref()},
 2697|      0|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      0|          return iterator_at(seq.offset(i));
 2699|      0|      }
 2700|    291|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|    291|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 291, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 291]
  |  |  |  Branch (179:57): [True: 291, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|    291|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEES8_EENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_S8_EEEEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyINSt3__16vectorIiNS4_9allocatorIiEEEEiEENS0_13hash_internal4HashIS8_EENS4_8equal_toIS8_EENS6_INS4_4pairIKS8_iEEEEEC2Ev:
 2088|      4|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEED2Ev:
 2264|      4|  ~raw_hash_set() { destructor_impl(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE15destructor_implEv:
 2882|      4|  inline void destructor_impl() {
 2883|      4|    if (capacity() == 0) return;
  ------------------
  |  Branch (2883:9): [True: 4, False: 0]
  ------------------
 2884|      0|    destroy_slots();
 2885|      0|    dealloc();
 2886|      0|  }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE8capacityEv:
 2288|      4|  size_t capacity() const { return common().capacity(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE6commonEv:
 3194|     12|  const CommonFields& common() const { return settings_.template get<0>(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE7controlEv:
 3196|      4|  ctrl_t* control() const { return common().control(); }
_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE10slot_arrayEv:
 3197|      4|  slot_type* slot_array() const {
 3198|      4|    return static_cast<slot_type*>(common().slot_array());
 3199|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE6commonEv:
 3193|      8|  CommonFields& common() { return settings_.template get<0>(); }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEEC2Ev:
 2088|      6|      std::is_nothrow_default_constructible<allocator_type>::value) {}
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE5beginEv:
 2266|      4|  iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2267|      4|    auto it = iterator_at(0);
 2268|      4|    it.skip_empty_or_deleted();
 2269|      4|    return it;
 2270|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE11iterator_atEm:
 3159|      4|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|      4|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE8iteratorC2EPNS1_6ctrl_tEPNS1_13map_slot_typeIS8_SC_EEPKh:
 1984|      4|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|      4|          ctrl_(ctrl),
 1986|      4|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|      4|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|      4|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|      4|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE8iterator21skip_empty_or_deletedEv:
 1999|      4|    void skip_empty_or_deleted() {
 2000|      4|      while (IsEmptyOrDeleted(*ctrl_)) {
  ------------------
  |  Branch (2000:14): [True: 0, False: 4]
  ------------------
 2001|      0|        uint32_t shift =
 2002|      0|            GroupEmptyOrDeleted{ctrl_}.CountLeadingEmptyOrDeleted();
 2003|      0|        ctrl_ += shift;
 2004|      0|        slot_ += shift;
 2005|      0|      }
 2006|      4|      if (ABSL_PREDICT_FALSE(*ctrl_ == ctrl_t::kSentinel)) ctrl_ = nullptr;
  ------------------
  |  |  178|      4|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 4, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 4]
  |  |  |  Branch (178:58): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 2007|      4|    }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE3endEv:
 2271|      4|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|      4|    return iterator(common().generation_ptr());
 2273|      4|  }
_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE8iteratorC2EPKh:
 1993|      4|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
_ZN4absl12lts_2024011618container_internalneERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE8iteratorESR_:
 1977|      4|    friend bool operator!=(const iterator& a, const iterator& b) {
 1978|      4|      return !(a == b);
 1979|      4|    }
_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorEPKNS5_21DynamicMessageFactory8TypeInfoEEENS1_6HashEqIS8_vE4HashENSF_2EqENSt3__19allocatorINSI_4pairIKS8_SC_EEEEE8iteratorESR_:
 1970|      4|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|      4|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|      4|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|      4|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|      4|                          a.generation_ptr(), b.generation_ptr());
 1975|      4|      return a.ctrl_ == b.ctrl_;
 1976|      4|    }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE4findINS9_16ExtensionInfoKeyEEENSF_14const_iteratorERKT_:
 2718|      8|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2719|      8|    prefetch_heap_block();
 2720|      8|    return find(key, hash_ref()(key));
 2721|      8|  }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE19prefetch_heap_blockEv:
 3187|      9|  void prefetch_heap_block() const {
 3188|      9|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|      9|    __builtin_prefetch(control(), 0, 1);
 3190|      9|#endif
 3191|      9|  }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE7controlEv:
 3196|     29|  ctrl_t* control() const { return common().control(); }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE6commonEv:
 3194|     60|  const CommonFields& common() const { return settings_.template get<0>(); }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE4findINS9_16ExtensionInfoKeyEEENSF_14const_iteratorERKT_m:
 2713|      8|                      size_t hash) const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2714|      8|    return const_cast<raw_hash_set*>(this)->find(key, hash);
 2715|      8|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE4findINS9_16ExtensionInfoKeyEEENSF_8iteratorERKT_m:
 2688|      8|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|      8|    auto seq = probe(common(), hash);
 2690|      8|    slot_type* slot_ptr = slot_array();
 2691|      8|    const ctrl_t* ctrl = control();
 2692|      8|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 8, Folded]
  ------------------
 2693|      8|      Group g{ctrl + seq.offset()};
 2694|      8|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 8, False: 0]
  ------------------
 2695|      8|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      8|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 8, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 8]
  |  |  |  Branch (179:57): [True: 8, False: 0]
  |  |  ------------------
  ------------------
 2696|      8|                EqualElement<K>{key, eq_ref()},
 2697|      8|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      8|          return iterator_at(seq.offset(i));
 2699|      8|      }
 2700|      0|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|      8|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE6commonEv:
 3193|     29|  CommonFields& common() { return settings_.template get<0>(); }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE10slot_arrayEv:
 3197|     19|  slot_type* slot_array() const {
 3198|     19|    return static_cast<slot_type*>(common().slot_array());
 3199|     19|  }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE12EqualElementINS9_16ExtensionInfoKeyEEclIS7_JRS7_EEEbRKT_DpOT0_:
 2813|      8|    bool operator()(const K2& lhs, Args&&...) const {
 2814|      8|      return eq(lhs, rhs);
 2815|      8|    }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE6eq_refEv:
 3204|      8|  key_equal& eq_ref() { return settings_.template get<2>(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE11iterator_atEm:
 3159|      9|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|      9|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|      9|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8iteratorC2EPNS1_6ctrl_tEPS7_PKh:
 1984|      9|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|      9|          ctrl_(ctrl),
 1986|      9|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|      9|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|      9|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|      9|    }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8iteratorC2EPKh:
 1993|      8|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE14const_iteratorC2ENSF_8iteratorE:
 2047|     16|    const_iterator(iterator i) : inner_(std::move(i)) {}  // NOLINT
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8hash_refEv:
 3203|      8|  const hasher& hash_ref() const { return settings_.template get<1>(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE14const_iteratorESI_:
 2058|      8|    friend bool operator==(const const_iterator& a, const const_iterator& b) {
 2059|      8|      return a.inner_ == b.inner_;
 2060|      8|    }
extension_set.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8iteratorESI_:
 1970|      8|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|      8|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|      8|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|      8|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|      8|                          a.generation_ptr(), b.generation_ptr());
 1975|      8|      return a.ctrl_ == b.ctrl_;
 1976|      8|    }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE3endEv:
 2278|      8|  const_iterator end() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2279|      8|    return iterator(common().generation_ptr());
 2280|      8|  }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE14const_iteratordeEv:
 2049|      8|    reference operator*() const { return *inner_; }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8iteratordeEv:
 1944|      8|    reference operator*() const {
 1945|      8|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator*()");
 1946|      8|      return unchecked_deref();
 1947|      8|    }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8iterator15unchecked_derefEv:
 2029|      8|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8capacityEv:
 2288|      2|  size_t capacity() const { return common().capacity(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE9alloc_refEv:
 3206|      2|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE5infozEv:
 3200|      1|  HashtablezInfoHandle infoz() { return common().infoz(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEEC2Ev:
 2088|      1|      std::is_nothrow_default_constructible<allocator_type>::value) {}
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE6insertIS7_TnNSC_9enable_ifIXsr4absl11disjunctionINSC_14is_convertibleIRKT_S7_EENSF_22SameAsElementReferenceISL_EEEE5valueEiE4typeELi0ETnNSH_IXsr14IsDecomposableISL_EE5valueEiE4typeELi0EEENSC_4pairINSF_8iteratorEbEESL_:
 2339|      1|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|      1|    return emplace(value);
 2341|      1|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE7emplaceIJRKS7_ETnNSC_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSC_4pairINSF_8iteratorEbEEDpOSK_:
 2422|      1|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|      1|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|      1|                               std::forward<Args>(args)...);
 2425|      1|  }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE19EmplaceDecomposableclIS7_JRKS7_EEENSC_4pairINSF_8iteratorEbEERKT_DpOT0_:
 2822|      1|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|      1|      auto res = s.find_or_prepare_insert(key);
 2824|      1|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 1, False: 0]
  ------------------
 2825|      1|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|      1|      }
 2827|      1|      return {s.iterator_at(res.first), res.second};
 2828|      1|    }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE22find_or_prepare_insertIS7_EENSC_4pairImbEERKT_:
 3086|      1|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|      1|    prefetch_heap_block();
 3088|      1|    auto hash = hash_ref()(key);
 3089|      1|    auto seq = probe(common(), hash);
 3090|      1|    const ctrl_t* ctrl = control();
 3091|      1|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 1, Folded]
  ------------------
 3092|      1|      Group g{ctrl + seq.offset()};
 3093|      1|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 0, False: 1]
  ------------------
 3094|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3095|      0|                EqualElement<K>{key, eq_ref()},
 3096|      0|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      0|      }
 3099|      1|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|      1|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 1, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 1]
  |  |  |  Branch (179:57): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|      1|    return {prepare_insert(hash), true};
 3104|      1|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE8hash_refEv:
 3202|      1|  hasher& hash_ref() { return settings_.template get<1>(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE14prepare_insertEm:
 3110|      1|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|      1|    const bool rehash_for_bug_detection =
 3112|      1|        common().should_rehash_for_bug_detection_on_insert();
 3113|      1|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 1]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|      1|    auto target = find_first_non_full(common(), hash);
 3119|      1|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 1, False: 0]
  ------------------
 3120|      1|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|      2|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 1, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 1]
  |  |  |  Branch (178:59): [True: 1, False: 0]
  |  |  |  Branch (178:59): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 3121|      1|                           !IsDeleted(control()[target.offset]))) {
 3122|      1|      size_t old_capacity = capacity();
 3123|      1|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      1|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      1|          common(), old_capacity, hash);
 3133|      1|    }
 3134|      1|    common().increment_size();
 3135|      1|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|      1|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|      1|    common().maybe_increment_generation_on_insert();
 3138|      1|    infoz().RecordInsert(hash, target.probe_length);
 3139|      1|    return target.offset;
 3140|      1|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE6resizeEm:
 2905|      1|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      1|    assert(IsValidCapacity(new_capacity));
 2907|      1|    HashSetResizeHelper resize_helper(common());
 2908|      1|    auto* old_slots = slot_array();
 2909|      1|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      1|    const bool grow_single_group =
 2914|      1|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      1|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      1|                                      alignof(slot_type)>(
 2917|      1|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      1|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      1|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 1, False: 0]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      1|      return;
 2923|      1|    }
 2924|       |
 2925|      0|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 0, False: 0]
  ------------------
 2926|      0|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [True: 0, Folded]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      0|        return;
 2929|      0|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      0|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      0|                                                          old_slots);
 2934|      0|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      0|      auto* new_slots = slot_array();
 2937|      0|      size_t total_probe_length = 0;
 2938|      0|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 0, False: 0]
  ------------------
 2939|      0|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 0, False: 0]
  ------------------
 2940|      0|          size_t hash = PolicyTraits::apply(
 2941|      0|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|      0|          auto target = find_first_non_full(common(), hash);
 2943|      0|          size_t new_i = target.offset;
 2944|      0|          total_probe_length += target.probe_length;
 2945|      0|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|      0|          transfer(new_slots + new_i, old_slots + i);
 2947|      0|        }
 2948|      0|      }
 2949|      0|      infoz().RecordRehash(total_probe_length);
 2950|      0|    }
 2951|      0|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      0|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      0|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      0|  }
_ZN4absl12lts_2024011618container_internal19HashSetResizeHelper15InitializeSlotsINSt3__19allocatorIcEELm48ELb1ELm8EEEbRNS1_12CommonFieldsEPvT_:
 1595|      1|                                               Alloc alloc) {
 1596|      1|    assert(c.capacity());
 1597|       |    // Folks with custom allocators often make unwarranted assumptions about the
 1598|       |    // behavior of their classes vis-a-vis trivial destructability and what
 1599|       |    // calls they will or won't make.  Avoid sampling for people with custom
 1600|       |    // allocators to get us out of this mess.  This is not a hard guarantee but
 1601|       |    // a workaround while we plan the exact guarantee we want to provide.
 1602|      1|    const size_t sample_size =
 1603|      1|        (std::is_same<Alloc, std::allocator<char>>::value &&
  ------------------
  |  Branch (1603:10): [True: 1, Folded]
  ------------------
 1604|      1|         c.slot_array() == nullptr)
  ------------------
  |  Branch (1604:10): [True: 1, False: 0]
  ------------------
 1605|      1|            ? SizeOfSlot
 1606|      1|            : 0;
 1607|      1|    HashtablezInfoHandle infoz =
 1608|      1|        sample_size > 0 ? Sample(sample_size) : c.infoz();
  ------------------
  |  Branch (1608:9): [True: 1, False: 0]
  ------------------
 1609|       |
 1610|      1|    const bool has_infoz = infoz.IsSampled();
 1611|      1|    const size_t cap = c.capacity();
 1612|      1|    const size_t alloc_size =
 1613|      1|        AllocSize(cap, SizeOfSlot, AlignOfSlot, has_infoz);
 1614|      1|    char* mem = static_cast<char*>(
 1615|      1|        Allocate<BackingArrayAlignment(AlignOfSlot)>(&alloc, alloc_size));
 1616|      1|    const GenerationType old_generation = c.generation();
 1617|      1|    c.set_generation_ptr(reinterpret_cast<GenerationType*>(
 1618|      1|        mem + GenerationOffset(cap, has_infoz)));
 1619|      1|    c.set_generation(NextGeneration(old_generation));
 1620|      1|    c.set_control(reinterpret_cast<ctrl_t*>(mem + ControlOffset(has_infoz)));
 1621|      1|    c.set_slots(mem + SlotOffset(cap, AlignOfSlot, has_infoz));
 1622|      1|    ResetGrowthLeft(c);
 1623|       |
 1624|      1|    const bool grow_single_group =
 1625|      1|        IsGrowingIntoSingleGroupApplicable(old_capacity_, c.capacity());
 1626|      1|    if (old_capacity_ != 0 && grow_single_group) {
  ------------------
  |  Branch (1626:9): [True: 0, False: 1]
  |  Branch (1626:31): [True: 0, False: 0]
  ------------------
 1627|      0|      if (TransferUsesMemcpy) {
  ------------------
  |  Branch (1627:11): [True: 0, Folded]
  ------------------
 1628|      0|        GrowSizeIntoSingleGroupTransferable(c, old_slots, SizeOfSlot);
 1629|      0|        DeallocateOld<AlignOfSlot>(alloc, SizeOfSlot, old_slots);
 1630|      0|      } else {
 1631|      0|        GrowIntoSingleGroupShuffleControlBytes(c.control(), c.capacity());
 1632|      0|      }
 1633|      1|    } else {
 1634|      1|      ResetCtrl(c, SizeOfSlot);
 1635|      1|    }
 1636|       |
 1637|      1|    c.set_has_infoz(has_infoz);
 1638|      1|    if (has_infoz) {
  ------------------
  |  Branch (1638:9): [True: 0, False: 1]
  ------------------
 1639|      0|      infoz.RecordStorageChanged(c.size(), cap);
 1640|      0|      if (grow_single_group || old_capacity_ == 0) {
  ------------------
  |  Branch (1640:11): [True: 0, False: 0]
  |  Branch (1640:32): [True: 0, False: 0]
  ------------------
 1641|      0|        infoz.RecordRehash(0);
 1642|      0|      }
 1643|      0|      c.set_infoz(infoz);
 1644|      0|    }
 1645|      1|    return grow_single_group;
 1646|      1|  }
extension_set.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE11growth_leftEv:
 3181|      2|  size_t growth_left() const { return common().growth_left(); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE28rehash_and_grow_if_necessaryEv:
 2970|      1|  void rehash_and_grow_if_necessary() {
 2971|      1|    const size_t cap = capacity();
 2972|      1|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 1]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      1|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      1|      resize(NextCapacity(cap));
 3020|      1|    }
 3021|      1|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE15set_growth_leftEm:
 3182|      1|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE10emplace_atIJRKS7_EEEvmDpOT_:
 3151|      1|  void emplace_at(size_t i, Args&&... args) {
 3152|      1|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|      1|               iterator_at(i) &&
 3156|      1|           "constructed value does not match the lookup key");
 3157|      1|  }
extension_set.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIN6google8protobuf8internal13ExtensionInfoEEENS6_12_GLOBAL__N_115ExtensionHasherENS9_11ExtensionEqENSt3__19allocatorIS7_EEE9constructIJRKS7_EEEvPS7_DpOT_:
 2851|      1|  inline void construct(slot_type* slot, Args&&... args) {
 2852|      1|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|      1|  }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE8capacityEv:
 2288|      8|  size_t capacity() const { return common().capacity(); }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE6commonEv:
 3194|  20.0k|  const CommonFields& common() const { return settings_.template get<0>(); }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE7controlEv:
 3196|  12.0k|  ctrl_t* control() const { return common().control(); }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE10slot_arrayEv:
 3197|  8.00k|  slot_type* slot_array() const {
 3198|  8.00k|    return static_cast<slot_type*>(common().slot_array());
 3199|  8.00k|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE9alloc_refEv:
 3206|     14|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE5infozEv:
 3200|     10|  HashtablezInfoHandle infoz() { return common().infoz(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE6commonEv:
 3193|  12.0k|  CommonFields& common() { return settings_.template get<0>(); }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE8capacityEv:
 2288|     10|  size_t capacity() const { return common().capacity(); }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE6commonEv:
 3194|     73|  const CommonFields& common() const { return settings_.template get<0>(); }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE7controlEv:
 3196|     32|  ctrl_t* control() const { return common().control(); }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE10slot_arrayEv:
 3197|     19|  slot_type* slot_array() const {
 3198|     19|    return static_cast<slot_type*>(common().slot_array());
 3199|     19|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE9alloc_refEv:
 3206|     11|  allocator_type& alloc_ref() { return settings_.template get<3>(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE5infozEv:
 3200|      6|  HashtablezInfoHandle infoz() { return common().infoz(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE6commonEv:
 3193|     77|  CommonFields& common() { return settings_.template get<0>(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEEC2Ev:
 2088|      2|      std::is_nothrow_default_constructible<allocator_type>::value) {}
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE8iterator15unchecked_derefEv:
 2029|  3.98k|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE22find_or_prepare_insertIS8_EENSJ_ImbEERKT_:
 3086|     10|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|     10|    prefetch_heap_block();
 3088|     10|    auto hash = hash_ref()(key);
 3089|     10|    auto seq = probe(common(), hash);
 3090|     10|    const ctrl_t* ctrl = control();
 3091|     10|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 10, Folded]
  ------------------
 3092|     10|      Group g{ctrl + seq.offset()};
 3093|     10|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 0, False: 10]
  ------------------
 3094|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3095|      0|                EqualElement<K>{key, eq_ref()},
 3096|      0|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      0|      }
 3099|     10|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|     10|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 10, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 10]
  |  |  |  Branch (179:57): [True: 10, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|     10|    return {prepare_insert(hash), true};
 3104|     10|  }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE19prefetch_heap_blockEv:
 3187|  4.00k|  void prefetch_heap_block() const {
 3188|  4.00k|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|  4.00k|    __builtin_prefetch(control(), 0, 1);
 3190|  4.00k|#endif
 3191|  4.00k|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE8hash_refEv:
 3202|  4.00k|  hasher& hash_ref() { return settings_.template get<1>(); }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE12EqualElementIS8_EclIS8_JRKNSH_21piecewise_construct_tENSH_5tupleIJRSK_EEENSU_IJRKSB_EEEEEEbRKT_DpOT0_:
 2813|  3.98k|    bool operator()(const K2& lhs, Args&&...) const {
 2814|  3.98k|      return eq(lhs, rhs);
 2815|  3.98k|    }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE6eq_refEv:
 3204|  3.98k|  key_equal& eq_ref() { return settings_.template get<2>(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE14prepare_insertEm:
 3110|     10|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|     10|    const bool rehash_for_bug_detection =
 3112|     10|        common().should_rehash_for_bug_detection_on_insert();
 3113|     10|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 10]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|     10|    auto target = find_first_non_full(common(), hash);
 3119|     10|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 10, False: 0]
  ------------------
 3120|     10|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|     14|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 4, False: 6]
  |  |  |  Branch (178:49): [Folded, False: 10]
  |  |  |  Branch (178:59): [True: 4, False: 6]
  |  |  |  Branch (178:59): [True: 4, False: 0]
  |  |  ------------------
  ------------------
 3121|     10|                           !IsDeleted(control()[target.offset]))) {
 3122|      4|      size_t old_capacity = capacity();
 3123|      4|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      4|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      4|          common(), old_capacity, hash);
 3133|      4|    }
 3134|     10|    common().increment_size();
 3135|     10|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|     10|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|     10|    common().maybe_increment_generation_on_insert();
 3138|     10|    infoz().RecordInsert(hash, target.probe_length);
 3139|     10|    return target.offset;
 3140|     10|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE6resizeEm:
 2905|      4|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      4|    assert(IsValidCapacity(new_capacity));
 2907|      4|    HashSetResizeHelper resize_helper(common());
 2908|      4|    auto* old_slots = slot_array();
 2909|      4|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      4|    const bool grow_single_group =
 2914|      4|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      4|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      4|                                      alignof(slot_type)>(
 2917|      4|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      4|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      4|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 1, False: 3]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      1|      return;
 2923|      1|    }
 2924|       |
 2925|      3|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 3, False: 0]
  ------------------
 2926|      3|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [True: 3, Folded]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      3|        return;
 2929|      3|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      0|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      0|                                                          old_slots);
 2934|      0|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      0|      auto* new_slots = slot_array();
 2937|      0|      size_t total_probe_length = 0;
 2938|      0|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 0, False: 0]
  ------------------
 2939|      0|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 0, False: 0]
  ------------------
 2940|      0|          size_t hash = PolicyTraits::apply(
 2941|      0|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|      0|          auto target = find_first_non_full(common(), hash);
 2943|      0|          size_t new_i = target.offset;
 2944|      0|          total_probe_length += target.probe_length;
 2945|      0|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|      0|          transfer(new_slots + new_i, old_slots + i);
 2947|      0|        }
 2948|      0|      }
 2949|      0|      infoz().RecordRehash(total_probe_length);
 2950|      0|    }
 2951|      0|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      0|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      0|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      0|  }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE11growth_leftEv:
 3181|     20|  size_t growth_left() const { return common().growth_left(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE28rehash_and_grow_if_necessaryEv:
 2970|      4|  void rehash_and_grow_if_necessary() {
 2971|      4|    const size_t cap = capacity();
 2972|      4|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 4]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      4|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      4|      resize(NextCapacity(cap));
 3020|      4|    }
 3021|      4|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE15set_growth_leftEm:
 3182|     10|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE11iterator_atEm:
 3159|  3.99k|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|  3.99k|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|  3.99k|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE8iteratorC2EPNS1_6ctrl_tEPNS1_13map_slot_typeIS8_SB_EEPKh:
 1984|  3.99k|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|  3.99k|          ctrl_(ctrl),
 1986|  3.99k|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|  3.99k|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|  3.99k|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|  3.99k|    }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE4findIS8_EENSN_8iteratorERKT_:
 2706|  3.99k|  iterator find(const key_arg<K>& key) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2707|  3.99k|    prefetch_heap_block();
 2708|  3.99k|    return find(key, hash_ref()(key));
 2709|  3.99k|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE4findIS8_EENSN_8iteratorERKT_m:
 2688|  3.99k|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|  3.99k|    auto seq = probe(common(), hash);
 2690|  3.99k|    slot_type* slot_ptr = slot_array();
 2691|  3.99k|    const ctrl_t* ctrl = control();
 2692|  3.99k|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 3.99k, Folded]
  ------------------
 2693|  3.99k|      Group g{ctrl + seq.offset()};
 2694|  3.99k|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 3.98k, False: 2]
  ------------------
 2695|  3.98k|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|  3.98k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 3.98k, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 3.98k]
  |  |  |  Branch (179:57): [True: 3.98k, False: 0]
  |  |  ------------------
  ------------------
 2696|  3.98k|                EqualElement<K>{key, eq_ref()},
 2697|  3.98k|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|  3.98k|          return iterator_at(seq.offset(i));
 2699|  3.98k|      }
 2700|      2|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|      2|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 2, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 2]
  |  |  |  Branch (179:57): [True: 2, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|  3.99k|  }
message.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE8iteratorESQ_:
 1970|  3.99k|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|  3.99k|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|  3.99k|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|  3.99k|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|  3.99k|                          a.generation_ptr(), b.generation_ptr());
 1975|  3.99k|      return a.ctrl_ == b.ctrl_;
 1976|  3.99k|    }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE3endEv:
 2271|  3.99k|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|  3.99k|    return iterator(common().generation_ptr());
 2273|  3.99k|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE8iteratorC2EPKh:
 1993|  3.99k|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE8iteratorptEv:
 1950|  3.98k|    pointer operator->() const {
 1951|  3.98k|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator->");
 1952|  3.98k|      return &operator*();
 1953|  3.98k|    }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE8iteratordeEv:
 1944|  3.98k|    reference operator*() const {
 1945|  3.98k|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator*()");
 1946|  3.98k|      return unchecked_deref();
 1947|  3.98k|    }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE4findINSF_17basic_string_viewIcNSF_11char_traitsIcEEEEEENSI_8iteratorERKT_:
 2706|      1|  iterator find(const key_arg<K>& key) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2707|      1|    prefetch_heap_block();
 2708|      1|    return find(key, hash_ref()(key));
 2709|      1|  }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE19prefetch_heap_blockEv:
 3187|      7|  void prefetch_heap_block() const {
 3188|      7|#if ABSL_HAVE_BUILTIN(__builtin_prefetch) || defined(__GNUC__)
 3189|      7|    __builtin_prefetch(control(), 0, 1);
 3190|      7|#endif
 3191|      7|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE4findINSF_17basic_string_viewIcNSF_11char_traitsIcEEEEEENSI_8iteratorERKT_m:
 2688|      1|                size_t hash) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2689|      1|    auto seq = probe(common(), hash);
 2690|      1|    slot_type* slot_ptr = slot_array();
 2691|      1|    const ctrl_t* ctrl = control();
 2692|      1|    while (true) {
  ------------------
  |  Branch (2692:12): [True: 1, Folded]
  ------------------
 2693|      1|      Group g{ctrl + seq.offset()};
 2694|      1|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (2694:23): [True: 1, False: 0]
  ------------------
 2695|      1|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      1|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 1, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 1]
  |  |  |  Branch (179:57): [True: 1, False: 0]
  |  |  ------------------
  ------------------
 2696|      1|                EqualElement<K>{key, eq_ref()},
 2697|      1|                PolicyTraits::element(slot_ptr + seq.offset(i)))))
 2698|      1|          return iterator_at(seq.offset(i));
 2699|      1|      }
 2700|      0|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) return end();
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2701|      0|      seq.next();
 2702|       |      assert(seq.index() <= capacity() && "full table!");
 2703|      0|    }
 2704|      1|  }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE12EqualElementINSF_17basic_string_viewIcNSF_11char_traitsIcEEEEEclIS9_JRS9_EEEbRKT_DpOT0_:
 2813|      1|    bool operator()(const K2& lhs, Args&&...) const {
 2814|      1|      return eq(lhs, rhs);
 2815|      1|    }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE6eq_refEv:
 3204|      1|  key_equal& eq_ref() { return settings_.template get<2>(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE11iterator_atEm:
 3159|      7|  iterator iterator_at(size_t i) ABSL_ATTRIBUTE_LIFETIME_BOUND {
 3160|      7|    return {control() + i, slot_array() + i, common().generation_ptr()};
 3161|      7|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE8iteratorC2EPNS1_6ctrl_tEPS9_PKh:
 1984|      7|        : HashSetIteratorGenerationInfo(generation_ptr),
 1985|      7|          ctrl_(ctrl),
 1986|      7|          slot_(slot) {
 1987|       |      // This assumption helps the compiler know that any non-end iterator is
 1988|       |      // not equal to any end iterator.
 1989|      7|      ABSL_ASSUME(ctrl != nullptr);
  ------------------
  |  |  259|      7|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
 1990|      7|    }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE8hash_refEv:
 3202|      7|  hasher& hash_ref() { return settings_.template get<1>(); }
message.cc:_ZN4absl12lts_2024011618container_internaleqERKNS1_12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE8iteratorESL_:
 1970|      1|    friend bool operator==(const iterator& a, const iterator& b) {
 1971|      1|      AssertIsValidForComparison(a.ctrl_, a.generation(), a.generation_ptr());
 1972|      1|      AssertIsValidForComparison(b.ctrl_, b.generation(), b.generation_ptr());
 1973|      1|      AssertSameContainer(a.ctrl_, b.ctrl_, a.slot_, b.slot_,
 1974|      1|                          a.generation_ptr(), b.generation_ptr());
 1975|      1|      return a.ctrl_ == b.ctrl_;
 1976|      1|    }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE3endEv:
 2271|      1|  iterator end() ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2272|      1|    return iterator(common().generation_ptr());
 2273|      1|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE8iteratorC2EPKh:
 1993|      1|        : HashSetIteratorGenerationInfo(generation_ptr), ctrl_(nullptr) {}
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE8iteratordeEv:
 1944|      1|    reference operator*() const {
 1945|      1|      AssertIsFull(ctrl_, generation(), generation_ptr(), "operator*()");
 1946|      1|      return unchecked_deref();
 1947|      1|    }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE8iterator15unchecked_derefEv:
 2029|      1|    reference unchecked_deref() const { return PolicyTraits::element(slot_); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE6insertIS9_TnNSF_9enable_ifIXsr4absl11disjunctionINSF_14is_convertibleIRKT_S9_EENSI_22SameAsElementReferenceISO_EEEE5valueEiE4typeELi0ETnNSK_IXsr14IsDecomposableISO_EE5valueEiE4typeELi0EEENSF_4pairINSI_8iteratorEbEESO_:
 2339|      6|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2340|      6|    return emplace(value);
 2341|      6|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE7emplaceIJRKS9_ETnNSF_9enable_ifIXsr14IsDecomposableIDpT_EE5valueEiE4typeELi0EEENSF_4pairINSI_8iteratorEbEEDpOSN_:
 2422|      6|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
 2423|      6|    return PolicyTraits::apply(EmplaceDecomposable{*this},
 2424|      6|                               std::forward<Args>(args)...);
 2425|      6|  }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE19EmplaceDecomposableclIS9_JRKS9_EEENSF_4pairINSI_8iteratorEbEERKT_DpOT0_:
 2822|      6|    std::pair<iterator, bool> operator()(const K& key, Args&&... args) const {
 2823|      6|      auto res = s.find_or_prepare_insert(key);
 2824|      6|      if (res.second) {
  ------------------
  |  Branch (2824:11): [True: 6, False: 0]
  ------------------
 2825|      6|        s.emplace_at(res.first, std::forward<Args>(args)...);
 2826|      6|      }
 2827|      6|      return {s.iterator_at(res.first), res.second};
 2828|      6|    }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE22find_or_prepare_insertIS9_EENSF_4pairImbEERKT_:
 3086|      6|  std::pair<size_t, bool> find_or_prepare_insert(const K& key) {
 3087|      6|    prefetch_heap_block();
 3088|      6|    auto hash = hash_ref()(key);
 3089|      6|    auto seq = probe(common(), hash);
 3090|      6|    const ctrl_t* ctrl = control();
 3091|      6|    while (true) {
  ------------------
  |  Branch (3091:12): [True: 6, Folded]
  ------------------
 3092|      6|      Group g{ctrl + seq.offset()};
 3093|      6|      for (uint32_t i : g.Match(H2(hash))) {
  ------------------
  |  Branch (3093:23): [True: 0, False: 6]
  ------------------
 3094|      0|        if (ABSL_PREDICT_TRUE(PolicyTraits::apply(
  ------------------
  |  |  179|      0|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 0, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 0]
  |  |  |  Branch (179:57): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3095|      0|                EqualElement<K>{key, eq_ref()},
 3096|      0|                PolicyTraits::element(slot_array() + seq.offset(i)))))
 3097|      0|          return {seq.offset(i), false};
 3098|      0|      }
 3099|      6|      if (ABSL_PREDICT_TRUE(g.MaskEmpty())) break;
  ------------------
  |  |  179|      6|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 6, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 6]
  |  |  |  Branch (179:57): [True: 6, False: 0]
  |  |  ------------------
  ------------------
 3100|      0|      seq.next();
 3101|      0|      assert(seq.index() <= capacity() && "full table!");
 3102|      0|    }
 3103|      6|    return {prepare_insert(hash), true};
 3104|      6|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE14prepare_insertEm:
 3110|      6|  size_t prepare_insert(size_t hash) ABSL_ATTRIBUTE_NOINLINE {
 3111|      6|    const bool rehash_for_bug_detection =
 3112|      6|        common().should_rehash_for_bug_detection_on_insert();
 3113|      6|    if (rehash_for_bug_detection) {
  ------------------
  |  Branch (3113:9): [True: 0, False: 6]
  ------------------
 3114|       |      // Move to a different heap allocation in order to detect bugs.
 3115|      0|      const size_t cap = capacity();
 3116|      0|      resize(growth_left() > 0 ? cap : NextCapacity(cap));
  ------------------
  |  Branch (3116:14): [True: 0, False: 0]
  ------------------
 3117|      0|    }
 3118|      6|    auto target = find_first_non_full(common(), hash);
 3119|      6|    if (!rehash_for_bug_detection &&
  ------------------
  |  Branch (3119:9): [True: 6, False: 0]
  ------------------
 3120|      6|        ABSL_PREDICT_FALSE(growth_left() == 0 &&
  ------------------
  |  |  178|     11|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 5, False: 1]
  |  |  |  Branch (178:49): [Folded, False: 6]
  |  |  |  Branch (178:59): [True: 5, False: 1]
  |  |  |  Branch (178:59): [True: 5, False: 0]
  |  |  ------------------
  ------------------
 3121|      6|                           !IsDeleted(control()[target.offset]))) {
 3122|      5|      size_t old_capacity = capacity();
 3123|      5|      rehash_and_grow_if_necessary();
 3124|       |      // NOTE: It is safe to use `FindFirstNonFullAfterResize`.
 3125|       |      // `FindFirstNonFullAfterResize` must be called right after resize.
 3126|       |      // `rehash_and_grow_if_necessary` may *not* call `resize`
 3127|       |      // and perform `drop_deletes_without_resize` instead. But this
 3128|       |      // could happen only on big tables.
 3129|       |      // For big tables `FindFirstNonFullAfterResize` will always
 3130|       |      // fallback to normal `find_first_non_full`, so it is safe to use it.
 3131|      5|      target = HashSetResizeHelper::FindFirstNonFullAfterResize(
 3132|      5|          common(), old_capacity, hash);
 3133|      5|    }
 3134|      6|    common().increment_size();
 3135|      6|    set_growth_left(growth_left() - IsEmpty(control()[target.offset]));
 3136|      6|    SetCtrl(common(), target.offset, H2(hash), sizeof(slot_type));
 3137|      6|    common().maybe_increment_generation_on_insert();
 3138|      6|    infoz().RecordInsert(hash, target.probe_length);
 3139|      6|    return target.offset;
 3140|      6|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE6resizeEm:
 2905|      5|  ABSL_ATTRIBUTE_NOINLINE void resize(size_t new_capacity) {
 2906|      5|    assert(IsValidCapacity(new_capacity));
 2907|      5|    HashSetResizeHelper resize_helper(common());
 2908|      5|    auto* old_slots = slot_array();
 2909|      5|    common().set_capacity(new_capacity);
 2910|       |    // Note that `InitializeSlots` does different number initialization steps
 2911|       |    // depending on the values of `transfer_uses_memcpy` and capacities.
 2912|       |    // Refer to the comment in `InitializeSlots` for more details.
 2913|      5|    const bool grow_single_group =
 2914|      5|        resize_helper.InitializeSlots<CharAlloc, sizeof(slot_type),
 2915|      5|                                      PolicyTraits::transfer_uses_memcpy(),
 2916|      5|                                      alignof(slot_type)>(
 2917|      5|            common(), const_cast<std::remove_const_t<slot_type>*>(old_slots),
 2918|      5|            CharAlloc(alloc_ref()));
 2919|       |
 2920|      5|    if (resize_helper.old_capacity() == 0) {
  ------------------
  |  Branch (2920:9): [True: 2, False: 3]
  ------------------
 2921|       |      // InitializeSlots did all the work including infoz().RecordRehash().
 2922|      2|      return;
 2923|      2|    }
 2924|       |
 2925|      3|    if (grow_single_group) {
  ------------------
  |  Branch (2925:9): [True: 3, False: 0]
  ------------------
 2926|      3|      if (PolicyTraits::transfer_uses_memcpy()) {
  ------------------
  |  Branch (2926:11): [True: 3, Folded]
  ------------------
 2927|       |        // InitializeSlots did all the work.
 2928|      3|        return;
 2929|      3|      }
 2930|       |      // We want GrowSizeIntoSingleGroup to be called here in order to make
 2931|       |      // InitializeSlots not depend on PolicyTraits.
 2932|      0|      resize_helper.GrowSizeIntoSingleGroup<PolicyTraits>(common(), alloc_ref(),
 2933|      0|                                                          old_slots);
 2934|      0|    } else {
 2935|       |      // InitializeSlots prepares control bytes to correspond to empty table.
 2936|      0|      auto* new_slots = slot_array();
 2937|      0|      size_t total_probe_length = 0;
 2938|      0|      for (size_t i = 0; i != resize_helper.old_capacity(); ++i) {
  ------------------
  |  Branch (2938:26): [True: 0, False: 0]
  ------------------
 2939|      0|        if (IsFull(resize_helper.old_ctrl()[i])) {
  ------------------
  |  Branch (2939:13): [True: 0, False: 0]
  ------------------
 2940|      0|          size_t hash = PolicyTraits::apply(
 2941|      0|              HashElement{hash_ref()}, PolicyTraits::element(old_slots + i));
 2942|      0|          auto target = find_first_non_full(common(), hash);
 2943|      0|          size_t new_i = target.offset;
 2944|      0|          total_probe_length += target.probe_length;
 2945|      0|          SetCtrl(common(), new_i, H2(hash), sizeof(slot_type));
 2946|      0|          transfer(new_slots + new_i, old_slots + i);
 2947|      0|        }
 2948|      0|      }
 2949|      0|      infoz().RecordRehash(total_probe_length);
 2950|      0|    }
 2951|      0|    resize_helper.DeallocateOld<alignof(slot_type)>(
 2952|      0|        CharAlloc(alloc_ref()), sizeof(slot_type),
 2953|      0|        const_cast<std::remove_const_t<slot_type>*>(old_slots));
 2954|      0|  }
message.cc:_ZNK4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE11growth_leftEv:
 3181|     12|  size_t growth_left() const { return common().growth_left(); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE28rehash_and_grow_if_necessaryEv:
 2970|      5|  void rehash_and_grow_if_necessary() {
 2971|      5|    const size_t cap = capacity();
 2972|      5|    if (cap > Group::kWidth &&
  ------------------
  |  Branch (2972:9): [True: 0, False: 5]
  ------------------
 2973|       |        // Do these calculations in 64-bit to avoid overflow.
 2974|      0|        size() * uint64_t{32} <= cap * uint64_t{25}) {
  ------------------
  |  Branch (2974:9): [True: 0, False: 0]
  ------------------
 2975|       |      // Squash DELETED without growing if there is enough capacity.
 2976|       |      //
 2977|       |      // Rehash in place if the current size is <= 25/32 of capacity.
 2978|       |      // Rationale for such a high factor: 1) drop_deletes_without_resize() is
 2979|       |      // faster than resize, and 2) it takes quite a bit of work to add
 2980|       |      // tombstones.  In the worst case, seems to take approximately 4
 2981|       |      // insert/erase pairs to create a single tombstone and so if we are
 2982|       |      // rehashing because of tombstones, we can afford to rehash-in-place as
 2983|       |      // long as we are reclaiming at least 1/8 the capacity without doing more
 2984|       |      // than 2X the work.  (Where "work" is defined to be size() for rehashing
 2985|       |      // or rehashing in place, and 1 for an insert or erase.)  But rehashing in
 2986|       |      // place is faster per operation than inserting or even doubling the size
 2987|       |      // of the table, so we actually afford to reclaim even less space from a
 2988|       |      // resize-in-place.  The decision is to rehash in place if we can reclaim
 2989|       |      // at about 1/8th of the usable capacity (specifically 3/28 of the
 2990|       |      // capacity) which means that the total cost of rehashing will be a small
 2991|       |      // fraction of the total work.
 2992|       |      //
 2993|       |      // Here is output of an experiment using the BM_CacheInSteadyState
 2994|       |      // benchmark running the old case (where we rehash-in-place only if we can
 2995|       |      // reclaim at least 7/16*capacity) vs. this code (which rehashes in place
 2996|       |      // if we can recover 3/32*capacity).
 2997|       |      //
 2998|       |      // Note that although in the worst-case number of rehashes jumped up from
 2999|       |      // 15 to 190, but the number of operations per second is almost the same.
 3000|       |      //
 3001|       |      // Abridged output of running BM_CacheInSteadyState benchmark from
 3002|       |      // raw_hash_set_benchmark.   N is the number of insert/erase operations.
 3003|       |      //
 3004|       |      //      | OLD (recover >= 7/16        | NEW (recover >= 3/32)
 3005|       |      // size |    N/s LoadFactor NRehashes |    N/s LoadFactor NRehashes
 3006|       |      //  448 | 145284       0.44        18 | 140118       0.44        19
 3007|       |      //  493 | 152546       0.24        11 | 151417       0.48        28
 3008|       |      //  538 | 151439       0.26        11 | 151152       0.53        38
 3009|       |      //  583 | 151765       0.28        11 | 150572       0.57        50
 3010|       |      //  628 | 150241       0.31        11 | 150853       0.61        66
 3011|       |      //  672 | 149602       0.33        12 | 150110       0.66        90
 3012|       |      //  717 | 149998       0.35        12 | 149531       0.70       129
 3013|       |      //  762 | 149836       0.37        13 | 148559       0.74       190
 3014|       |      //  807 | 149736       0.39        14 | 151107       0.39        14
 3015|       |      //  852 | 150204       0.42        15 | 151019       0.42        15
 3016|      0|      drop_deletes_without_resize();
 3017|      5|    } else {
 3018|       |      // Otherwise grow the container.
 3019|      5|      resize(NextCapacity(cap));
 3020|      5|    }
 3021|      5|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE15set_growth_leftEm:
 3182|      6|  void set_growth_left(size_t gl) { return common().set_growth_left(gl); }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE10emplace_atIJRKS9_EEEvmDpOT_:
 3151|      6|  void emplace_at(size_t i, Args&&... args) {
 3152|      6|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|      6|               iterator_at(i) &&
 3156|      6|           "constructed value does not match the lookup key");
 3157|      6|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashSetPolicyIPKN6google8protobuf8internal15DescriptorTableEEENS5_12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashENSC_18DescriptorByNameEqENSt3__19allocatorIS9_EEE9constructIJRKS9_EEEvPS9_DpOT_:
 2851|      6|  inline void construct(slot_type* slot, Args&&... args) {
 2852|      6|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|      6|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE10emplace_atIJRKNSH_21piecewise_construct_tENSH_5tupleIJRSK_EEENSS_IJRPKNS5_7MessageEEEEEEEvmDpOT_:
 3151|     10|  void emplace_at(size_t i, Args&&... args) {
 3152|     10|    construct(slot_array() + i, std::forward<Args>(args)...);
 3153|       |
 3154|       |    assert(PolicyTraits::apply(FindElement{*this}, *iterator_at(i)) ==
 3155|     10|               iterator_at(i) &&
 3156|     10|           "constructed value does not match the lookup key");
 3157|     10|  }
message.cc:_ZN4absl12lts_2024011618container_internal12raw_hash_setINS1_17FlatHashMapPolicyIPKN6google8protobuf10DescriptorENS5_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEENS1_6HashEqIS8_vE4HashENSE_2EqENSt3__19allocatorINSH_4pairIKS8_SB_EEEEE9constructIJRKNSH_21piecewise_construct_tENSH_5tupleIJRSK_EEENSS_IJRPKNS5_7MessageEEEEEEEvPNS1_13map_slot_typeIS8_SB_EEDpOT_:
 2851|     10|  inline void construct(slot_type* slot, Args&&... args) {
 2852|     10|    PolicyTraits::construct(&alloc_ref(), slot, std::forward<Args>(args)...);
 2853|     10|  }

_ZN4absl12lts_202401166HashOfITpTnRiJEJNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEEEEmDpRKT0_:
  267|    921|size_t HashOf(const Types&... values) {
  268|    921|  auto tuple = std::tie(values...);
  269|    921|  return absl::Hash<decltype(tuple)>{}(tuple);
  270|    921|}
_ZN4absl12lts_202401166HashOfITpTnRiJEJNSt3__14pairIPKviEEEEEmDpRKT0_:
  267|    227|size_t HashOf(const Types&... values) {
  268|    227|  auto tuple = std::tie(values...);
  269|    227|  return absl::Hash<decltype(tuple)>{}(tuple);
  270|    227|}
_ZN4absl12lts_202401166HashOfITpTnRiJEJNSt3__14pairIPKvNS3_17basic_string_viewIcNS3_11char_traitsIcEEEEEEEEEmDpRKT0_:
  267|  64.4k|size_t HashOf(const Types&... values) {
  268|  64.4k|  auto tuple = std::tie(values...);
  269|  64.4k|  return absl::Hash<decltype(tuple)>{}(tuple);
  270|  64.4k|}
_ZN4absl12lts_202401166HashOfITpTnRiJEJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEEmDpRKT0_:
  267|      4|size_t HashOf(const Types&... values) {
  268|      4|  auto tuple = std::tie(values...);
  269|      4|  return absl::Hash<decltype(tuple)>{}(tuple);
  270|      4|}
_ZN4absl12lts_202401166HashOfITpTnRiJEJPKN6google8protobuf11MessageLiteEiEEEmDpRKT0_:
  267|      9|size_t HashOf(const Types&... values) {
  268|      9|  auto tuple = std::tie(values...);
  269|      9|  return absl::Hash<decltype(tuple)>{}(tuple);
  270|      9|}

_ZN4absl12lts_2024011613hash_internal15MixingHashState16LowLevelHashImplEPKhm:
   63|  1.44k|                                           size_t len) {
   64|  1.44k|  return LowLevelHash(data, len, Seed(), kHashSalt);
   65|  1.44k|}

_ZN4absl12lts_2024011613hash_internal15MixingHashState18combine_contiguousES2_PKhm:
 1023|   269k|                                            size_t size) {
 1024|   269k|    return MixingHashState(
 1025|   269k|        CombineContiguousImpl(hash_state.state_, first, size,
 1026|   269k|                              std::integral_constant<int, sizeof(size_t)>{}));
 1027|   269k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashStateC2Ev:
 1052|  70.3k|  MixingHashState() : state_(Seed()) {}
_ZN4absl12lts_2024011613hash_internal15MixingHashStateC2Em:
 1085|   269k|  explicit MixingHashState(uint64_t state) : state_(state) {}
_ZN4absl12lts_2024011613hash_internal15MixingHashState9Read9To16EPKhm:
 1114|  3.56k|                                                 size_t len) {
 1115|  3.56k|    uint64_t low_mem = absl::base_internal::UnalignedLoad64(p);
 1116|  3.56k|    uint64_t high_mem = absl::base_internal::UnalignedLoad64(p + len - 8);
 1117|  3.56k|#ifdef ABSL_IS_LITTLE_ENDIAN
 1118|  3.56k|    uint64_t most_significant = high_mem;
 1119|  3.56k|    uint64_t least_significant = low_mem;
 1120|       |#else
 1121|       |    uint64_t most_significant = low_mem;
 1122|       |    uint64_t least_significant = high_mem;
 1123|       |#endif
 1124|  3.56k|    return {least_significant, most_significant};
 1125|  3.56k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState8Read4To8EPKhm:
 1128|   257k|  static uint64_t Read4To8(const unsigned char* p, size_t len) {
 1129|   257k|    uint32_t low_mem = absl::base_internal::UnalignedLoad32(p);
 1130|   257k|    uint32_t high_mem = absl::base_internal::UnalignedLoad32(p + len - 4);
 1131|   257k|#ifdef ABSL_IS_LITTLE_ENDIAN
 1132|   257k|    uint32_t most_significant = high_mem;
 1133|   257k|    uint32_t least_significant = low_mem;
 1134|       |#else
 1135|       |    uint32_t most_significant = low_mem;
 1136|       |    uint32_t least_significant = high_mem;
 1137|       |#endif
 1138|   257k|    return (static_cast<uint64_t>(most_significant) << (len - 4) * 8) |
 1139|   257k|           least_significant;
 1140|   257k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState8Read1To3EPKhm:
 1143|  7.12k|  static uint32_t Read1To3(const unsigned char* p, size_t len) {
 1144|       |    // The trick used by this implementation is to avoid branches if possible.
 1145|  7.12k|    unsigned char mem0 = p[0];
 1146|  7.12k|    unsigned char mem1 = p[len / 2];
 1147|  7.12k|    unsigned char mem2 = p[len - 1];
 1148|  7.12k|#ifdef ABSL_IS_LITTLE_ENDIAN
 1149|  7.12k|    unsigned char significant2 = mem2;
 1150|  7.12k|    unsigned char significant1 = mem1;
 1151|  7.12k|    unsigned char significant0 = mem0;
 1152|       |#else
 1153|       |    unsigned char significant2 = mem0;
 1154|       |    unsigned char significant1 = len == 2 ? mem0 : mem1;
 1155|       |    unsigned char significant0 = mem2;
 1156|       |#endif
 1157|  7.12k|    return static_cast<uint32_t>(significant0 |                     //
 1158|  7.12k|                                 (significant1 << (len / 2 * 8)) |  //
 1159|  7.12k|                                 (significant2 << ((len - 1) * 8)));
 1160|  7.12k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState3MixEmm:
 1162|   266k|  ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Mix(uint64_t state, uint64_t v) {
 1163|       |    // Though the 128-bit product on AArch64 needs two instructions, it is
 1164|       |    // still a good balance between speed and hash quality.
 1165|   266k|    using MultType =
 1166|   266k|        absl::conditional_t<sizeof(size_t) == 4, uint64_t, uint128>;
 1167|       |    // We do the addition in 64-bit space to make sure the 128-bit
 1168|       |    // multiplication is fast. If we were to do it as MultType the compiler has
 1169|       |    // to assume that the high word is non-zero and needs to perform 2
 1170|       |    // multiplications instead of one.
 1171|   266k|    MultType m = state + v;
 1172|   266k|    m *= kMul;
 1173|   266k|    return static_cast<uint64_t>(m ^ (m >> (sizeof(m) * 8 / 2)));
 1174|   266k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState6Hash64EPKhm:
 1181|  1.44k|                                                      size_t len) {
 1182|  1.44k|#ifdef ABSL_HAVE_INTRINSIC_INT128
 1183|  1.44k|    return LowLevelHashImpl(data, len);
 1184|       |#else
 1185|       |    return hash_internal::CityHash64(reinterpret_cast<const char*>(data), len);
 1186|       |#endif
 1187|  1.44k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4SeedEv:
 1205|  71.7k|  ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Seed() {
 1206|  71.7k|#if (!defined(__clang__) || __clang_major__ > 11) && \
 1207|  71.7k|    (!defined(__apple_build_version__) ||            \
 1208|  71.7k|     __apple_build_version__ >= 19558921)  // Xcode 12
 1209|  71.7k|    return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(&kSeed));
 1210|       |#else
 1211|       |    // Workaround the absence of
 1212|       |    // https://github.com/llvm/llvm-project/commit/bc15bf66dcca76cc06fe71fca35b74dc4d521021.
 1213|       |    return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(kSeed));
 1214|       |#endif
 1215|  71.7k|  }
_ZN4absl12lts_2024011613hash_internal18PiecewiseChunkSizeEv:
   82|  1.44k|constexpr size_t PiecewiseChunkSize() { return 1024; }
_ZN4absl12lts_2024011613hash_internal15MixingHashState21CombineContiguousImplEmPKhmNSt3__117integral_constantIiLi8EEE:
 1247|   269k|    std::integral_constant<int, 8> /* sizeof_size_t */) {
 1248|       |  // For large values we use LowLevelHash or CityHash depending on the platform,
 1249|       |  // for small ones we just use a multiplicative hash.
 1250|   269k|  uint64_t v;
 1251|   269k|  if (len > 16) {
  ------------------
  |  Branch (1251:7): [True: 1.44k, False: 268k]
  ------------------
 1252|  1.44k|    if (ABSL_PREDICT_FALSE(len > PiecewiseChunkSize())) {
  ------------------
  |  |  178|  1.44k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 1.44k]
  |  |  |  Branch (178:49): [Folded, False: 1.44k]
  |  |  |  Branch (178:58): [True: 0, False: 1.44k]
  |  |  ------------------
  ------------------
 1253|      0|      return CombineLargeContiguousImpl64(state, first, len);
 1254|      0|    }
 1255|  1.44k|    v = Hash64(first, len);
 1256|   268k|  } else if (len > 8) {
  ------------------
  |  Branch (1256:14): [True: 3.56k, False: 264k]
  ------------------
 1257|       |    // This hash function was constructed by the ML-driven algorithm discovery
 1258|       |    // using reinforcement learning. We fed the agent lots of inputs from
 1259|       |    // microbenchmarks, SMHasher, low hamming distance from generated inputs and
 1260|       |    // picked up the one that was good on micro and macrobenchmarks.
 1261|  3.56k|    auto p = Read9To16(first, len);
 1262|  3.56k|    uint64_t lo = p.first;
 1263|  3.56k|    uint64_t hi = p.second;
 1264|       |    // Rotation by 53 was found to be most often useful when discovering these
 1265|       |    // hashing algorithms with ML techniques.
 1266|  3.56k|    lo = absl::rotr(lo, 53);
 1267|  3.56k|    state += kMul;
 1268|  3.56k|    lo += state;
 1269|  3.56k|    state ^= hi;
 1270|  3.56k|    uint128 m = state;
 1271|  3.56k|    m *= lo;
 1272|  3.56k|    return static_cast<uint64_t>(m ^ (m >> 64));
 1273|   264k|  } else if (len >= 4) {
  ------------------
  |  Branch (1273:14): [True: 257k, False: 7.12k]
  ------------------
 1274|   257k|    v = Read4To8(first, len);
 1275|   257k|  } else if (len > 0) {
  ------------------
  |  Branch (1275:14): [True: 7.12k, False: 0]
  ------------------
 1276|  7.12k|    v = Read1To3(first, len);
 1277|  7.12k|  } else {
 1278|       |    // Empty ranges have no effect.
 1279|      0|    return state;
 1280|      0|  }
 1281|   266k|  return Mix(state, v);
 1282|   269k|}
_ZNK4absl12lts_2024011613hash_internal8HashImplINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEEclERKS7_:
 1299|    617|  size_t operator()(const T& value) const {
 1300|    617|    return MixingHashState::hash(value);
 1301|    617|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashINSt3__117basic_string_viewIcNS4_11char_traitsIcEEEETnNS4_9enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSA_:
 1045|    617|  static size_t hash(const T& value) {
 1046|    617|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|    617|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEJEEES3_S3_RKT_DpRKT0_:
 1310|  66.0k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  66.0k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  66.0k|                        std::move(state), value),
 1313|  66.0k|                    values...);
 1314|  66.0k|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESC_E4typeESC_RKT0_:
  937|  66.0k|        H> {
  938|  66.0k|      return AbslHashValue(std::move(state), value);
  939|  66.0k|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEEET_S4_NSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
  557|  66.0k|H AbslHashValue(H hash_state, absl::string_view str) {
  558|  66.0k|  return H::combine(
  559|  66.0k|      H::combine_contiguous(std::move(hash_state), str.data(), str.size()),
  560|  66.0k|      str.size());
  561|  66.0k|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE18combine_contiguousIcEES3_S3_PKT_m:
 1319|  66.0k|H HashStateBase<H>::combine_contiguous(H state, const T* data, size_t size) {
 1320|  66.0k|  return hash_internal::hash_range_or_bytes(std::move(state), data, size);
 1321|  66.0k|}
_ZN4absl12lts_2024011613hash_internal19hash_range_or_bytesINS1_15MixingHashStateEcEENSt3__19enable_ifIXsr23is_uniquely_representedIT0_EE5valueET_E4typeES7_PKS6_m:
  885|  66.0k|hash_range_or_bytes(H hash_state, const T* data, size_t size) {
  886|  66.0k|  const auto* bytes = reinterpret_cast<const unsigned char*>(data);
  887|  66.0k|  return H::combine_contiguous(std::move(hash_state), bytes, sizeof(T) * size);
  888|  66.0k|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineImJEEES3_S3_RKT_DpRKT0_:
 1310|   134k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|   134k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|   134k|                        std::move(state), value),
 1313|   134k|                    values...);
 1314|   134k|}
_ZN4absl12lts_2024011613hash_internal10HashSelect24UniquelyRepresentedProbe6InvokeINS1_15MixingHashStateEmEENSt3__19enable_ifIXsr23is_uniquely_representedIT0_EE5valueET_E4typeES9_RKS8_:
  927|   203k|        -> absl::enable_if_t<is_uniquely_represented<T>::value, H> {
  928|   203k|      return hash_internal::hash_bytes(std::move(state), value);
  929|   203k|    }
_ZN4absl12lts_2024011613hash_internal10hash_bytesINS1_15MixingHashStateEmEET_S4_RKT0_:
  340|   203k|H hash_bytes(H hash_state, const T& value) {
  341|   203k|  const unsigned char* start = reinterpret_cast<const unsigned char*>(&value);
  342|   203k|  return H::combine_contiguous(std::move(hash_state), start, sizeof(value));
  343|   203k|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineES3_:
  234|   335k|  static H combine(H state) { return state; }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineImJmEEES3_S3_RKT_DpRKT0_:
 1310|  68.7k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  68.7k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  68.7k|                        std::move(state), value),
 1313|  68.7k|                    values...);
 1314|  68.7k|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateEPKvEENSt3__19enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESA_E4typeESA_RKT0_:
  937|  64.6k|        H> {
  938|  64.6k|      return AbslHashValue(std::move(state), value);
  939|  64.6k|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEPKvEENSt3__19enable_ifIXsr3std10is_pointerIT0_EE5valueET_E4typeES9_S8_:
  438|  64.6k|                                                             T ptr) {
  439|  64.6k|  auto v = reinterpret_cast<uintptr_t>(ptr);
  440|       |  // Due to alignment, pointers tend to have low bits as zero, and the next few
  441|       |  // bits follow a pattern since they are also multiples of some base value.
  442|       |  // Mixing the pointer twice helps prevent stuck low bits for certain alignment
  443|       |  // values.
  444|  64.6k|  return H::combine(std::move(hash_state), v, v);
  445|  64.6k|}
_ZNK4absl12lts_2024011613hash_internal8HashImplIPKN6google8protobuf14FileDescriptorEEclERKS7_:
 1299|     98|  size_t operator()(const T& value) const {
 1300|     98|    return MixingHashState::hash(value);
 1301|     98|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashIPKN6google8protobuf14FileDescriptorETnNSt3__19enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSB_:
 1045|     98|  static size_t hash(const T& value) {
 1046|     98|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|     98|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineIPKN6google8protobuf14FileDescriptorEJEEES3_S3_RKT_DpRKT0_:
 1310|     98|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|     98|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|     98|                        std::move(state), value),
 1313|     98|                    values...);
 1314|     98|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateEPKN6google8protobuf14FileDescriptorEEENSt3__19enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESD_E4typeESD_RKT0_:
  937|     98|        H> {
  938|     98|      return AbslHashValue(std::move(state), value);
  939|     98|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEPKN6google8protobuf14FileDescriptorEEENSt3__19enable_ifIXsr3std10is_pointerIT0_EE5valueET_E4typeESC_SB_:
  438|     98|                                                             T ptr) {
  439|     98|  auto v = reinterpret_cast<uintptr_t>(ptr);
  440|       |  // Due to alignment, pointers tend to have low bits as zero, and the next few
  441|       |  // bits follow a pattern since they are also multiples of some base value.
  442|       |  // Mixing the pointer twice helps prevent stuck low bits for certain alignment
  443|       |  // values.
  444|     98|  return H::combine(std::move(hash_state), v, v);
  445|     98|}
_ZNK4absl12lts_2024011613hash_internal8HashImplINSt3__15tupleIJRKNS3_17basic_string_viewIcNS3_11char_traitsIcEEEEEEEEclERKSB_:
 1299|    921|  size_t operator()(const T& value) const {
 1300|    921|    return MixingHashState::hash(value);
 1301|    921|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashINSt3__15tupleIJRKNS4_17basic_string_viewIcNS4_11char_traitsIcEEEEEEETnNS4_9enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSE_:
 1045|    921|  static size_t hash(const T& value) {
 1046|    921|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|    921|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__15tupleIJRKNS6_17basic_string_viewIcNS6_11char_traitsIcEEEEEEEJEEES3_S3_RKT_DpRKT0_:
 1310|    921|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|    921|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|    921|                        std::move(state), value),
 1313|    921|                    values...);
 1314|    921|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__15tupleIJRKNS6_17basic_string_viewIcNS6_11char_traitsIcEEEEEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESG_E4typeESG_RKT0_:
  937|    921|        H> {
  938|    921|      return AbslHashValue(std::move(state), value);
  939|    921|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEJRKNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEENS4_9enable_ifIXsr4absl11conjunctionIDpNS1_11is_hashableIT0_EEEE5valueET_E4typeESG_RKNS4_5tupleIJDpSD_EEE:
  516|    921|AbslHashValue(H hash_state, const std::tuple<Ts...>& t) {
  517|    921|  return hash_internal::hash_tuple(std::move(hash_state), t,
  518|    921|                                   absl::make_index_sequence<sizeof...(Ts)>());
  519|    921|}
_ZN4absl12lts_2024011613hash_internal10hash_tupleINS1_15MixingHashStateENSt3__15tupleIJRKNS4_17basic_string_viewIcNS4_11char_traitsIcEEEEEEEJLm0EEEET_SD_RKT0_NS4_16integer_sequenceImJXspT1_EEEE:
  503|    921|H hash_tuple(H hash_state, const Tuple& t, absl::index_sequence<Is...>) {
  504|    921|  return H::combine(std::move(hash_state), std::get<Is>(t)...);
  505|    921|}
_ZNK4absl12lts_2024011613hash_internal8HashImplINSt3__15tupleIJRKNS3_4pairIPKviEEEEEEclERKSB_:
 1299|    227|  size_t operator()(const T& value) const {
 1300|    227|    return MixingHashState::hash(value);
 1301|    227|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashINSt3__15tupleIJRKNS4_4pairIPKviEEEEETnNS4_9enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSE_:
 1045|    227|  static size_t hash(const T& value) {
 1046|    227|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|    227|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__15tupleIJRKNS6_4pairIPKviEEEEEJEEES3_S3_RKT_DpRKT0_:
 1310|    227|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|    227|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|    227|                        std::move(state), value),
 1313|    227|                    values...);
 1314|    227|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__15tupleIJRKNS6_4pairIPKviEEEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESG_E4typeESG_RKT0_:
  937|    227|        H> {
  938|    227|      return AbslHashValue(std::move(state), value);
  939|    227|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEJRKNSt3__14pairIPKviEEEEENS4_9enable_ifIXsr4absl11conjunctionIDpNS1_11is_hashableIT0_EEEE5valueET_E4typeESG_RKNS4_5tupleIJDpSD_EEE:
  516|    227|AbslHashValue(H hash_state, const std::tuple<Ts...>& t) {
  517|    227|  return hash_internal::hash_tuple(std::move(hash_state), t,
  518|    227|                                   absl::make_index_sequence<sizeof...(Ts)>());
  519|    227|}
_ZN4absl12lts_2024011613hash_internal10hash_tupleINS1_15MixingHashStateENSt3__15tupleIJRKNS4_4pairIPKviEEEEEJLm0EEEET_SD_RKT0_NS4_16integer_sequenceImJXspT1_EEEE:
  503|    227|H hash_tuple(H hash_state, const Tuple& t, absl::index_sequence<Is...>) {
  504|    227|  return H::combine(std::move(hash_state), std::get<Is>(t)...);
  505|    227|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__14pairIPKviEEJEEES3_S3_RKT_DpRKT0_:
 1310|    227|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|    227|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|    227|                        std::move(state), value),
 1313|    227|                    values...);
 1314|    227|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__14pairIPKviEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESC_E4typeESC_RKT0_:
  937|    227|        H> {
  938|    227|      return AbslHashValue(std::move(state), value);
  939|    227|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEPKviEENSt3__19enable_ifIXaasr11is_hashableIT0_EE5valuesr11is_hashableIT1_EE5valueET_E4typeESA_RKNS6_4pairIS8_S9_EE:
  494|    227|AbslHashValue(H hash_state, const std::pair<T1, T2>& p) {
  495|    227|  return H::combine(std::move(hash_state), p.first, p.second);
  496|    227|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineIPKvJiEEES3_S3_RKT_DpRKT0_:
 1310|    227|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|    227|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|    227|                        std::move(state), value),
 1313|    227|                    values...);
 1314|    227|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineIiJEEES3_S3_RKT_DpRKT0_:
 1310|    236|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|    236|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|    236|                        std::move(state), value),
 1313|    236|                    values...);
 1314|    236|}
_ZN4absl12lts_2024011613hash_internal10HashSelect24UniquelyRepresentedProbe6InvokeINS1_15MixingHashStateEiEENSt3__19enable_ifIXsr23is_uniquely_representedIT0_EE5valueET_E4typeES9_RKS8_:
  927|    236|        -> absl::enable_if_t<is_uniquely_represented<T>::value, H> {
  928|    236|      return hash_internal::hash_bytes(std::move(state), value);
  929|    236|    }
_ZN4absl12lts_2024011613hash_internal10hash_bytesINS1_15MixingHashStateEiEET_S4_RKT0_:
  340|    236|H hash_bytes(H hash_state, const T& value) {
  341|    236|  const unsigned char* start = reinterpret_cast<const unsigned char*>(&value);
  342|    236|  return H::combine_contiguous(std::move(hash_state), start, sizeof(value));
  343|    236|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__14pairIPKvNS6_17basic_string_viewIcNS6_11char_traitsIcEEEEEEJEEES3_S3_RKT_DpRKT0_:
 1310|  64.4k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  64.4k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  64.4k|                        std::move(state), value),
 1313|  64.4k|                    values...);
 1314|  64.4k|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__14pairIPKvNS6_17basic_string_viewIcNS6_11char_traitsIcEEEEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESG_E4typeESG_RKT0_:
  937|  64.4k|        H> {
  938|  64.4k|      return AbslHashValue(std::move(state), value);
  939|  64.4k|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEPKvNSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEEENS6_9enable_ifIXaasr11is_hashableIT0_EE5valuesr11is_hashableIT1_EE5valueET_E4typeESE_RKNS6_4pairISC_SD_EE:
  494|  64.4k|AbslHashValue(H hash_state, const std::pair<T1, T2>& p) {
  495|  64.4k|  return H::combine(std::move(hash_state), p.first, p.second);
  496|  64.4k|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineIPKvJNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEEEEES3_S3_RKT_DpRKT0_:
 1310|  64.4k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  64.4k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  64.4k|                        std::move(state), value),
 1313|  64.4k|                    values...);
 1314|  64.4k|}
_ZNK4absl12lts_2024011613hash_internal8HashImplINSt3__15tupleIJRKNS3_4pairIPKvNS3_17basic_string_viewIcNS3_11char_traitsIcEEEEEEEEEEclERKSF_:
 1299|  64.4k|  size_t operator()(const T& value) const {
 1300|  64.4k|    return MixingHashState::hash(value);
 1301|  64.4k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashINSt3__15tupleIJRKNS4_4pairIPKvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEEEEEEETnNS4_9enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSI_:
 1045|  64.4k|  static size_t hash(const T& value) {
 1046|  64.4k|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|  64.4k|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__15tupleIJRKNS6_4pairIPKvNS6_17basic_string_viewIcNS6_11char_traitsIcEEEEEEEEEJEEES3_S3_RKT_DpRKT0_:
 1310|  64.4k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  64.4k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  64.4k|                        std::move(state), value),
 1313|  64.4k|                    values...);
 1314|  64.4k|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__15tupleIJRKNS6_4pairIPKvNS6_17basic_string_viewIcNS6_11char_traitsIcEEEEEEEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESK_E4typeESK_RKT0_:
  937|  64.4k|        H> {
  938|  64.4k|      return AbslHashValue(std::move(state), value);
  939|  64.4k|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEJRKNSt3__14pairIPKvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEEEEEEENS4_9enable_ifIXsr4absl11conjunctionIDpNS1_11is_hashableIT0_EEEE5valueET_E4typeESK_RKNS4_5tupleIJDpSH_EEE:
  516|  64.4k|AbslHashValue(H hash_state, const std::tuple<Ts...>& t) {
  517|  64.4k|  return hash_internal::hash_tuple(std::move(hash_state), t,
  518|  64.4k|                                   absl::make_index_sequence<sizeof...(Ts)>());
  519|  64.4k|}
_ZN4absl12lts_2024011613hash_internal10hash_tupleINS1_15MixingHashStateENSt3__15tupleIJRKNS4_4pairIPKvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEEEEEEEJLm0EEEET_SH_RKT0_NS4_16integer_sequenceImJXspT1_EEEE:
  503|  64.4k|H hash_tuple(H hash_state, const Tuple& t, absl::index_sequence<Is...>) {
  504|  64.4k|  return H::combine(std::move(hash_state), std::get<Is>(t)...);
  505|  64.4k|}
_ZNK4absl12lts_2024011613hash_internal8HashImplINSt3__15tupleIJRKNS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEEEclERKSD_:
 1299|      4|  size_t operator()(const T& value) const {
 1300|      4|    return MixingHashState::hash(value);
 1301|      4|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashINSt3__15tupleIJRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEETnNS4_9enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSG_:
 1045|      4|  static size_t hash(const T& value) {
 1046|      4|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|      4|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__15tupleIJRKNS6_12basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEEEJEEES3_S3_RKT_DpRKT0_:
 1310|      4|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|      4|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|      4|                        std::move(state), value),
 1313|      4|                    values...);
 1314|      4|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__15tupleIJRKNS6_12basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESI_E4typeESI_RKT0_:
  937|      4|        H> {
  938|      4|      return AbslHashValue(std::move(state), value);
  939|      4|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEJRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEENS4_9enable_ifIXsr4absl11conjunctionIDpNS1_11is_hashableIT0_EEEE5valueET_E4typeESI_RKNS4_5tupleIJDpSF_EEE:
  516|      4|AbslHashValue(H hash_state, const std::tuple<Ts...>& t) {
  517|      4|  return hash_internal::hash_tuple(std::move(hash_state), t,
  518|      4|                                   absl::make_index_sequence<sizeof...(Ts)>());
  519|      4|}
_ZN4absl12lts_2024011613hash_internal10hash_tupleINS1_15MixingHashStateENSt3__15tupleIJRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEJLm0EEEET_SF_RKT0_NS4_16integer_sequenceImJXspT1_EEEE:
  503|      4|H hash_tuple(H hash_state, const Tuple& t, absl::index_sequence<Is...>) {
  504|      4|  return H::combine(std::move(hash_state), std::get<Is>(t)...);
  505|      4|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEJEEES3_S3_RKT_DpRKT0_:
 1310|      4|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|      4|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|      4|                        std::move(state), value),
 1313|      4|                    values...);
 1314|      4|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESE_E4typeESE_RKT0_:
  937|      4|        H> {
  938|      4|      return AbslHashValue(std::move(state), value);
  939|      4|    }
_ZNK4absl12lts_2024011613hash_internal8HashImplIPKN6google8protobuf10DescriptorEEclERKS7_:
 1299|  4.00k|  size_t operator()(const T& value) const {
 1300|  4.00k|    return MixingHashState::hash(value);
 1301|  4.00k|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashIPKN6google8protobuf10DescriptorETnNSt3__19enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSB_:
 1045|  4.00k|  static size_t hash(const T& value) {
 1046|  4.00k|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|  4.00k|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineIPKN6google8protobuf10DescriptorEJEEES3_S3_RKT_DpRKT0_:
 1310|  4.00k|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|  4.00k|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|  4.00k|                        std::move(state), value),
 1313|  4.00k|                    values...);
 1314|  4.00k|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateEPKN6google8protobuf10DescriptorEEENSt3__19enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESD_E4typeESD_RKT0_:
  937|  4.00k|        H> {
  938|  4.00k|      return AbslHashValue(std::move(state), value);
  939|  4.00k|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEPKN6google8protobuf10DescriptorEEENSt3__19enable_ifIXsr3std10is_pointerIT0_EE5valueET_E4typeESC_SB_:
  438|  4.00k|                                                             T ptr) {
  439|  4.00k|  auto v = reinterpret_cast<uintptr_t>(ptr);
  440|       |  // Due to alignment, pointers tend to have low bits as zero, and the next few
  441|       |  // bits follow a pattern since they are also multiples of some base value.
  442|       |  // Mixing the pointer twice helps prevent stuck low bits for certain alignment
  443|       |  // values.
  444|  4.00k|  return H::combine(std::move(hash_state), v, v);
  445|  4.00k|}
_ZNK4absl12lts_2024011613hash_internal8HashImplINSt3__15tupleIJRKPKN6google8protobuf11MessageLiteERKiEEEEclERKSE_:
 1299|      9|  size_t operator()(const T& value) const {
 1300|      9|    return MixingHashState::hash(value);
 1301|      9|  }
_ZN4absl12lts_2024011613hash_internal15MixingHashState4hashINSt3__15tupleIJRKPKN6google8protobuf11MessageLiteERKiEEETnNS4_9enable_ifIXntsr16IntegralFastPathIT_EE5valueEiE4typeELi0EEEmRKSH_:
 1045|      9|  static size_t hash(const T& value) {
 1046|      9|    return static_cast<size_t>(combine(MixingHashState{}, value).state_);
 1047|      9|  }
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineINSt3__15tupleIJRKPKN6google8protobuf11MessageLiteERKiEEEJEEES3_S3_RKT_DpRKT0_:
 1310|      9|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|      9|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|      9|                        std::move(state), value),
 1313|      9|                    values...);
 1314|      9|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateENSt3__15tupleIJRKPKN6google8protobuf11MessageLiteERKiEEEEENS6_9enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESJ_E4typeESJ_RKT0_:
  937|      9|        H> {
  938|      9|      return AbslHashValue(std::move(state), value);
  939|      9|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEJRKPKN6google8protobuf11MessageLiteERKiEEENSt3__19enable_ifIXsr4absl11conjunctionIDpNS1_11is_hashableIT0_EEEE5valueET_E4typeESJ_RKNSD_5tupleIJDpSG_EEE:
  516|      9|AbslHashValue(H hash_state, const std::tuple<Ts...>& t) {
  517|      9|  return hash_internal::hash_tuple(std::move(hash_state), t,
  518|      9|                                   absl::make_index_sequence<sizeof...(Ts)>());
  519|      9|}
_ZN4absl12lts_2024011613hash_internal10hash_tupleINS1_15MixingHashStateENSt3__15tupleIJRKPKN6google8protobuf11MessageLiteERKiEEEJLm0ELm1EEEET_SG_RKT0_NS4_16integer_sequenceImJXspT1_EEEE:
  503|      9|H hash_tuple(H hash_state, const Tuple& t, absl::index_sequence<Is...>) {
  504|      9|  return H::combine(std::move(hash_state), std::get<Is>(t)...);
  505|      9|}
_ZN4absl12lts_2024011613hash_internal13HashStateBaseINS1_15MixingHashStateEE7combineIPKN6google8protobuf11MessageLiteEJiEEES3_S3_RKT_DpRKT0_:
 1310|      9|H HashStateBase<H>::combine(H state, const T& value, const Ts&... values) {
 1311|      9|  return H::combine(hash_internal::HashSelect::template Apply<T>::Invoke(
 1312|      9|                        std::move(state), value),
 1313|      9|                    values...);
 1314|      9|}
_ZN4absl12lts_2024011613hash_internal10HashSelect14HashValueProbe6InvokeINS1_15MixingHashStateEPKN6google8protobuf11MessageLiteEEENSt3__19enable_ifIXsr3std7is_sameIT_DTcl13AbslHashValueclsr3stdE4movefp_Efp0_EEEE5valueESD_E4typeESD_RKT0_:
  937|      9|        H> {
  938|      9|      return AbslHashValue(std::move(state), value);
  939|      9|    }
_ZN4absl12lts_2024011613hash_internal13AbslHashValueINS1_15MixingHashStateEPKN6google8protobuf11MessageLiteEEENSt3__19enable_ifIXsr3std10is_pointerIT0_EE5valueET_E4typeESC_SB_:
  438|      9|                                                             T ptr) {
  439|      9|  auto v = reinterpret_cast<uintptr_t>(ptr);
  440|       |  // Due to alignment, pointers tend to have low bits as zero, and the next few
  441|       |  // bits follow a pattern since they are also multiples of some base value.
  442|       |  // Mixing the pointer twice helps prevent stuck low bits for certain alignment
  443|       |  // values.
  444|      9|  return H::combine(std::move(hash_state), v, v);
  445|      9|}

_ZN4absl12lts_2024011613hash_internal12LowLevelHashEPKvmmPKm:
   32|  1.44k|                      const uint64_t salt[5]) {
   33|       |  // Prefetch the cacheline that data resides in.
   34|  1.44k|  PrefetchToLocalCache(data);
   35|  1.44k|  const uint8_t* ptr = static_cast<const uint8_t*>(data);
   36|  1.44k|  uint64_t starting_length = static_cast<uint64_t>(len);
   37|  1.44k|  uint64_t current_state = seed ^ salt[0];
   38|       |
   39|  1.44k|  if (len > 64) {
  ------------------
  |  Branch (39:7): [True: 8, False: 1.43k]
  ------------------
   40|       |    // If we have more than 64 bytes, we're going to handle chunks of 64
   41|       |    // bytes at a time. We're going to build up two separate hash states
   42|       |    // which we will then hash together.
   43|      8|    uint64_t duplicated_state = current_state;
   44|       |
   45|      8|    do {
   46|       |      // Always prefetch the next cacheline.
   47|      8|      PrefetchToLocalCache(ptr + ABSL_CACHELINE_SIZE);
  ------------------
  |  |   77|      8|#define ABSL_CACHELINE_SIZE 64
  ------------------
   48|       |
   49|      8|      uint64_t a = absl::base_internal::UnalignedLoad64(ptr);
   50|      8|      uint64_t b = absl::base_internal::UnalignedLoad64(ptr + 8);
   51|      8|      uint64_t c = absl::base_internal::UnalignedLoad64(ptr + 16);
   52|      8|      uint64_t d = absl::base_internal::UnalignedLoad64(ptr + 24);
   53|      8|      uint64_t e = absl::base_internal::UnalignedLoad64(ptr + 32);
   54|      8|      uint64_t f = absl::base_internal::UnalignedLoad64(ptr + 40);
   55|      8|      uint64_t g = absl::base_internal::UnalignedLoad64(ptr + 48);
   56|      8|      uint64_t h = absl::base_internal::UnalignedLoad64(ptr + 56);
   57|       |
   58|      8|      uint64_t cs0 = Mix(a ^ salt[1], b ^ current_state);
   59|      8|      uint64_t cs1 = Mix(c ^ salt[2], d ^ current_state);
   60|      8|      current_state = (cs0 ^ cs1);
   61|       |
   62|      8|      uint64_t ds0 = Mix(e ^ salt[3], f ^ duplicated_state);
   63|      8|      uint64_t ds1 = Mix(g ^ salt[4], h ^ duplicated_state);
   64|      8|      duplicated_state = (ds0 ^ ds1);
   65|       |
   66|      8|      ptr += 64;
   67|      8|      len -= 64;
   68|      8|    } while (len > 64);
  ------------------
  |  Branch (68:14): [True: 0, False: 8]
  ------------------
   69|       |
   70|      8|    current_state = current_state ^ duplicated_state;
   71|      8|  }
   72|       |
   73|       |  // We now have a data `ptr` with at most 64 bytes and the current state
   74|       |  // of the hashing state machine stored in current_state.
   75|  3.88k|  while (len > 16) {
  ------------------
  |  Branch (75:10): [True: 2.44k, False: 1.44k]
  ------------------
   76|  2.44k|    uint64_t a = absl::base_internal::UnalignedLoad64(ptr);
   77|  2.44k|    uint64_t b = absl::base_internal::UnalignedLoad64(ptr + 8);
   78|       |
   79|  2.44k|    current_state = Mix(a ^ salt[1], b ^ current_state);
   80|       |
   81|  2.44k|    ptr += 16;
   82|  2.44k|    len -= 16;
   83|  2.44k|  }
   84|       |
   85|       |  // We now have a data `ptr` with at most 16 bytes.
   86|  1.44k|  uint64_t a = 0;
   87|  1.44k|  uint64_t b = 0;
   88|  1.44k|  if (len > 8) {
  ------------------
  |  Branch (88:7): [True: 574, False: 869]
  ------------------
   89|       |    // When we have at least 9 and at most 16 bytes, set A to the first 64
   90|       |    // bits of the input and B to the last 64 bits of the input. Yes, they will
   91|       |    // overlap in the middle if we are working with less than the full 16
   92|       |    // bytes.
   93|    574|    a = absl::base_internal::UnalignedLoad64(ptr);
   94|    574|    b = absl::base_internal::UnalignedLoad64(ptr + len - 8);
   95|    869|  } else if (len > 3) {
  ------------------
  |  Branch (95:14): [True: 544, False: 325]
  ------------------
   96|       |    // If we have at least 4 and at most 8 bytes, set A to the first 32
   97|       |    // bits and B to the last 32 bits.
   98|    544|    a = absl::base_internal::UnalignedLoad32(ptr);
   99|    544|    b = absl::base_internal::UnalignedLoad32(ptr + len - 4);
  100|    544|  } else if (len > 0) {
  ------------------
  |  Branch (100:14): [True: 325, False: 0]
  ------------------
  101|       |    // If we have at least 1 and at most 3 bytes, read all of the provided
  102|       |    // bits into A, with some adjustments.
  103|    325|    a = static_cast<uint64_t>((ptr[0] << 16) | (ptr[len >> 1] << 8) |
  104|    325|                              ptr[len - 1]);
  105|    325|    b = 0;
  106|    325|  } else {
  107|      0|    a = 0;
  108|      0|    b = 0;
  109|      0|  }
  110|       |
  111|  1.44k|  uint64_t w = Mix(a ^ salt[1], b ^ current_state);
  112|  1.44k|  uint64_t z = salt[1] ^ starting_length;
  113|  1.44k|  return Mix(w, z);
  114|  1.44k|}
low_level_hash.cc:_ZN4absl12lts_2024011613hash_internalL3MixEmm:
   25|  5.36k|static uint64_t Mix(uint64_t v0, uint64_t v1) {
   26|  5.36k|  absl::uint128 p = v0;
   27|  5.36k|  p *= v1;
   28|  5.36k|  return absl::Uint128Low64(p) ^ absl::Uint128High64(p);
   29|  5.36k|}

_ZN4absl12lts_2024011611MinLogLevelEv:
   87|     24|absl::LogSeverityAtLeast MinLogLevel() {
   88|     24|  return static_cast<absl::LogSeverityAtLeast>(
   89|     24|      min_log_level.load(std::memory_order_acquire));
   90|     24|}
_ZN4absl12lts_2024011615StderrThresholdEv:
  109|     24|absl::LogSeverityAtLeast StderrThreshold() {
  110|     24|  return static_cast<absl::LogSeverityAtLeast>(
  111|     24|      stderrthreshold.load(std::memory_order_acquire));
  112|     24|}
_ZN4absl12lts_2024011622ShouldPrependLogPrefixEv:
  168|     24|bool ShouldPrependLogPrefix() {
  169|     24|  return prepend_log_prefix.load(std::memory_order_acquire);
  170|     24|}

_ZN4absl12lts_2024011612log_internal15AppendTruncatedENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEERNS0_4SpanIcEE:
   30|    228|inline size_t AppendTruncated(absl::string_view src, absl::Span<char> &dst) {
   31|    228|  if (src.size() > dst.size()) src = src.substr(0, dst.size());
  ------------------
  |  Branch (31:7): [True: 0, False: 228]
  ------------------
   32|    228|  memcpy(dst.data(), src.data(), src.size());
   33|    228|  dst.remove_prefix(src.size());
   34|    228|  return src.size();
   35|    228|}

_ZN4absl12lts_2024011612log_internal12Check_EQImplIiiEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|     56|                                             const char* exprtext) {     \
  349|     56|    using U1 = CheckOpStreamType<T1>;                                    \
  350|     56|    using U2 = CheckOpStreamType<T2>;                                    \
  351|     56|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|     56|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 56, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 56]
  |  |  |  Branch (179:57): [True: 56, False: 0]
  |  |  ------------------
  ------------------
  352|     56|               ? nullptr                                                 \
  353|     56|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|     56|                                                        exprtext);       \
  355|     56|  }                                                                      \
_ZN4absl12lts_2024011612log_internal12Check_LEImplIiiEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|    845|                                             const char* exprtext) {     \
  349|    845|    using U1 = CheckOpStreamType<T1>;                                    \
  350|    845|    using U2 = CheckOpStreamType<T2>;                                    \
  351|    845|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|    845|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 845, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 845]
  |  |  |  Branch (179:57): [True: 845, False: 0]
  |  |  ------------------
  ------------------
  352|    845|               ? nullptr                                                 \
  353|    845|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|    845|                                                        exprtext);       \
  355|    845|  }                                                                      \
_ZN4absl12lts_2024011612log_internal12Check_GEImplIiiEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|      9|                                             const char* exprtext) {     \
  349|      9|    using U1 = CheckOpStreamType<T1>;                                    \
  350|      9|    using U2 = CheckOpStreamType<T2>;                                    \
  351|      9|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|      9|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 9, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 9]
  |  |  |  Branch (179:57): [True: 9, False: 0]
  |  |  ------------------
  ------------------
  352|      9|               ? nullptr                                                 \
  353|      9|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|      9|                                                        exprtext);       \
  355|      9|  }                                                                      \
_ZN4absl12lts_2024011612log_internal12Check_GTImplIiiEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|      9|                                             const char* exprtext) {     \
  349|      9|    using U1 = CheckOpStreamType<T1>;                                    \
  350|      9|    using U2 = CheckOpStreamType<T2>;                                    \
  351|      9|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|      9|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 9, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 9]
  |  |  |  Branch (179:57): [True: 9, False: 0]
  |  |  ------------------
  ------------------
  352|      9|               ? nullptr                                                 \
  353|      9|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|      9|                                                        exprtext);       \
  355|      9|  }                                                                      \
_ZN4absl12lts_2024011612log_internal12Check_EQImplEiiPKc:
  357|     56|                                             const char* exprtext) {     \
  358|     56|    return name##Impl<int, int>(v1, v2, exprtext);                       \
  359|     56|  }
_ZN4absl12lts_2024011612log_internal12Check_LEImplEiiPKc:
  357|    845|                                             const char* exprtext) {     \
  358|    845|    return name##Impl<int, int>(v1, v2, exprtext);                       \
  359|    845|  }
_ZN4absl12lts_2024011612log_internal12Check_GEImplEiiPKc:
  357|      9|                                             const char* exprtext) {     \
  358|      9|    return name##Impl<int, int>(v1, v2, exprtext);                       \
  359|      9|  }
_ZN4absl12lts_2024011612log_internal12Check_GTImplEiiPKc:
  357|      9|                                             const char* exprtext) {     \
  358|      9|    return name##Impl<int, int>(v1, v2, exprtext);                       \
  359|      9|  }
_ZN4absl12lts_2024011612log_internal21GetReferenceableValueEi:
  399|  1.83k|inline constexpr int GetReferenceableValue(int t) { return t; }
_ZN4absl12lts_2024011612log_internal21GetReferenceableValueEm:
  405|  1.18k|    unsigned long t) {                                             // NOLINT
  406|  1.18k|  return t;
  407|  1.18k|}
_ZN4absl12lts_2024011612log_internal12Check_LEImplImmEEPNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKT_RKT0_PKc:
  348|    590|                                             const char* exprtext) {     \
  349|    590|    using U1 = CheckOpStreamType<T1>;                                    \
  350|    590|    using U2 = CheckOpStreamType<T2>;                                    \
  351|    590|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|    590|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 590, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 590]
  |  |  |  Branch (179:57): [True: 590, False: 0]
  |  |  ------------------
  ------------------
  352|    590|               ? nullptr                                                 \
  353|    590|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|    590|                                                        exprtext);       \
  355|    590|  }                                                                      \
_ZN4absl12lts_2024011612log_internal12Check_EQImplIPKN6google8protobuf15FieldDescriptorES7_EEPNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEERKT_RKT0_PKc:
  348|      7|                                             const char* exprtext) {     \
  349|      7|    using U1 = CheckOpStreamType<T1>;                                    \
  350|      7|    using U2 = CheckOpStreamType<T2>;                                    \
  351|      7|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|      7|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 7, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 7]
  |  |  |  Branch (179:57): [True: 7, False: 0]
  |  |  ------------------
  ------------------
  352|      7|               ? nullptr                                                 \
  353|      7|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|      7|                                                        exprtext);       \
  355|      7|  }                                                                      \
_ZN4absl12lts_2024011612log_internal21GetReferenceableValueIPKN6google8protobuf15FieldDescriptorEEERKT_SA_:
  386|     14|inline constexpr const T& GetReferenceableValue(const T& t) {
  387|     14|  return t;
  388|     14|}
_ZN4absl12lts_2024011612log_internal12Check_EQImplIPKN6google8protobuf8internal9ClassDataES8_EEPNSt3__112basic_stringIcNS9_11char_traitsIcEENS9_9allocatorIcEEEERKT_RKT0_PKc:
  348|    662|                                             const char* exprtext) {     \
  349|    662|    using U1 = CheckOpStreamType<T1>;                                    \
  350|    662|    using U2 = CheckOpStreamType<T2>;                                    \
  351|    662|    return ABSL_PREDICT_TRUE(v1 op v2)                                   \
  ------------------
  |  |  179|    662|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 662, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 662]
  |  |  |  Branch (179:57): [True: 662, False: 0]
  |  |  ------------------
  ------------------
  352|    662|               ? nullptr                                                 \
  353|    662|               : ABSL_LOG_INTERNAL_CHECK_OP_IMPL_RESULT(U1, U2, v1, v2,  \
  ------------------
  |  |  338|      0|  MakeCheckOpString<U1, U2>(v1, v2, exprtext)
  ------------------
  354|    662|                                                        exprtext);       \
  355|    662|  }                                                                      \
_ZN4absl12lts_2024011612log_internal21GetReferenceableValueIPKN6google8protobuf8internal9ClassDataEEERKT_SB_:
  386|  1.32k|inline constexpr const T& GetReferenceableValue(const T& t) {
  387|  1.32k|  return t;
  388|  1.32k|}

_ZN4absl12lts_2024011612log_internal17LogEveryPow2State9ShouldLogEv:
   52|     36|bool LogEveryPow2State::ShouldLog() {
   53|     36|  const uint32_t new_value = LossyIncrement(&counter_) + 1;
   54|     36|  return (new_value & (new_value - 1)) == 0;
   55|     36|}
conditions.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_114LossyIncrementEPNSt3__16atomicIjEE:
   31|     36|uint32_t LossyIncrement(std::atomic<uint32_t>* counter) {
   32|     36|  const uint32_t value = counter->load(std::memory_order_relaxed);
   33|     36|  counter->store(value + 1, std::memory_order_relaxed);
   34|     36|  return value;
   35|     36|}

_ZN4absl12lts_2024011612log_internal17LogEveryPow2State7counterEv:
  214|      6|  uint32_t counter() { return counter_.load(std::memory_order_relaxed); }

_ZN4absl12lts_2024011612log_internal13IsInitializedEv:
   54|     31|bool IsInitialized() {
   55|     31|  return logging_initialized.load(std::memory_order_acquire);
   56|     31|}
_ZN4absl12lts_2024011612log_internal13WriteToStderrENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEENS0_11LogSeverityE:
   62|     25|void WriteToStderr(absl::string_view message, absl::LogSeverity severity) {
   63|     25|  if (message.empty()) return;
  ------------------
  |  Branch (63:7): [True: 0, False: 25]
  ------------------
   64|       |#if defined(__EMSCRIPTEN__)
   65|       |  // In WebAssembly, bypass filesystem emulation via fwrite.
   66|       |  // Skip a trailing newline character as emscripten_errn adds one itself.
   67|       |  const auto message_minus_newline = absl::StripSuffix(message, "\n");
   68|       |  // emscripten_errn was introduced in 3.1.41 but broken in standalone mode
   69|       |  // until 3.1.43.
   70|       |#if ABSL_INTERNAL_EMSCRIPTEN_VERSION >= 3001043
   71|       |  emscripten_errn(message_minus_newline.data(), message_minus_newline.size());
   72|       |#else
   73|       |  std::string null_terminated_message(message_minus_newline);
   74|       |  _emscripten_err(null_terminated_message.c_str());
   75|       |#endif
   76|       |#else
   77|       |  // Avoid using std::cerr from this module since we may get called during
   78|       |  // exit code, and cerr may be partially or fully destroyed by then.
   79|     25|  std::fwrite(message.data(), message.size(), 1, stderr);
   80|     25|#endif
   81|       |
   82|       |#if defined(_WIN64) || defined(_WIN32) || defined(_WIN16)
   83|       |  // C99 requires stderr to not be fully-buffered by default (7.19.3.7), but
   84|       |  // MS CRT buffers it anyway, so we must `fflush` to ensure the string hits
   85|       |  // the console/file before the program dies (and takes the libc buffers
   86|       |  // with it).
   87|       |  // https://docs.microsoft.com/en-us/cpp/c-runtime-library/stream-i-o
   88|       |  if (severity >= absl::LogSeverity::kWarning) {
   89|       |    std::fflush(stderr);
   90|       |  }
   91|       |#else
   92|       |  // Avoid unused parameter warning in this branch.
   93|     25|  (void)severity;
   94|     25|#endif
   95|     25|}
_ZN4absl12lts_2024011612log_internal8TimeZoneEv:
  109|     24|const absl::TimeZone* TimeZone() {
  110|     24|  return timezone_ptr.load(std::memory_order_acquire);
  111|     24|}

_ZN4absl12lts_2024011612log_internal15FormatLogPrefixENS0_11LogSeverityENS0_4TimeEiNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEiNS1_12PrefixFormatERNS0_4SpanIcEE:
  194|     24|                       int line, PrefixFormat format, absl::Span<char>& buf) {
  195|     24|  auto prefix_size = FormatBoundedFields(severity, timestamp, tid, buf);
  196|     24|  prefix_size += log_internal::AppendTruncated(basename, buf);
  197|     24|  prefix_size += FormatLineNumber(line, buf);
  198|     24|  if (format == PrefixFormat::kRaw)
  ------------------
  |  Branch (198:7): [True: 0, False: 24]
  ------------------
  199|      0|    prefix_size += log_internal::AppendTruncated("RAW: ", buf);
  200|     24|  return prefix_size;
  201|     24|}
log_format.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_119FormatBoundedFieldsENS0_11LogSeverityENS0_4TimeEiRNS0_4SpanIcEE:
   78|     24|                           log_internal::Tid tid, absl::Span<char>& buf) {
   79|     24|  constexpr size_t kBoundedFieldsMaxLen =
   80|     24|      sizeof("SMMDD HH:MM:SS.NNNNNN  ") +
   81|     24|      (1 + std::numeric_limits<log_internal::Tid>::digits10 + 1) - sizeof("");
   82|     24|  if (ABSL_PREDICT_FALSE(buf.size() < kBoundedFieldsMaxLen)) {
  ------------------
  |  |  178|     24|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 24]
  |  |  |  Branch (178:49): [Folded, False: 24]
  |  |  |  Branch (178:58): [True: 0, False: 24]
  |  |  ------------------
  ------------------
   83|       |    // We don't bother trying to truncate these fields if the buffer is too
   84|       |    // short (or almost too short) because it would require doing a lot more
   85|       |    // length checking (slow) and it should never happen.  A 15kB buffer should
   86|       |    // be enough for anyone.  Instead we mark `buf` full without writing
   87|       |    // anything.
   88|      0|    buf.remove_suffix(buf.size());
   89|      0|    return 0;
   90|      0|  }
   91|       |
   92|       |  // We can't call absl::LocalTime(), localtime_r(), or anything else here that
   93|       |  // isn't async-signal-safe. We can only use the time zone if it has already
   94|       |  // been loaded.
   95|     24|  const absl::TimeZone* tz = absl::log_internal::TimeZone();
   96|     24|  if (ABSL_PREDICT_FALSE(tz == nullptr)) {
  ------------------
  |  |  178|     24|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 24, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 24]
  |  |  |  Branch (178:58): [True: 24, False: 0]
  |  |  ------------------
  ------------------
   97|       |    // If a time zone hasn't been set yet because we are logging before the
   98|       |    // logging library has been initialized, we fallback to a simpler, slower
   99|       |    // method. Just report the raw Unix time in seconds. We cram this into the
  100|       |    // normal time format for the benefit of parsers.
  101|     24|    auto tv = absl::ToTimeval(timestamp);
  102|     24|    int snprintf_result = absl::SNPrintF(
  103|     24|        buf.data(), buf.size(), "%c0000 00:00:%02d.%06d %7d ",
  104|     24|        absl::LogSeverityName(severity)[0], static_cast<int>(tv.tv_sec),
  105|     24|        static_cast<int>(tv.tv_usec), static_cast<int>(tid));
  106|     24|    if (snprintf_result >= 0) {
  ------------------
  |  Branch (106:9): [True: 24, False: 0]
  ------------------
  107|     24|      buf.remove_prefix(static_cast<size_t>(snprintf_result));
  108|     24|      return static_cast<size_t>(snprintf_result);
  109|     24|    }
  110|      0|    return 0;
  111|     24|  }
  112|       |
  113|      0|  char* p = buf.data();
  114|      0|  *p++ = absl::LogSeverityName(severity)[0];
  115|      0|  const absl::TimeZone::CivilInfo ci = tz->At(timestamp);
  116|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(ci.cs.month()), p);
  117|      0|  p += 2;
  118|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(ci.cs.day()), p);
  119|      0|  p += 2;
  120|      0|  *p++ = ' ';
  121|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(ci.cs.hour()), p);
  122|      0|  p += 2;
  123|      0|  *p++ = ':';
  124|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(ci.cs.minute()),
  125|      0|                                       p);
  126|      0|  p += 2;
  127|      0|  *p++ = ':';
  128|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(ci.cs.second()),
  129|      0|                                       p);
  130|      0|  p += 2;
  131|      0|  *p++ = '.';
  132|      0|  const int64_t usecs = absl::ToInt64Microseconds(ci.subsecond);
  133|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(usecs / 10000), p);
  134|      0|  p += 2;
  135|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(usecs / 100 % 100),
  136|      0|                                       p);
  137|      0|  p += 2;
  138|      0|  absl::numbers_internal::PutTwoDigits(static_cast<uint32_t>(usecs % 100), p);
  139|      0|  p += 2;
  140|      0|  *p++ = ' ';
  141|      0|  PutLeadingWhitespace(tid, p);
  142|      0|  p = absl::numbers_internal::FastIntToBuffer(tid, p);
  143|      0|  *p++ = ' ';
  144|      0|  const size_t bytes_formatted = static_cast<size_t>(p - buf.data());
  145|      0|  buf.remove_prefix(bytes_formatted);
  146|      0|  return bytes_formatted;
  147|     24|}
log_format.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_116FormatLineNumberEiRNS0_4SpanIcEE:
  149|     24|size_t FormatLineNumber(int line, absl::Span<char>& buf) {
  150|     24|  constexpr size_t kLineFieldMaxLen =
  151|     24|      sizeof(":] ") + (1 + std::numeric_limits<int>::digits10 + 1) - sizeof("");
  152|     24|  if (ABSL_PREDICT_FALSE(buf.size() < kLineFieldMaxLen)) {
  ------------------
  |  |  178|     24|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 24]
  |  |  |  Branch (178:49): [Folded, False: 24]
  |  |  |  Branch (178:58): [True: 0, False: 24]
  |  |  ------------------
  ------------------
  153|       |    // As above, we don't bother trying to truncate this if the buffer is too
  154|       |    // short and it should never happen.
  155|      0|    buf.remove_suffix(buf.size());
  156|      0|    return 0;
  157|      0|  }
  158|     24|  char* p = buf.data();
  159|     24|  *p++ = ':';
  160|     24|  p = absl::numbers_internal::FastIntToBuffer(line, p);
  161|     24|  *p++ = ']';
  162|     24|  *p++ = ' ';
  163|     24|  const size_t bytes_formatted = static_cast<size_t>(p - buf.data());
  164|     24|  buf.remove_prefix(bytes_formatted);
  165|     24|  return bytes_formatted;
  166|     24|}

_ZN4absl12lts_2024011612log_internal10LogMessage19CopyToEncodedBufferILNS2_10StringTypeE0EEEvNSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
  529|    102|void LogMessage::CopyToEncodedBuffer(absl::string_view str) {
  530|    102|  auto encoded_remaining_copy = data_->encoded_remaining;
  531|    102|  auto start = EncodeMessageStart(
  532|    102|      EventTag::kValue, BufferSizeFor(WireType::kLengthDelimited) + str.size(),
  533|    102|      &encoded_remaining_copy);
  534|       |  // If the `logging.proto.Event.value` field header did not fit,
  535|       |  // `EncodeMessageStart` will have zeroed `encoded_remaining_copy`'s size and
  536|       |  // `EncodeStringTruncate` will fail too.
  537|    102|  if (EncodeStringTruncate(str_type == StringType::kLiteral
  ------------------
  |  Branch (537:7): [True: 102, False: 0]
  |  Branch (537:28): [True: 102, Folded]
  ------------------
  538|    102|                               ? ValueTag::kStringLiteral
  539|    102|                               : ValueTag::kString,
  540|    102|                           str, &encoded_remaining_copy)) {
  541|       |    // The string may have been truncated, but the field header fit.
  542|    102|    EncodeMessageLength(start, &encoded_remaining_copy);
  543|    102|    data_->encoded_remaining = encoded_remaining_copy;
  544|    102|  } else {
  545|       |    // The field header(s) did not fit; zero `encoded_remaining` so we don't
  546|       |    // write anything else later.
  547|      0|    data_->encoded_remaining.remove_suffix(data_->encoded_remaining.size());
  548|      0|  }
  549|    102|}
_ZN4absl12lts_2024011612log_internal10LogMessage19CopyToEncodedBufferILNS2_10StringTypeE1EEEvNSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
  529|     48|void LogMessage::CopyToEncodedBuffer(absl::string_view str) {
  530|     48|  auto encoded_remaining_copy = data_->encoded_remaining;
  531|     48|  auto start = EncodeMessageStart(
  532|     48|      EventTag::kValue, BufferSizeFor(WireType::kLengthDelimited) + str.size(),
  533|     48|      &encoded_remaining_copy);
  534|       |  // If the `logging.proto.Event.value` field header did not fit,
  535|       |  // `EncodeMessageStart` will have zeroed `encoded_remaining_copy`'s size and
  536|       |  // `EncodeStringTruncate` will fail too.
  537|     48|  if (EncodeStringTruncate(str_type == StringType::kLiteral
  ------------------
  |  Branch (537:7): [True: 48, False: 0]
  |  Branch (537:28): [Folded, False: 48]
  ------------------
  538|     48|                               ? ValueTag::kStringLiteral
  539|     48|                               : ValueTag::kString,
  540|     48|                           str, &encoded_remaining_copy)) {
  541|       |    // The string may have been truncated, but the field header fit.
  542|     48|    EncodeMessageLength(start, &encoded_remaining_copy);
  543|     48|    data_->encoded_remaining = encoded_remaining_copy;
  544|     48|  } else {
  545|       |    // The field header(s) did not fit; zero `encoded_remaining` so we don't
  546|       |    // write anything else later.
  547|      0|    data_->encoded_remaining.remove_suffix(data_->encoded_remaining.size());
  548|      0|  }
  549|     48|}
_ZN4absl12lts_2024011612log_internal10LogMessage14LogMessageDataC2EPKciNS0_11LogSeverityENS0_4TimeE:
  164|     24|    : extra_sinks_only(false),
  165|     24|      manipulated(nullptr),
  166|       |      // This `absl::MakeSpan` silences spurious -Wuninitialized from GCC:
  167|     24|      encoded_remaining(absl::MakeSpan(encoded_buf)) {
  168|       |  // Legacy defaults for LOG's ostream:
  169|     24|  manipulated.setf(std::ios_base::showbase | std::ios_base::boolalpha);
  170|     24|  entry.full_filename_ = file;
  171|     24|  entry.base_filename_ = Basename(file);
  172|     24|  entry.line_ = line;
  173|     24|  entry.prefix_ = absl::ShouldPrependLogPrefix();
  174|     24|  entry.severity_ = absl::NormalizeLogSeverity(severity);
  175|     24|  entry.verbose_level_ = absl::LogEntry::kNoVerbosityLevel;
  176|     24|  entry.timestamp_ = timestamp;
  177|     24|  entry.tid_ = absl::base_internal::GetCachedTID();
  178|     24|}
_ZN4absl12lts_2024011612log_internal10LogMessage14LogMessageData25FinalizeEncodingAndFormatEv:
  180|     24|void LogMessage::LogMessageData::FinalizeEncodingAndFormat() {
  181|       |  // Note that `encoded_remaining` may have zero size without pointing past the
  182|       |  // end of `encoded_buf`, so the difference between `data()` pointers is used
  183|       |  // to compute the size of `encoded_data`.
  184|     24|  absl::Span<const char> encoded_data(
  185|     24|      encoded_buf.data(),
  186|     24|      static_cast<size_t>(encoded_remaining.data() - encoded_buf.data()));
  187|       |  // `string_remaining` is the suffix of `string_buf` that has not been filled
  188|       |  // yet.
  189|     24|  absl::Span<char> string_remaining(string_buf);
  190|       |  // We may need to write a newline and nul-terminator at the end of the decoded
  191|       |  // string data.  Rather than worry about whether those should overwrite the
  192|       |  // end of the string (if the buffer is full) or be appended, we avoid writing
  193|       |  // into the last two bytes so we always have space to append.
  194|     24|  string_remaining.remove_suffix(2);
  195|     24|  entry.prefix_len_ =
  196|     24|      entry.prefix() ? log_internal::FormatLogPrefix(
  ------------------
  |  Branch (196:7): [True: 24, False: 0]
  ------------------
  197|     24|                           entry.log_severity(), entry.timestamp(), entry.tid(),
  198|     24|                           entry.source_basename(), entry.source_line(),
  199|     24|                           log_internal::ThreadIsLoggingToLogSink()
  ------------------
  |  Branch (199:28): [True: 0, False: 24]
  ------------------
  200|     24|                               ? PrefixFormat::kRaw
  201|     24|                               : PrefixFormat::kNotRaw,
  202|     24|                           string_remaining)
  203|     24|                     : 0;
  204|       |  // Decode data from `encoded_buf` until we run out of data or we run out of
  205|       |  // `string_remaining`.
  206|     24|  ProtoField field;
  207|    228|  while (field.DecodeFrom(&encoded_data)) {
  ------------------
  |  Branch (207:10): [True: 204, False: 24]
  ------------------
  208|    204|    switch (field.tag()) {
  ------------------
  |  Branch (208:13): [True: 204, False: 0]
  ------------------
  209|    204|      case EventTag::kValue:
  ------------------
  |  Branch (209:7): [True: 204, False: 0]
  ------------------
  210|    204|        if (field.type() != WireType::kLengthDelimited) continue;
  ------------------
  |  Branch (210:13): [True: 0, False: 204]
  ------------------
  211|    204|        if (PrintValue(string_remaining, field.bytes_value())) continue;
  ------------------
  |  Branch (211:13): [True: 204, False: 0]
  ------------------
  212|      0|        break;
  213|    204|    }
  214|      0|    break;
  215|    204|  }
  216|     24|  auto chars_written =
  217|     24|      static_cast<size_t>(string_remaining.data() - string_buf.data());
  218|     24|    string_buf[chars_written++] = '\n';
  219|     24|  string_buf[chars_written++] = '\0';
  220|     24|  entry.text_message_with_prefix_and_newline_and_nul_ =
  221|     24|      absl::MakeSpan(string_buf).subspan(0, chars_written);
  222|     24|}
_ZN4absl12lts_2024011612log_internal10LogMessageC2EPKciNS0_11LogSeverityE:
  225|     24|    : data_(absl::make_unique<LogMessageData>(file, line, severity,
  226|     24|                                              absl::Now())) {
  227|     24|  data_->first_fatal = false;
  228|     24|  data_->is_perror = false;
  229|     24|  data_->fail_quietly = false;
  230|       |
  231|       |  // This logs a backtrace even if the location is subsequently changed using
  232|       |  // AtLocation.  This quirk, and the behavior when AtLocation is called twice,
  233|       |  // are fixable but probably not worth fixing.
  234|     24|  LogBacktraceIfNeeded();
  235|     24|}
_ZN4absl12lts_2024011612log_internal10LogMessageC2EPKciNS2_10WarningTagE:
  240|      6|    : LogMessage(file, line, absl::LogSeverity::kWarning) {}
_ZN4absl12lts_2024011612log_internal10LogMessageC2EPKciNS2_8ErrorTagE:
  242|     18|    : LogMessage(file, line, absl::LogSeverity::kError) {}
_ZN4absl12lts_2024011612log_internal10LogMessageD2Ev:
  244|     24|LogMessage::~LogMessage() {
  245|       |#ifdef ABSL_MIN_LOG_LEVEL
  246|       |  if (data_->entry.log_severity() <
  247|       |          static_cast<absl::LogSeverity>(ABSL_MIN_LOG_LEVEL) &&
  248|       |      data_->entry.log_severity() < absl::LogSeverity::kFatal) {
  249|       |    return;
  250|       |  }
  251|       |#endif
  252|     24|  Flush();
  253|     24|}
_ZN4absl12lts_2024011612log_internal10LogMessagelsERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
  355|     24|LogMessage& LogMessage::operator<<(const std::string& v) {
  356|     24|  CopyToEncodedBuffer<StringType::kNotLiteral>(v);
  357|     24|  return *this;
  358|     24|}
_ZN4absl12lts_2024011612log_internal10LogMessagelsENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
  360|     24|LogMessage& LogMessage::operator<<(absl::string_view v) {
  361|     24|  CopyToEncodedBuffer<StringType::kNotLiteral>(v);
  362|     24|  return *this;
  363|     24|}
_ZN4absl12lts_2024011612log_internal10LogMessage5FlushEv:
  392|     24|void LogMessage::Flush() {
  393|     24|  if (data_->entry.log_severity() < absl::MinLogLevel()) return;
  ------------------
  |  Branch (393:7): [True: 0, False: 24]
  ------------------
  394|       |
  395|     24|  if (data_->is_perror) {
  ------------------
  |  Branch (395:7): [True: 0, False: 24]
  ------------------
  396|      0|    InternalStream() << ": " << absl::base_internal::StrError(errno_saver_())
  397|      0|                     << " [" << errno_saver_() << "]";
  398|      0|  }
  399|       |
  400|       |  // Have we already seen a fatal message?
  401|     24|  ABSL_CONST_INIT static std::atomic<bool> seen_fatal(false);
  ------------------
  |  |  745|     24|#define ABSL_CONST_INIT [[clang::require_constant_initialization]]
  ------------------
  402|     24|  if (data_->entry.log_severity() == absl::LogSeverity::kFatal &&
  ------------------
  |  Branch (402:7): [True: 0, False: 24]
  ------------------
  403|      0|      absl::log_internal::ExitOnDFatal()) {
  ------------------
  |  Branch (403:7): [True: 0, False: 0]
  ------------------
  404|       |    // Exactly one LOG(FATAL) message is responsible for aborting the process,
  405|       |    // even if multiple threads LOG(FATAL) concurrently.
  406|      0|    bool expected_seen_fatal = false;
  407|      0|    if (seen_fatal.compare_exchange_strong(expected_seen_fatal, true,
  ------------------
  |  Branch (407:9): [True: 0, False: 0]
  ------------------
  408|      0|                                           std::memory_order_relaxed)) {
  409|      0|      data_->first_fatal = true;
  410|      0|    }
  411|      0|  }
  412|       |
  413|     24|  data_->FinalizeEncodingAndFormat();
  414|     24|  data_->entry.encoding_ =
  415|     24|      absl::string_view(data_->encoded_buf.data(),
  416|     24|                        static_cast<size_t>(data_->encoded_remaining.data() -
  417|     24|                                            data_->encoded_buf.data()));
  418|     24|  SendToLog();
  419|     24|}
_ZN4absl12lts_2024011612log_internal10LogMessage11OstreamViewC2ERNS2_14LogMessageDataE:
  424|     54|    : data_(message_data), encoded_remaining_copy_(data_.encoded_remaining) {
  425|       |  // This constructor sets the `streambuf` up so that streaming into an attached
  426|       |  // ostream encodes string data in-place.  To do that, we write appropriate
  427|       |  // headers into the buffer using a copy of the buffer view so that we can
  428|       |  // decide not to keep them later if nothing is ever streamed in.  We don't
  429|       |  // know how much data we'll get, but we can use the size of the remaining
  430|       |  // buffer as an upper bound and fill in the right size once we know it.
  431|     54|  message_start_ =
  432|     54|      EncodeMessageStart(EventTag::kValue, encoded_remaining_copy_.size(),
  433|     54|                         &encoded_remaining_copy_);
  434|     54|  string_start_ =
  435|     54|      EncodeMessageStart(ValueTag::kString, encoded_remaining_copy_.size(),
  436|     54|                         &encoded_remaining_copy_);
  437|     54|  setp(encoded_remaining_copy_.data(),
  438|     54|       encoded_remaining_copy_.data() + encoded_remaining_copy_.size());
  439|     54|  data_.manipulated.rdbuf(this);
  440|     54|}
_ZN4absl12lts_2024011612log_internal10LogMessage11OstreamViewD2Ev:
  442|     54|LogMessage::OstreamView::~OstreamView() {
  443|     54|  data_.manipulated.rdbuf(nullptr);
  444|     54|  if (!string_start_.data()) {
  ------------------
  |  Branch (444:7): [True: 0, False: 54]
  ------------------
  445|       |    // The second field header didn't fit.  Whether the first one did or not, we
  446|       |    // shouldn't commit `encoded_remaining_copy_`, and we also need to zero the
  447|       |    // size of `data_->encoded_remaining` so that no more data are encoded.
  448|      0|    data_.encoded_remaining.remove_suffix(data_.encoded_remaining.size());
  449|      0|    return;
  450|      0|  }
  451|     54|  const absl::Span<const char> contents(pbase(),
  452|     54|                                        static_cast<size_t>(pptr() - pbase()));
  453|     54|  if (contents.empty()) return;
  ------------------
  |  Branch (453:7): [True: 0, False: 54]
  ------------------
  454|     54|  encoded_remaining_copy_.remove_prefix(contents.size());
  455|     54|  EncodeMessageLength(string_start_, &encoded_remaining_copy_);
  456|     54|  EncodeMessageLength(message_start_, &encoded_remaining_copy_);
  457|     54|  data_.encoded_remaining = encoded_remaining_copy_;
  458|     54|}
_ZN4absl12lts_2024011612log_internal10LogMessage11OstreamView6streamEv:
  460|     54|std::ostream& LogMessage::OstreamView::stream() { return data_.manipulated; }
_ZNK4absl12lts_2024011612log_internal10LogMessage7IsFatalEv:
  462|     48|bool LogMessage::IsFatal() const {
  463|     48|  return data_->entry.log_severity() == absl::LogSeverity::kFatal &&
  ------------------
  |  Branch (463:10): [True: 0, False: 48]
  ------------------
  464|      0|         absl::log_internal::ExitOnDFatal();
  ------------------
  |  Branch (464:10): [True: 0, False: 0]
  ------------------
  465|     48|}
_ZN4absl12lts_2024011612log_internal10LogMessage9SendToLogEv:
  501|     24|void LogMessage::SendToLog() {
  502|     24|  if (IsFatal()) PrepareToDie();
  ------------------
  |  Branch (502:7): [True: 0, False: 24]
  ------------------
  503|       |  // Also log to all registered sinks, even if OnlyLogToStderr() is set.
  504|     24|  log_internal::LogToSinks(data_->entry, absl::MakeSpan(data_->extra_sinks),
  505|     24|                           data_->extra_sinks_only);
  506|     24|  if (IsFatal()) Die();
  ------------------
  |  Branch (506:7): [True: 0, False: 24]
  ------------------
  507|     24|}
_ZN4absl12lts_2024011612log_internal10LogMessage20LogBacktraceIfNeededEv:
  509|     24|void LogMessage::LogBacktraceIfNeeded() {
  510|     24|  if (!absl::log_internal::IsInitialized()) return;
  ------------------
  |  Branch (510:7): [True: 24, False: 0]
  ------------------
  511|       |
  512|      0|  if (!absl::log_internal::ShouldLogBacktraceAt(data_->entry.source_basename(),
  ------------------
  |  Branch (512:7): [True: 0, False: 0]
  ------------------
  513|      0|                                                data_->entry.source_line()))
  514|      0|    return;
  515|      0|  OstreamView view(*data_);
  516|      0|  view.stream() << " (stacktrace:\n";
  517|      0|  debugging_internal::DumpStackTrace(
  518|      0|      1, log_internal::MaxFramesInLogStackTrace(),
  519|      0|      log_internal::ShouldSymbolizeLogStackTrace(), WriteToStream,
  520|      0|      &view.stream());
  521|      0|  view.stream() << ") ";
  522|      0|}
log_message.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_18BasenameENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
  103|     24|absl::string_view Basename(absl::string_view filepath) {
  104|       |#ifdef _WIN32
  105|       |  size_t path = filepath.find_last_of("/\\");
  106|       |#else
  107|     24|  size_t path = filepath.find_last_of('/');
  108|     24|#endif
  109|     24|  if (path != filepath.npos) filepath.remove_prefix(path + 1);
  ------------------
  |  Branch (109:7): [True: 24, False: 0]
  ------------------
  110|     24|  return filepath;
  111|     24|}
log_message.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_110PrintValueERNS0_4SpanIcEENS3_IKcEE:
   87|    204|bool PrintValue(absl::Span<char>& dst, absl::Span<const char> buf) {
   88|    204|  if (dst.size() <= 1) return false;
  ------------------
  |  Branch (88:7): [True: 0, False: 204]
  ------------------
   89|    204|  ProtoField field;
   90|    408|  while (field.DecodeFrom(&buf)) {
  ------------------
  |  Branch (90:10): [True: 204, False: 204]
  ------------------
   91|    204|    switch (field.tag()) {
  ------------------
  |  Branch (91:13): [True: 204, False: 0]
  ------------------
   92|    102|      case ValueTag::kString:
  ------------------
  |  Branch (92:7): [True: 102, False: 102]
  ------------------
   93|    204|      case ValueTag::kStringLiteral:
  ------------------
  |  Branch (93:7): [True: 102, False: 102]
  ------------------
   94|    204|        if (field.type() == WireType::kLengthDelimited)
  ------------------
  |  Branch (94:13): [True: 204, False: 0]
  ------------------
   95|    204|          if (log_internal::AppendTruncated(field.string_value(), dst) <
  ------------------
  |  Branch (95:15): [True: 0, False: 204]
  ------------------
   96|    204|              field.string_value().size())
   97|      0|            return false;
   98|    204|    }
   99|    204|  }
  100|    204|  return true;
  101|    204|}

_ZN4absl12lts_2024011612log_internal10LogMessage14InternalStreamEv:
  104|     24|  LogMessage& InternalStream() { return *this; }
_ZN4absl12lts_2024011612log_internal10LogMessagelsEi:
  118|     48|  LogMessage& operator<<(signed int v) { return operator<< <signed int>(v); }
_ZN4absl12lts_2024011612log_internal10LogMessagelsEj:
  128|      6|  LogMessage& operator<<(unsigned int v) {
  129|      6|    return operator<< <unsigned int>(v);
  130|      6|  }
_ZN4absl12lts_2024011612log_internal10LogMessagelsILi2EEERS2_RAT__Kc:
  304|     24|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  305|     24|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  306|     24|  return *this;
  307|     24|}
_ZN4absl12lts_2024011612log_internal10LogMessagelsILi27EEERS2_RAT__Kc:
  304|     18|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  305|     18|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  306|     18|  return *this;
  307|     18|}
_ZN4absl12lts_2024011612log_internal10LogMessagelsILi3EEERS2_RAT__Kc:
  304|     42|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  305|     42|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  306|     42|  return *this;
  307|     42|}
_ZN4absl12lts_2024011612log_internal10LogMessagelsILi4EEERS2_RAT__Kc:
  304|      6|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  305|      6|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  306|      6|  return *this;
  307|      6|}
_ZN4absl12lts_2024011612log_internal10LogMessagelsILi29EEERS2_RAT__Kc:
  304|      6|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  305|      6|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  306|      6|  return *this;
  307|      6|}
_ZN4absl12lts_2024011612log_internal10LogMessagelsILi7EEERS2_RAT__Kc:
  304|      6|LogMessage& LogMessage::operator<<(const char (&buf)[SIZE]) {
  305|      6|  CopyToEncodedBuffer<StringType::kLiteral>(buf);
  306|      6|  return *this;
  307|      6|}
_ZN4absl12lts_2024011612log_internal10LogMessagelsIiTnNSt3__19enable_ifIXntsr4absl16HasAbslStringifyIT_EE5valueEiE4typeELi0EEERS2_RKS6_:
  297|     48|LogMessage& LogMessage::operator<<(const T& v) {
  298|     48|  OstreamView view(*data_);
  299|     48|  view.stream() << log_internal::NullGuard<T>().Guard(v);
  300|     48|  return *this;
  301|     48|}
_ZN4absl12lts_2024011612log_internal10LogMessagelsIjTnNSt3__19enable_ifIXntsr4absl16HasAbslStringifyIT_EE5valueEiE4typeELi0EEERS2_RKS6_:
  297|      6|LogMessage& LogMessage::operator<<(const T& v) {
  298|      6|  OstreamView view(*data_);
  299|      6|  view.stream() << log_internal::NullGuard<T>().Guard(v);
  300|      6|  return *this;
  301|      6|}

_ZN4absl12lts_2024011612log_internal24ThreadIsLoggingToLogSinkEv:
  277|     48|bool ThreadIsLoggingToLogSink() { return ThreadIsLoggingStatus(); }
_ZN4absl12lts_2024011612log_internal10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEb:
  280|     24|                absl::Span<absl::LogSink*> extra_sinks, bool extra_sinks_only) {
  281|     24|  log_internal::GlobalSinks().LogToSinks(entry, extra_sinks, extra_sinks_only);
  282|     24|}
log_sink_set.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_121ThreadIsLoggingStatusEv:
   58|     96|bool& ThreadIsLoggingStatus() {
   59|     96|#ifdef ABSL_HAVE_THREAD_LOCAL
   60|     96|  ABSL_CONST_INIT thread_local bool thread_is_logging = false;
  ------------------
  |  |  745|     96|#define ABSL_CONST_INIT [[clang::require_constant_initialization]]
  ------------------
   61|     96|  return thread_is_logging;
   62|       |#else
   63|       |  ABSL_CONST_INIT static pthread_key_t thread_is_logging_key;
   64|       |  static const bool unused = [] {
   65|       |    if (pthread_key_create(&thread_is_logging_key, [](void* data) {
   66|       |          delete reinterpret_cast<bool*>(data);
   67|       |        })) {
   68|       |      perror("pthread_key_create failed!");
   69|       |      abort();
   70|       |    }
   71|       |    return true;
   72|       |  }();
   73|       |  (void)unused;  // Fixes -wunused-variable warning
   74|       |  bool* thread_is_logging_ptr =
   75|       |      reinterpret_cast<bool*>(pthread_getspecific(thread_is_logging_key));
   76|       |
   77|       |  if (ABSL_PREDICT_FALSE(!thread_is_logging_ptr)) {
   78|       |    thread_is_logging_ptr = new bool{false};
   79|       |    if (pthread_setspecific(thread_is_logging_key, thread_is_logging_ptr)) {
   80|       |      perror("pthread_setspecific failed");
   81|       |      abort();
   82|       |    }
   83|       |  }
   84|       |  return *thread_is_logging_ptr;
   85|       |#endif
   86|     96|}
log_sink_set.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_111GlobalSinksEv:
  270|     24|GlobalLogSinkSet& GlobalSinks() {
  271|     24|  static absl::NoDestructor<GlobalLogSinkSet> global_sinks;
  272|     24|  return *global_sinks;
  273|     24|}
log_sink_set.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_116GlobalLogSinkSetC2Ev:
  168|      1|  GlobalLogSinkSet() {
  169|       |#if defined(__myriad2__) || defined(__Fuchsia__)
  170|       |    // myriad2 and Fuchsia do not log to stderr by default.
  171|       |#else
  172|      1|    static absl::NoDestructor<StderrLogSink> stderr_log_sink;
  173|      1|    AddLogSink(stderr_log_sink.get());
  174|      1|#endif
  175|       |#ifdef __ANDROID__
  176|       |    static absl::NoDestructor<AndroidLogSink> android_log_sink;
  177|       |    AddLogSink(android_log_sink.get());
  178|       |#endif
  179|       |#if defined(_WIN32)
  180|       |    static absl::NoDestructor<WindowsDebuggerLogSink> debugger_log_sink;
  181|       |    AddLogSink(debugger_log_sink.get());
  182|       |#endif  // !defined(_WIN32)
  183|      1|  }
log_sink_set.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_113StderrLogSink4SendERKNS0_8LogEntryE:
   92|     24|  void Send(const absl::LogEntry& entry) override {
   93|     24|    if (entry.log_severity() < absl::StderrThreshold() &&
  ------------------
  |  Branch (93:9): [True: 6, False: 18]
  ------------------
   94|      6|        absl::log_internal::IsInitialized()) {
  ------------------
  |  Branch (94:9): [True: 0, False: 6]
  ------------------
   95|      0|      return;
   96|      0|    }
   97|       |
   98|     24|    ABSL_CONST_INIT static absl::once_flag warn_if_not_initialized;
  ------------------
  |  |  745|     24|#define ABSL_CONST_INIT [[clang::require_constant_initialization]]
  ------------------
   99|     24|    absl::call_once(warn_if_not_initialized, []() {
  100|     24|      if (absl::log_internal::IsInitialized()) return;
  101|     24|      const char w[] =
  102|     24|          "WARNING: All log messages before absl::InitializeLog() is called"
  103|     24|          " are written to STDERR\n";
  104|     24|      absl::log_internal::WriteToStderr(w, absl::LogSeverity::kWarning);
  105|     24|    });
  106|       |
  107|     24|    if (!entry.stacktrace().empty()) {
  ------------------
  |  Branch (107:9): [True: 0, False: 24]
  ------------------
  108|      0|      absl::log_internal::WriteToStderr(entry.stacktrace(),
  109|      0|                                        entry.log_severity());
  110|     24|    } else {
  111|       |      // TODO(b/226937039): do this outside else condition once we avoid
  112|       |      // ReprintFatalMessage
  113|     24|      absl::log_internal::WriteToStderr(
  114|     24|          entry.text_message_with_prefix_and_newline(), entry.log_severity());
  115|     24|    }
  116|     24|  }
log_sink_set.cc:_ZZN4absl12lts_2024011612log_internal12_GLOBAL__N_113StderrLogSink4SendERKNS0_8LogEntryEENKUlvE_clEv:
   99|      1|    absl::call_once(warn_if_not_initialized, []() {
  100|      1|      if (absl::log_internal::IsInitialized()) return;
  ------------------
  |  Branch (100:11): [True: 0, False: 1]
  ------------------
  101|      1|      const char w[] =
  102|      1|          "WARNING: All log messages before absl::InitializeLog() is called"
  103|      1|          " are written to STDERR\n";
  104|      1|      absl::log_internal::WriteToStderr(w, absl::LogSeverity::kWarning);
  105|      1|    });
log_sink_set.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEb:
  187|     24|      ABSL_LOCKS_EXCLUDED(guard_) {
  188|     24|    SendToSinks(entry, extra_sinks);
  189|       |
  190|     24|    if (!extra_sinks_only) {
  ------------------
  |  Branch (190:9): [True: 24, False: 0]
  ------------------
  191|     24|      if (ThreadIsLoggingToLogSink()) {
  ------------------
  |  Branch (191:11): [True: 0, False: 24]
  ------------------
  192|      0|        absl::log_internal::WriteToStderr(
  193|      0|            entry.text_message_with_prefix_and_newline(), entry.log_severity());
  194|     24|      } else {
  195|     24|        absl::ReaderMutexLock global_sinks_lock(&guard_);
  196|     24|        ThreadIsLoggingStatus() = true;
  197|       |        // Ensure the "thread is logging" status is reverted upon leaving the
  198|       |        // scope even in case of exceptions.
  199|     24|        auto status_cleanup =
  200|     24|            absl::MakeCleanup([] { ThreadIsLoggingStatus() = false; });
  201|     24|        SendToSinks(entry, absl::MakeSpan(sinks_));
  202|     24|      }
  203|     24|    }
  204|     24|  }
log_sink_set.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_116GlobalLogSinkSet11SendToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEE:
  258|     48|                          absl::Span<absl::LogSink*> sinks) {
  259|     48|    for (absl::LogSink* sink : sinks) {
  ------------------
  |  Branch (259:30): [True: 24, False: 48]
  ------------------
  260|     24|      sink->Send(entry);
  261|     24|    }
  262|     48|  }
log_sink_set.cc:_ZZN4absl12lts_2024011612log_internal12_GLOBAL__N_116GlobalLogSinkSet10LogToSinksERKNS0_8LogEntryENS0_4SpanIPNS0_7LogSinkEEEbENKUlvE_clEv:
  200|     24|            absl::MakeCleanup([] { ThreadIsLoggingStatus() = false; });
log_sink_set.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_116GlobalLogSinkSet10AddLogSinkEPNS0_7LogSinkE:
  206|      1|  void AddLogSink(absl::LogSink* sink) ABSL_LOCKS_EXCLUDED(guard_) {
  207|      1|    {
  208|      1|      absl::WriterMutexLock global_sinks_lock(&guard_);
  209|      1|      auto pos = std::find(sinks_.begin(), sinks_.end(), sink);
  210|      1|      if (pos == sinks_.end()) {
  ------------------
  |  Branch (210:11): [True: 1, False: 0]
  ------------------
  211|      1|        sinks_.push_back(sink);
  212|      1|        return;
  213|      1|      }
  214|      1|    }
  215|      0|    ABSL_INTERNAL_LOG(FATAL, "Duplicate log sinks are not supported");
  ------------------
  |  |   76|      0|  do {                                                                    \
  |  |   77|      0|    constexpr const char* absl_raw_log_internal_filename = __FILE__;      \
  |  |   78|      0|    ::absl::raw_log_internal::internal_log_function(                      \
  |  |   79|      0|        ABSL_RAW_LOG_INTERNAL_##severity, absl_raw_log_internal_filename, \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   80|      0|        __LINE__, message);                                               \
  |  |   81|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                   \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (82:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  216|      0|  }

_ZN4absl12lts_2024011612log_internal9NullGuardIiE5GuardERKi:
   45|     48|  static const T& Guard(const T& v) { return v; }
_ZN4absl12lts_2024011612log_internal9NullGuardIjE5GuardERKj:
   45|      6|  static const T& Guard(const T& v) { return v; }

_ZN4absl12lts_2024011612log_internal19EncodeBytesTruncateEmNS0_4SpanIKcEEPNS2_IcEE:
  106|    150|                         absl::Span<char> *buf) {
  107|    150|  const uint64_t tag_type = MakeTagType(tag, WireType::kLengthDelimited);
  108|    150|  const size_t tag_type_size = VarintSize(tag_type);
  109|    150|  uint64_t length = value.size();
  110|    150|  const size_t length_size =
  111|    150|      VarintSize(std::min<uint64_t>(length, buf->size()));
  112|    150|  if (tag_type_size + length_size <= buf->size() &&
  ------------------
  |  Branch (112:7): [True: 150, False: 0]
  ------------------
  113|    150|      tag_type_size + length_size + value.size() > buf->size()) {
  ------------------
  |  Branch (113:7): [True: 0, False: 150]
  ------------------
  114|      0|    value.remove_suffix(tag_type_size + length_size + value.size() -
  115|      0|                        buf->size());
  116|      0|    length = value.size();
  117|      0|  }
  118|    150|  if (tag_type_size + length_size + value.size() > buf->size()) {
  ------------------
  |  Branch (118:7): [True: 0, False: 150]
  ------------------
  119|      0|    buf->remove_suffix(buf->size());
  120|      0|    return false;
  121|      0|  }
  122|    150|  EncodeRawVarint(tag_type, tag_type_size, buf);
  123|    150|  EncodeRawVarint(length, length_size, buf);
  124|    150|  memcpy(buf->data(), value.data(), value.size());
  125|    150|  buf->remove_prefix(value.size());
  126|    150|  return true;
  127|    150|}
_ZN4absl12lts_2024011612log_internal18EncodeMessageStartEmmPNS0_4SpanIcEE:
  130|    258|    uint64_t tag, uint64_t max_size, absl::Span<char> *buf) {
  131|    258|  const uint64_t tag_type = MakeTagType(tag, WireType::kLengthDelimited);
  132|    258|  const size_t tag_type_size = VarintSize(tag_type);
  133|    258|  max_size = std::min<uint64_t>(max_size, buf->size());
  134|    258|  const size_t length_size = VarintSize(max_size);
  135|    258|  if (tag_type_size + length_size > buf->size()) {
  ------------------
  |  Branch (135:7): [True: 0, False: 258]
  ------------------
  136|      0|    buf->remove_suffix(buf->size());
  137|      0|    return absl::Span<char>();
  138|      0|  }
  139|    258|  EncodeRawVarint(tag_type, tag_type_size, buf);
  140|    258|  const absl::Span<char> ret = buf->subspan(0, length_size);
  141|    258|  EncodeRawVarint(0, length_size, buf);
  142|    258|  return ret;
  143|    258|}
_ZN4absl12lts_2024011612log_internal19EncodeMessageLengthENS0_4SpanIcEEPKS3_:
  145|    258|void EncodeMessageLength(absl::Span<char> msg, const absl::Span<char> *buf) {
  146|    258|  if (!msg.data()) return;
  ------------------
  |  Branch (146:7): [True: 0, False: 258]
  ------------------
  147|    258|  assert(buf->data() >= msg.data());
  148|    258|  if (buf->data() < msg.data()) return;
  ------------------
  |  Branch (148:7): [True: 0, False: 258]
  ------------------
  149|    258|  EncodeRawVarint(
  150|    258|      static_cast<uint64_t>(buf->data() - (msg.data() + msg.size())),
  151|    258|      msg.size(), &msg);
  152|    258|}
_ZN4absl12lts_2024011612log_internal10ProtoField10DecodeFromEPNS0_4SpanIKcEE:
  192|    636|bool ProtoField::DecodeFrom(absl::Span<const char> *data) {
  193|    636|  if (data->empty()) return false;
  ------------------
  |  Branch (193:7): [True: 228, False: 408]
  ------------------
  194|    408|  const uint64_t tag_type = DecodeVarint(data);
  195|    408|  tag_ = tag_type >> 3;
  196|    408|  type_ = static_cast<WireType>(tag_type & 0x07);
  197|    408|  switch (type_) {
  ------------------
  |  Branch (197:11): [True: 408, False: 0]
  ------------------
  198|      0|    case WireType::kVarint:
  ------------------
  |  Branch (198:5): [True: 0, False: 408]
  ------------------
  199|      0|      value_ = DecodeVarint(data);
  200|      0|      break;
  201|      0|    case WireType::k64Bit:
  ------------------
  |  Branch (201:5): [True: 0, False: 408]
  ------------------
  202|      0|      value_ = Decode64Bit(data);
  203|      0|      break;
  204|    408|    case WireType::kLengthDelimited: {
  ------------------
  |  Branch (204:5): [True: 408, False: 0]
  ------------------
  205|    408|      value_ = DecodeVarint(data);
  206|    408|      data_ = data->subspan(
  207|    408|          0, static_cast<size_t>(std::min<uint64_t>(value_, data->size())));
  208|    408|      data->remove_prefix(data_.size());
  209|    408|      break;
  210|      0|    }
  211|      0|    case WireType::k32Bit:
  ------------------
  |  Branch (211:5): [True: 0, False: 408]
  ------------------
  212|      0|      value_ = Decode32Bit(data);
  213|      0|      break;
  214|    408|  }
  215|    408|  return true;
  216|    408|}
proto.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_111MakeTagTypeEmNS1_8WireTypeE:
   38|    408|constexpr uint64_t MakeTagType(uint64_t tag, WireType type) {
   39|    408|  return tag << 3 | static_cast<uint64_t>(type);
   40|    408|}
proto.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_115EncodeRawVarintEmmPNS0_4SpanIcEE:
   31|  1.07k|void EncodeRawVarint(uint64_t value, size_t size, absl::Span<char> *buf) {
   32|  2.36k|  for (size_t s = 0; s < size; s++) {
  ------------------
  |  Branch (32:22): [True: 1.29k, False: 1.07k]
  ------------------
   33|  1.29k|    (*buf)[s] = static_cast<char>((value & 0x7f) | (s + 1 == size ? 0 : 0x80));
  ------------------
  |  Branch (33:53): [True: 1.07k, False: 216]
  ------------------
   34|  1.29k|    value >>= 7;
   35|  1.29k|  }
   36|  1.07k|  buf->remove_prefix(size);
   37|  1.07k|}
proto.cc:_ZN4absl12lts_2024011612log_internal12_GLOBAL__N_112DecodeVarintEPNS0_4SpanIKcEE:
  155|    816|uint64_t DecodeVarint(absl::Span<const char> *buf) {
  156|    816|  uint64_t value = 0;
  157|    816|  size_t s = 0;
  158|    924|  while (s < buf->size()) {
  ------------------
  |  Branch (158:10): [True: 924, False: 0]
  ------------------
  159|    924|    value |= static_cast<uint64_t>(static_cast<unsigned char>((*buf)[s]) & 0x7f)
  160|    924|             << 7 * s;
  161|    924|    if (!((*buf)[s++] & 0x80)) break;
  ------------------
  |  Branch (161:9): [True: 816, False: 108]
  ------------------
  162|    924|  }
  163|    816|  buf->remove_prefix(s);
  164|    816|  return value;
  165|    816|}

_ZN4absl12lts_2024011612log_internal13BufferSizeForIJEEEmNS1_8WireTypeEDpT_:
  212|    150|constexpr size_t BufferSizeFor(WireType type, T... tail) {
  213|       |  // tag_type + data + ...
  214|    150|  return MaxVarintSize() +
  215|    150|         (type == WireType::kVarint ? MaxVarintSize() :              //
  ------------------
  |  Branch (215:11): [True: 0, False: 150]
  ------------------
  216|    150|              type == WireType::k64Bit ? 8 :                         //
  ------------------
  |  Branch (216:15): [True: 0, False: 150]
  ------------------
  217|    150|                  type == WireType::k32Bit ? 4 : MaxVarintSize()) +  //
  ------------------
  |  Branch (217:19): [True: 0, False: 150]
  ------------------
  218|    150|         BufferSizeFor(tail...);
  219|    150|}
_ZN4absl12lts_2024011612log_internal13MaxVarintSizeEv:
  194|    300|constexpr size_t MaxVarintSize() {
  195|    300|  return VarintSize((std::numeric_limits<uint64_t>::max)());
  196|    300|}
_ZN4absl12lts_2024011612log_internal10VarintSizeEm:
  188|  3.92k|constexpr size_t VarintSize(uint64_t value) {
  189|  3.92k|  return value < 128 ? 1 : 1 + VarintSize(value >> 7);
  ------------------
  |  Branch (189:10): [True: 1.11k, False: 2.80k]
  ------------------
  190|  3.92k|}
_ZN4absl12lts_2024011612log_internal13BufferSizeForEv:
  210|    150|constexpr size_t BufferSizeFor() { return 0; }
_ZN4absl12lts_2024011612log_internal20EncodeStringTruncateEmNSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEPNS0_4SpanIcEE:
  160|    150|                                 absl::Span<char> *buf) {
  161|    150|  return EncodeBytesTruncate(tag, value, buf);
  162|    150|}
_ZNK4absl12lts_2024011612log_internal10ProtoField3tagEv:
  235|    408|  uint64_t tag() const { return tag_; }
_ZNK4absl12lts_2024011612log_internal10ProtoField4typeEv:
  236|    408|  WireType type() const { return type_; }
_ZNK4absl12lts_2024011612log_internal10ProtoField12string_valueEv:
  266|    408|  absl::string_view string_value() const {
  267|    408|    const auto data = bytes_value();
  268|    408|    return absl::string_view(data.data(), data.size());
  269|    408|  }
_ZNK4absl12lts_2024011612log_internal10ProtoField11bytes_valueEv:
  265|    612|  absl::Span<const char> bytes_value() const { return data_; }

_ZNKO4absl12lts_2024011612log_internal7VoidifyaaINS1_10LogMessageEEEvRKT_:
   37|     18|  void operator&&(const T&) const&& {}

_ZNK4absl12lts_202401168LogEntry15source_basenameEv:
   78|     24|  absl::string_view source_basename() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
   79|     24|    return base_filename_;
   80|     24|  }
_ZNK4absl12lts_202401168LogEntry11source_lineEv:
   81|     24|  int source_line() const { return line_; }
_ZNK4absl12lts_202401168LogEntry6prefixEv:
   88|     24|  bool prefix() const { return prefix_; }
_ZNK4absl12lts_202401168LogEntry12log_severityEv:
   94|    168|  absl::LogSeverity log_severity() const { return severity_; }
_ZNK4absl12lts_202401168LogEntry9timestampEv:
  112|     24|  absl::Time timestamp() const { return timestamp_; }
_ZNK4absl12lts_202401168LogEntry3tidEv:
  121|     24|  tid_t tid() const { return tid_; }
_ZNK4absl12lts_202401168LogEntry36text_message_with_prefix_and_newlineEv:
  146|     24|      ABSL_ATTRIBUTE_LIFETIME_BOUND {
  147|     24|    return absl::string_view(
  148|     24|        text_message_with_prefix_and_newline_and_nul_.data(),
  149|     24|        text_message_with_prefix_and_newline_and_nul_.size() - 1);
  150|     24|  }
_ZNK4absl12lts_202401168LogEntry10stacktraceEv:
  194|     24|  absl::string_view stacktrace() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
  195|     24|    return stacktrace_;
  196|     24|  }
_ZN4absl12lts_202401168LogEntryC2Ev:
  199|     24|  LogEntry() = default;

_ZN4absl12lts_2024011611countl_zeroImEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeES4_:
  103|  1.70k|    countl_zero(T x) noexcept {
  104|  1.70k|  return numeric_internal::CountLeadingZeroes(x);
  105|  1.70k|}
_ZN4absl12lts_202401169bit_widthImEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeES4_:
  160|    169|    bit_width(T x) noexcept {
  161|    169|  return std::numeric_limits<T>::digits - countl_zero(x);
  162|    169|}
_ZN4absl12lts_2024011611countr_zeroImEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeES4_:
  118|    486|    countr_zero(T x) noexcept {
  119|    486|  return numeric_internal::CountTrailingZeroes(x);
  120|    486|}
_ZN4absl12lts_202401164rotrImEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueES4_E4typeES4_i:
   75|  3.56k|    rotr(T x, int s) noexcept {
   76|  3.56k|  return numeric_internal::RotateRight(x, s);
   77|  3.56k|}
_ZN4absl12lts_2024011611countr_zeroItEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeES4_:
  118|  69.9k|    countr_zero(T x) noexcept {
  119|  69.9k|  return numeric_internal::CountTrailingZeroes(x);
  120|  69.9k|}
_ZN4absl12lts_202401168popcountIjEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeES4_:
  133|     95|    popcount(T x) noexcept {
  134|     95|  return numeric_internal::Popcount(x);
  135|     95|}

_ZN4absl12lts_202401167uint128mLES1_:
  628|  5.36k|inline uint128& uint128::operator*=(uint128 other) {
  629|  5.36k|  *this = *this * other;
  630|  5.36k|  return *this;
  631|  5.36k|}
_ZN4absl12lts_2024011612Uint128Low64ENS0_7uint128E:
  643|  5.36k|constexpr uint64_t Uint128Low64(uint128 v) { return v.lo_; }
_ZN4absl12lts_2024011613Uint128High64ENS0_7uint128E:
  645|  5.36k|constexpr uint64_t Uint128High64(uint128 v) { return v.hi_; }
_ZNK4absl12lts_202401167uint128cvoEv:
  776|  10.7k|constexpr uint128::operator unsigned __int128() const {
  777|  10.7k|  return (static_cast<unsigned __int128>(hi_) << 64) + lo_;
  778|  10.7k|}
_ZN4absl12lts_20240116mlENS0_7uint128ES1_:
  982|  5.36k|inline uint128 operator*(uint128 lhs, uint128 rhs) {
  983|  5.36k|#if defined(ABSL_HAVE_INTRINSIC_INT128)
  984|       |  // TODO(strel) Remove once alignment issues are resolved and unsigned __int128
  985|       |  // can be used for uint128 storage.
  986|  5.36k|  return static_cast<unsigned __int128>(lhs) *
  987|  5.36k|         static_cast<unsigned __int128>(rhs);
  988|       |#elif defined(_MSC_VER) && defined(_M_X64) && !defined(_M_ARM64EC)
  989|       |  uint64_t carry;
  990|       |  uint64_t low = _umul128(Uint128Low64(lhs), Uint128Low64(rhs), &carry);
  991|       |  return MakeUint128(Uint128Low64(lhs) * Uint128High64(rhs) +
  992|       |                         Uint128High64(lhs) * Uint128Low64(rhs) + carry,
  993|       |                     low);
  994|       |#else   // ABSL_HAVE_INTRINSIC128
  995|       |  uint64_t a32 = Uint128Low64(lhs) >> 32;
  996|       |  uint64_t a00 = Uint128Low64(lhs) & 0xffffffff;
  997|       |  uint64_t b32 = Uint128Low64(rhs) >> 32;
  998|       |  uint64_t b00 = Uint128Low64(rhs) & 0xffffffff;
  999|       |  uint128 result =
 1000|       |      MakeUint128(Uint128High64(lhs) * Uint128Low64(rhs) +
 1001|       |                      Uint128Low64(lhs) * Uint128High64(rhs) + a32 * b32,
 1002|       |                  a00 * b00);
 1003|       |  result += uint128(a32 * b00) << 32;
 1004|       |  result += uint128(a00 * b32) << 32;
 1005|       |  return result;
 1006|       |#endif  // ABSL_HAVE_INTRINSIC128
 1007|  5.36k|}
_ZN4absl12lts_202401167uint128C2Em:
  665|  10.7k|constexpr uint128::uint128(unsigned long v) : lo_{v}, hi_{0} {}
_ZN4absl12lts_202401167uint128C2Eo:
  674|  5.36k|    : lo_{static_cast<uint64_t>(v & ~uint64_t{0})},
  675|  5.36k|      hi_{static_cast<uint64_t>(v >> 64)} {}

_ZN4absl12lts_2024011616numeric_internal10Popcount32Ej:
   96|     95|Popcount32(uint32_t x) noexcept {
   97|     95|#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_popcount)
   98|     95|  static_assert(sizeof(unsigned int) == sizeof(x),
   99|     95|                "__builtin_popcount does not take 32-bit arg");
  100|     95|  return __builtin_popcount(x);
  101|       |#else
  102|       |  x -= ((x >> 1) & 0x55555555);
  103|       |  x = ((x >> 2) & 0x33333333) + (x & 0x33333333);
  104|       |  return static_cast<int>((((x + (x >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24);
  105|       |#endif
  106|     95|}
_ZN4absl12lts_2024011616numeric_internal20CountLeadingZeroes64Em:
  180|  1.70k|CountLeadingZeroes64(uint64_t x) {
  181|  1.70k|#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_clzll)
  182|       |  // Use __builtin_clzll, which uses the following instructions:
  183|       |  //  x86: bsr, lzcnt
  184|       |  //  ARM64: clz
  185|       |  //  PPC: cntlzd
  186|  1.70k|  static_assert(sizeof(unsigned long long) == sizeof(x),  // NOLINT(runtime/int)
  187|  1.70k|                "__builtin_clzll does not take 64-bit arg");
  188|       |
  189|       |  // Handle 0 as a special case because __builtin_clzll(0) is undefined.
  190|  1.70k|  return x == 0 ? 64 : __builtin_clzll(x);
  ------------------
  |  Branch (190:10): [True: 0, False: 1.70k]
  ------------------
  191|       |#elif defined(_MSC_VER) && !defined(__clang__) && \
  192|       |    (defined(_M_X64) || defined(_M_ARM64))
  193|       |  // MSVC does not have __buitin_clzll. Use _BitScanReverse64.
  194|       |  unsigned long result = 0;  // NOLINT(runtime/int)
  195|       |  if (_BitScanReverse64(&result, x)) {
  196|       |    return 63 - result;
  197|       |  }
  198|       |  return 64;
  199|       |#elif defined(_MSC_VER) && !defined(__clang__)
  200|       |  // MSVC does not have __buitin_clzll. Compose two calls to _BitScanReverse
  201|       |  unsigned long result = 0;  // NOLINT(runtime/int)
  202|       |  if ((x >> 32) &&
  203|       |      _BitScanReverse(&result, static_cast<unsigned long>(x >> 32))) {
  204|       |    return 31 - result;
  205|       |  }
  206|       |  if (_BitScanReverse(&result, static_cast<unsigned long>(x))) {
  207|       |    return 63 - result;
  208|       |  }
  209|       |  return 64;
  210|       |#else
  211|       |  int zeroes = 60;
  212|       |  if (x >> 32) {
  213|       |    zeroes -= 32;
  214|       |    x >>= 32;
  215|       |  }
  216|       |  if (x >> 16) {
  217|       |    zeroes -= 16;
  218|       |    x >>= 16;
  219|       |  }
  220|       |  if (x >> 8) {
  221|       |    zeroes -= 8;
  222|       |    x >>= 8;
  223|       |  }
  224|       |  if (x >> 4) {
  225|       |    zeroes -= 4;
  226|       |    x >>= 4;
  227|       |  }
  228|       |  return "\4\3\2\2\1\1\1\1\0\0\0\0\0\0\0"[x] + zeroes;
  229|       |#endif
  230|  1.70k|}
_ZN4absl12lts_2024011616numeric_internal28CountTrailingZeroesNonzero64Em:
  273|    486|CountTrailingZeroesNonzero64(uint64_t x) {
  274|    486|#if ABSL_NUMERIC_INTERNAL_HAVE_BUILTIN_OR_GCC(__builtin_ctzll)
  275|    486|  static_assert(sizeof(unsigned long long) == sizeof(x),  // NOLINT(runtime/int)
  276|    486|                "__builtin_ctzll does not take 64-bit arg");
  277|    486|  return __builtin_ctzll(x);
  278|       |#elif defined(_MSC_VER) && !defined(__clang__) && \
  279|       |    (defined(_M_X64) || defined(_M_ARM64))
  280|       |  unsigned long result = 0;  // NOLINT(runtime/int)
  281|       |  _BitScanForward64(&result, x);
  282|       |  return result;
  283|       |#elif defined(_MSC_VER) && !defined(__clang__)
  284|       |  unsigned long result = 0;  // NOLINT(runtime/int)
  285|       |  if (static_cast<uint32_t>(x) == 0) {
  286|       |    _BitScanForward(&result, static_cast<unsigned long>(x >> 32));
  287|       |    return result + 32;
  288|       |  }
  289|       |  _BitScanForward(&result, static_cast<unsigned long>(x));
  290|       |  return result;
  291|       |#else
  292|       |  int c = 63;
  293|       |  x &= ~x + 1;
  294|       |  if (x & 0x00000000FFFFFFFF) c -= 32;
  295|       |  if (x & 0x0000FFFF0000FFFF) c -= 16;
  296|       |  if (x & 0x00FF00FF00FF00FF) c -= 8;
  297|       |  if (x & 0x0F0F0F0F0F0F0F0F) c -= 4;
  298|       |  if (x & 0x3333333333333333) c -= 2;
  299|       |  if (x & 0x5555555555555555) c -= 1;
  300|       |  return c;
  301|       |#endif
  302|    486|}
_ZN4absl12lts_2024011616numeric_internal28CountTrailingZeroesNonzero16Et:
  305|  69.9k|CountTrailingZeroesNonzero16(uint16_t x) {
  306|  69.9k|#if ABSL_HAVE_BUILTIN(__builtin_ctzs)
  307|  69.9k|  static_assert(sizeof(unsigned short) == sizeof(x),  // NOLINT(runtime/int)
  308|  69.9k|                "__builtin_ctzs does not take 16-bit arg");
  309|  69.9k|  return __builtin_ctzs(x);
  310|       |#else
  311|       |  return CountTrailingZeroesNonzero32(x);
  312|       |#endif
  313|  69.9k|}
_ZN4absl12lts_2024011616numeric_internal18CountLeadingZeroesImEEiT_:
  234|  1.70k|CountLeadingZeroes(T x) {
  235|  1.70k|  static_assert(std::is_unsigned<T>::value, "T must be unsigned");
  236|  1.70k|  static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
  237|  1.70k|                "T must have a power-of-2 size");
  238|  1.70k|  static_assert(sizeof(T) <= sizeof(uint64_t), "T too large");
  239|  1.70k|  return sizeof(T) <= sizeof(uint16_t)
  ------------------
  |  Branch (239:10): [Folded, False: 1.70k]
  ------------------
  240|  1.70k|             ? CountLeadingZeroes16(static_cast<uint16_t>(x)) -
  241|      0|                   (std::numeric_limits<uint16_t>::digits -
  242|      0|                    std::numeric_limits<T>::digits)
  243|  1.70k|             : (sizeof(T) <= sizeof(uint32_t)
  ------------------
  |  Branch (243:17): [Folded, False: 1.70k]
  ------------------
  244|  1.70k|                    ? CountLeadingZeroes32(static_cast<uint32_t>(x)) -
  245|      0|                          (std::numeric_limits<uint32_t>::digits -
  246|      0|                           std::numeric_limits<T>::digits)
  247|  1.70k|                    : CountLeadingZeroes64(x));
  248|  1.70k|}
_ZN4absl12lts_2024011616numeric_internal19CountTrailingZeroesImEEiT_:
  317|    486|CountTrailingZeroes(T x) noexcept {
  318|    486|  static_assert(std::is_unsigned<T>::value, "T must be unsigned");
  319|    486|  static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
  320|    486|                "T must have a power-of-2 size");
  321|    486|  static_assert(sizeof(T) <= sizeof(uint64_t), "T too large");
  322|    486|  return x == 0 ? std::numeric_limits<T>::digits
  ------------------
  |  Branch (322:10): [True: 0, False: 486]
  ------------------
  323|    486|                : (sizeof(T) <= sizeof(uint16_t)
  ------------------
  |  Branch (323:20): [Folded, False: 486]
  ------------------
  324|    486|                       ? CountTrailingZeroesNonzero16(static_cast<uint16_t>(x))
  325|    486|                       : (sizeof(T) <= sizeof(uint32_t)
  ------------------
  |  Branch (325:27): [Folded, False: 486]
  ------------------
  326|    486|                              ? CountTrailingZeroesNonzero32(
  327|      0|                                    static_cast<uint32_t>(x))
  328|    486|                              : CountTrailingZeroesNonzero64(x)));
  329|    486|}
_ZN4absl12lts_2024011616numeric_internal11RotateRightImEET_S3_i:
   75|  3.56k|    T x, int s) noexcept {
   76|  3.56k|  static_assert(std::is_unsigned<T>::value, "T must be unsigned");
   77|  3.56k|  static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
   78|  3.56k|                "T must have a power-of-2 size");
   79|       |
   80|  3.56k|  return static_cast<T>(x >> (s & (std::numeric_limits<T>::digits - 1))) |
   81|  3.56k|         static_cast<T>(x << ((-s) & (std::numeric_limits<T>::digits - 1)));
   82|  3.56k|}
_ZN4absl12lts_2024011616numeric_internal19CountTrailingZeroesItEEiT_:
  317|  69.9k|CountTrailingZeroes(T x) noexcept {
  318|  69.9k|  static_assert(std::is_unsigned<T>::value, "T must be unsigned");
  319|  69.9k|  static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
  320|  69.9k|                "T must have a power-of-2 size");
  321|  69.9k|  static_assert(sizeof(T) <= sizeof(uint64_t), "T too large");
  322|  69.9k|  return x == 0 ? std::numeric_limits<T>::digits
  ------------------
  |  Branch (322:10): [True: 0, False: 69.9k]
  ------------------
  323|  69.9k|                : (sizeof(T) <= sizeof(uint16_t)
  ------------------
  |  Branch (323:20): [True: 69.9k, Folded]
  ------------------
  324|  69.9k|                       ? CountTrailingZeroesNonzero16(static_cast<uint16_t>(x))
  325|  69.9k|                       : (sizeof(T) <= sizeof(uint32_t)
  ------------------
  |  Branch (325:27): [True: 0, Folded]
  ------------------
  326|      0|                              ? CountTrailingZeroesNonzero32(
  327|      0|                                    static_cast<uint32_t>(x))
  328|      0|                              : CountTrailingZeroesNonzero64(x)));
  329|  69.9k|}
_ZN4absl12lts_2024011616numeric_internal8PopcountIjEEiT_:
  124|     95|Popcount(T x) noexcept {
  125|     95|  static_assert(std::is_unsigned<T>::value, "T must be unsigned");
  126|     95|  static_assert(IsPowerOf2(std::numeric_limits<T>::digits),
  127|     95|                "T must have a power-of-2 size");
  128|     95|  static_assert(sizeof(x) <= sizeof(uint64_t), "T is too large");
  129|     95|  return sizeof(x) <= sizeof(uint32_t) ? Popcount32(x) : Popcount64(x);
  ------------------
  |  Branch (129:10): [True: 95, Folded]
  ------------------
  130|     95|}

_ZN4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf15FeatureResolverEED2Ev:
  229|      4|  ~StatusOrData() {
  230|      4|    if (ok()) {
  ------------------
  |  Branch (230:9): [True: 4, False: 0]
  ------------------
  231|      4|      status_.~Status();
  232|      4|      data_.~T();
  233|      4|    } else {
  234|      0|      status_.~Status();
  235|      0|    }
  236|      4|  }
_ZNK4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf15FeatureResolverEE2okEv:
  255|      4|  bool ok() const { return status_.ok(); }
_ZNK4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf10FeatureSetEE8EnsureOkEv:
  280|    210|  void EnsureOk() const {
  281|    210|    if (ABSL_PREDICT_FALSE(!ok())) Helper::Crash(status_);
  ------------------
  |  |  178|    210|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 210]
  |  |  |  Branch (178:49): [Folded, False: 210]
  |  |  |  Branch (178:58): [True: 0, False: 210]
  |  |  ------------------
  ------------------
  282|    210|  }
_ZNK4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf10FeatureSetEE2okEv:
  255|    420|  bool ok() const { return status_.ok(); }
_ZN4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf10FeatureSetEED2Ev:
  229|    210|  ~StatusOrData() {
  230|    210|    if (ok()) {
  ------------------
  |  Branch (230:9): [True: 210, False: 0]
  ------------------
  231|    210|      status_.~Status();
  232|    210|      data_.~T();
  233|    210|    } else {
  234|      0|      status_.~Status();
  235|      0|    }
  236|    210|  }
_ZN4absl12lts_2024011617internal_statusor12PlacementNewINS0_6StatusEJEEEvPvDpOT0_:
  138|    214|void PlacementNew(absl::Nonnull<void*> p, Args&&... args) {
  139|    214|  new (p) T(std::forward<Args>(args)...);
  140|    214|}
_ZN4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf15FeatureResolverEEC2IJS5_EEENSt3__110in_place_tEDpOT_:
  193|      4|      : data_(std::forward<Args>(args)...) {
  194|      4|    MakeStatus();
  195|      4|  }
_ZN4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf15FeatureResolverEE10MakeStatusIJEEEvDpOT_:
  298|      4|  void MakeStatus(Args&&... args) {
  299|      4|    internal_statusor::PlacementNew<Status>(&status_,
  300|      4|                                            std::forward<Args>(args)...);
  301|      4|  }
_ZN4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf10FeatureSetEEC2IJS5_EEENSt3__110in_place_tEDpOT_:
  193|    210|      : data_(std::forward<Args>(args)...) {
  194|    210|    MakeStatus();
  195|    210|  }
_ZN4absl12lts_2024011617internal_statusor12StatusOrDataIN6google8protobuf10FeatureSetEE10MakeStatusIJEEEvDpOT_:
  298|    210|  void MakeStatus(Args&&... args) {
  299|    210|    internal_statusor::PlacementNew<Status>(&status_,
  300|    210|                                            std::forward<Args>(args)...);
  301|    210|  }

_ZN4absl12lts_202401168OkStatusEv:
  924|    226|inline Status OkStatus() { return Status(); }
_ZN4absl12lts_202401166StatusC2Ev:
  772|    440|inline Status::Status() : Status(absl::StatusCode::kOk) {}
_ZN4absl12lts_202401166StatusC2ENS0_10StatusCodeE:
  774|    440|inline Status::Status(absl::StatusCode code) : Status(CodeToInlinedRep(code)) {}
_ZN4absl12lts_202401166Status16CodeToInlinedRepENS0_10StatusCodeE:
  892|  1.30k|constexpr uintptr_t Status::CodeToInlinedRep(absl::StatusCode code) {
  893|  1.30k|  return (static_cast<uintptr_t>(code) << 2) + 1;
  894|  1.30k|}
_ZN4absl12lts_202401166StatusC2Em:
  619|    440|  explicit Status(uintptr_t rep) : rep_(rep) {}
_ZNK4absl12lts_202401166Status2okEv:
  816|    868|inline bool Status::ok() const {
  817|    868|  return rep_ == CodeToInlinedRep(absl::StatusCode::kOk);
  818|    868|}
_ZN4absl12lts_202401166StatusD2Ev:
  814|    440|inline Status::~Status() { Unref(rep_); }
_ZN4absl12lts_202401166Status5UnrefEm:
  920|    440|inline void Status::Unref(uintptr_t rep) {
  921|    440|  if (!IsInlined(rep)) RepToPointer(rep)->Unref();
  ------------------
  |  Branch (921:7): [True: 0, False: 440]
  ------------------
  922|    440|}
_ZN4absl12lts_202401166Status9IsInlinedEm:
  888|    440|constexpr bool Status::IsInlined(uintptr_t rep) { return (rep & 1) != 0; }

_ZNK4absl12lts_202401168StatusOrIN6google8protobuf10FeatureSetEE2okEv:
  494|    210|  ABSL_MUST_USE_RESULT bool ok() const { return this->status_.ok(); }
_ZNO4absl12lts_202401168StatusOrIN6google8protobuf10FeatureSetEEdeEv:
  787|    210|T&& StatusOr<T>::operator*() && {
  788|    210|  this->EnsureOk();
  789|    210|  return std::move(this->data_);
  790|    210|}
_ZNK4absl12lts_202401168StatusOrIN6google8protobuf15FeatureResolverEE2okEv:
  494|      8|  ABSL_MUST_USE_RESULT bool ok() const { return this->status_.ok(); }
_ZNO4absl12lts_202401168StatusOrIN6google8protobuf15FeatureResolverEE5valueEv:
  761|      4|T&& StatusOr<T>::value() && {
  762|      4|  if (!this->ok()) {
  ------------------
  |  Branch (762:7): [True: 0, False: 4]
  ------------------
  763|      0|    internal_statusor::ThrowBadStatusOrAccess(std::move(this->status_));
  764|      0|  }
  765|      4|  return std::move(this->data_);
  766|      4|}
_ZN4absl12lts_202401168StatusOrIN6google8protobuf15FeatureResolverEEC2IS4_TnNSt3__19enable_ifIXsr4absl11conjunctionINS0_11disjunctionIJNS7_7is_sameIS4_NS0_12remove_cvrefIOT_E4typeEEENS0_8negationINS9_IJNSA_IS5_SF_EENSA_INS0_6StatusESF_EENSA_INS7_10in_place_tESF_EENS0_17internal_statusor31IsDirectInitializationAmbiguousIS4_SD_EEEEEEEEEENS7_16is_constructibleIS4_JSD_EEENS7_14is_convertibleISD_S4_EENS9_IJNSA_INSB_ISC_E4typeES4_EENS0_11conjunctionIJNSH_INSV_ISD_SJ_EEEENSH_INSN_31HasConversionOperatorToStatusOrIS4_SD_vEEEEEEEEEEEE5valueEiE4typeELi0EEESD_:
  460|      4|      : StatusOr(absl::in_place, std::forward<U>(u)) {}
_ZN4absl12lts_202401168StatusOrIN6google8protobuf15FeatureResolverEEC2IJS4_EEENSt3__110in_place_tEDpOT_:
  723|      4|    : Base(absl::in_place, std::forward<Args>(args)...) {}
_ZN4absl12lts_202401168StatusOrIN6google8protobuf10FeatureSetEEC2IS4_TnNSt3__19enable_ifIXsr4absl11conjunctionINS0_11disjunctionIJNS7_7is_sameIS4_NS0_12remove_cvrefIOT_E4typeEEENS0_8negationINS9_IJNSA_IS5_SF_EENSA_INS0_6StatusESF_EENSA_INS7_10in_place_tESF_EENS0_17internal_statusor31IsDirectInitializationAmbiguousIS4_SD_EEEEEEEEEENS7_16is_constructibleIS4_JSD_EEENS7_14is_convertibleISD_S4_EENS9_IJNSA_INSB_ISC_E4typeES4_EENS0_11conjunctionIJNSH_INSV_ISD_SJ_EEEENSH_INSN_31HasConversionOperatorToStatusOrIS4_SD_vEEEEEEEEEEEE5valueEiE4typeELi0EEESD_:
  460|    210|      : StatusOr(absl::in_place, std::forward<U>(u)) {}
_ZN4absl12lts_202401168StatusOrIN6google8protobuf10FeatureSetEEC2IJS4_EEENSt3__110in_place_tEDpOT_:
  723|    210|    : Base(absl::in_place, std::forward<Args>(args)...) {}

_ZN4absl12lts_2024011615AsciiStrToLowerEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  280|     49|void AsciiStrToLower(absl::Nonnull<std::string*> s) {
  281|     49|  char* p = &(*s)[0];  // Guaranteed to be valid for empty strings
  282|     49|  return ascii_internal::AsciiStrCaseFold<false>(p, p + s->size());
  283|     49|}
ascii.cc:_ZN4absl12lts_2024011614ascii_internalL16AsciiStrCaseFoldILb0EEEvPcS3_:
  232|     49|                                       absl::Nonnull<char*> end) {
  233|       |  // The upper- and lowercase versions of ASCII characters differ by only 1 bit.
  234|       |  // When we need to flip the case, we can xor with this bit to achieve the
  235|       |  // desired result. Note that the choice of 'a' and 'A' here is arbitrary. We
  236|       |  // could have chosen 'z' and 'Z', or any other pair of characters as they all
  237|       |  // have the same single bit difference.
  238|     49|  constexpr unsigned char kAsciiCaseBitFlip = 'a' ^ 'A';
  239|       |
  240|     49|  using vec_t = size_t;
  241|       |  // TODO(b/316380338): When FDO becomes able to vectorize these,
  242|       |  // revert this manual optimization and just leave the naive loop.
  243|     49|  if (static_cast<size_t>(end - p) >= sizeof(vec_t)) {
  ------------------
  |  Branch (243:7): [True: 13, False: 36]
  ------------------
  244|     13|    p = ascii_internal::PartialAsciiStrCaseFold<ToUpper>(p, end);
  245|     13|  }
  246|    205|  while (p < end) {
  ------------------
  |  Branch (246:10): [True: 156, False: 49]
  ------------------
  247|    156|    unsigned char v = static_cast<unsigned char>(*p);
  248|    156|    v ^= AsciiInAZRange<ToUpper>(v) ? kAsciiCaseBitFlip : 0;
  ------------------
  |  Branch (248:10): [True: 20, False: 136]
  ------------------
  249|    156|    *p = static_cast<char>(v);
  250|    156|    ++p;
  251|    156|  }
  252|     49|}
ascii.cc:_ZN4absl12lts_2024011614ascii_internalL23PartialAsciiStrCaseFoldILb0EEEPcS3_S3_:
  194|     13|                                               absl::Nonnull<char*> end) {
  195|     13|  using vec_t = size_t;
  196|     13|  const size_t n = static_cast<size_t>(end - p);
  197|       |
  198|       |  // SWAR algorithm: http://0x80.pl/notesen/2016-01-06-swar-swap-case.html
  199|     13|  constexpr char ch_a = ToUpper ? 'a' : 'A', ch_z = ToUpper ? 'z' : 'Z';
  ------------------
  |  Branch (199:25): [Folded, False: 13]
  |  Branch (199:53): [Folded, False: 13]
  ------------------
  200|     13|  char* const swar_end = p + (n / sizeof(vec_t)) * sizeof(vec_t);
  201|     28|  while (p < swar_end) {
  ------------------
  |  Branch (201:10): [True: 15, False: 13]
  ------------------
  202|     15|    vec_t v = vec_t();
  203|       |
  204|       |    // memcpy the vector, but constexpr
  205|    135|    for (size_t i = 0; i < sizeof(vec_t); ++i) {
  ------------------
  |  Branch (205:24): [True: 120, False: 15]
  ------------------
  206|    120|      v |= static_cast<vec_t>(static_cast<unsigned char>(p[i]))
  207|    120|           << (i * CHAR_BIT);
  208|    120|    }
  209|       |
  210|     15|    constexpr unsigned int msb = 1u << (CHAR_BIT - 1);
  211|     15|    const vec_t v_msb = v & BroadcastByte<vec_t>(msb);
  212|     15|    const vec_t v_nonascii_mask = (v_msb << 1) - (v_msb >> (CHAR_BIT - 1));
  213|     15|    const vec_t v_nonascii = v & v_nonascii_mask;
  214|     15|    const vec_t v_ascii = v & ~v_nonascii_mask;
  215|     15|    const vec_t a = v_ascii + BroadcastByte<vec_t>(msb - ch_a - 0),
  216|     15|                z = v_ascii + BroadcastByte<vec_t>(msb - ch_z - 1);
  217|     15|    v = v_nonascii | (v_ascii ^ ((a ^ z) & BroadcastByte<vec_t>(msb)) >> 2);
  218|       |
  219|       |    // memcpy the vector, but constexpr
  220|    135|    for (size_t i = 0; i < sizeof(vec_t); ++i) {
  ------------------
  |  Branch (220:24): [True: 120, False: 15]
  ------------------
  221|    120|      p[i] = static_cast<char>(v >> (i * CHAR_BIT));
  222|    120|    }
  223|       |
  224|     15|    p += sizeof(v);
  225|     15|  }
  226|       |
  227|     13|  return p;
  228|     13|}
ascii.cc:_ZN4absl12lts_2024011614ascii_internalL13BroadcastByteImEET_h:
  166|     60|static constexpr T BroadcastByte(unsigned char value) {
  167|     60|  static_assert(std::is_integral<T>::value && sizeof(T) <= sizeof(uint64_t) &&
  168|     60|                    std::is_unsigned<T>::value,
  169|     60|                "only unsigned integers up to 64-bit allowed");
  170|     60|  T result = value;
  171|     60|  constexpr size_t result_bit_width = sizeof(result) * CHAR_BIT;
  172|     60|  result |= result << ((CHAR_BIT << 0) & (result_bit_width - 1));
  173|     60|  result |= result << ((CHAR_BIT << 1) & (result_bit_width - 1));
  174|       |  result |= result << ((CHAR_BIT << 2) & (result_bit_width - 1));
  175|     60|  return result;
  176|     60|}
_ZN4absl12lts_2024011614ascii_internal14AsciiInAZRangeILb0EEEbh:
  183|    156|constexpr bool AsciiInAZRange(unsigned char c) {
  184|    156|  constexpr unsigned char sub = (ToUpper ? 'a' : 'A') - SCHAR_MIN;
  ------------------
  |  Branch (184:34): [Folded, False: 156]
  ------------------
  185|    156|  constexpr signed char threshold = SCHAR_MIN + 26;  // 26 = alphabet size.
  186|       |  // Using unsigned arithmetic as overflows/underflows are well defined.
  187|    156|  unsigned char u = c - sub;
  188|       |  // Using signed cmp, as SIMD unsigned cmp isn't available in many platforms.
  189|    156|  return static_cast<signed char>(u) < threshold;
  190|    156|}

_ZN4absl12lts_2024011613ascii_tolowerEh:
  165|     96|inline char ascii_tolower(unsigned char c) {
  166|     96|  return ascii_internal::kToLower[c];
  167|     96|}
_ZN4absl12lts_2024011613ascii_toupperEh:
  183|    129|inline char ascii_toupper(unsigned char c) {
  184|    129|  return ascii_internal::kToUpper[c];
  185|    129|}

_ZN4absl12lts_2024011616strings_internal28STLStringResizeUninitializedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEvEEvPT_m:
   67|  63.7k|inline void STLStringResizeUninitialized(string_type* s, size_t new_size) {
   68|  63.7k|  ResizeUninitializedTraits<string_type>::Resize(s, new_size);
   69|  63.7k|}
_ZN4absl12lts_2024011616strings_internal25ResizeUninitializedTraitsINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEvE6ResizeEPS9_m:
   47|  63.7k|  static void Resize(string_type* s, size_t new_size) {
   48|  63.7k|    s->__resize_default_init(new_size);
   49|  63.7k|  }
_ZN4absl12lts_2024011616strings_internal37STLStringResizeUninitializedAmortizedINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEvPT_m:
  106|    229|void STLStringResizeUninitializedAmortized(string_type* s, size_t new_size) {
  107|    229|  const size_t size = s->size();
  108|    229|  if (new_size > size) {
  ------------------
  |  Branch (108:7): [True: 229, False: 0]
  ------------------
  109|    229|    AppendUninitializedTraits<string_type>::Append(s, new_size - size);
  110|    229|  } else {
  111|      0|    s->erase(new_size);
  112|      0|  }
  113|    229|}
_ZN4absl12lts_2024011616strings_internal25AppendUninitializedTraitsINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEvE6AppendEPS9_m:
   96|    234|  static void Append(string_type* s, size_t n) {
   97|    234|    s->__append_default_init(n);
   98|    234|  }

_ZN4absl12lts_2024011619str_format_internal13ConvertIntArgIcEEbT_NS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  403|     24|bool ConvertIntArg(T v, FormatConversionSpecImpl conv, FormatSinkImpl *sink) {
  404|     24|  using U = typename MakeUnsigned<T>::type;
  405|     24|  IntDigits as_digits;
  406|       |
  407|       |  // This odd casting is due to a bug in -Wswitch behavior in gcc49 which causes
  408|       |  // it to complain about a switch/case type mismatch, even though both are
  409|       |  // FormatConversionChar.  Likely this is because at this point
  410|       |  // FormatConversionChar is declared, but not defined.
  411|     24|  switch (static_cast<uint8_t>(conv.conversion_char())) {
  412|     24|    case static_cast<uint8_t>(FormatConversionCharInternal::c):
  ------------------
  |  Branch (412:5): [True: 24, False: 0]
  ------------------
  413|     24|      return (std::is_same<T, wchar_t>::value ||
  ------------------
  |  Branch (413:15): [Folded, False: 24]
  ------------------
  414|     24|              (conv.length_mod() == LengthMod::l))
  ------------------
  |  Branch (414:15): [True: 0, False: 24]
  ------------------
  415|     24|                 ? ConvertWCharTImpl(static_cast<wchar_t>(v), conv, sink)
  416|     24|                 : ConvertCharImpl(static_cast<char>(v), conv, sink);
  417|       |
  418|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::o):
  ------------------
  |  Branch (418:5): [True: 0, False: 24]
  ------------------
  419|      0|      as_digits.PrintAsOct(static_cast<U>(v));
  420|      0|      break;
  421|       |
  422|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::x):
  ------------------
  |  Branch (422:5): [True: 0, False: 24]
  ------------------
  423|      0|      as_digits.PrintAsHexLower(static_cast<U>(v));
  424|      0|      break;
  425|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::X):
  ------------------
  |  Branch (425:5): [True: 0, False: 24]
  ------------------
  426|      0|      as_digits.PrintAsHexUpper(static_cast<U>(v));
  427|      0|      break;
  428|       |
  429|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::u):
  ------------------
  |  Branch (429:5): [True: 0, False: 24]
  ------------------
  430|      0|      as_digits.PrintAsDec(static_cast<U>(v));
  431|      0|      break;
  432|       |
  433|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::d):
  ------------------
  |  Branch (433:5): [True: 0, False: 24]
  ------------------
  434|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::i):
  ------------------
  |  Branch (434:5): [True: 0, False: 24]
  ------------------
  435|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::v):
  ------------------
  |  Branch (435:5): [True: 0, False: 24]
  ------------------
  436|      0|      as_digits.PrintAsDec(v);
  437|      0|      break;
  438|       |
  439|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::a):
  ------------------
  |  Branch (439:5): [True: 0, False: 24]
  ------------------
  440|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::e):
  ------------------
  |  Branch (440:5): [True: 0, False: 24]
  ------------------
  441|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::f):
  ------------------
  |  Branch (441:5): [True: 0, False: 24]
  ------------------
  442|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::g):
  ------------------
  |  Branch (442:5): [True: 0, False: 24]
  ------------------
  443|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::A):
  ------------------
  |  Branch (443:5): [True: 0, False: 24]
  ------------------
  444|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::E):
  ------------------
  |  Branch (444:5): [True: 0, False: 24]
  ------------------
  445|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::F):
  ------------------
  |  Branch (445:5): [True: 0, False: 24]
  ------------------
  446|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::G):
  ------------------
  |  Branch (446:5): [True: 0, False: 24]
  ------------------
  447|      0|      return ConvertFloatImpl(static_cast<double>(v), conv, sink);
  448|       |
  449|      0|    default:
  ------------------
  |  Branch (449:5): [True: 0, False: 24]
  ------------------
  450|      0|      ABSL_ASSUME(false);
  ------------------
  |  |  259|      0|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
  451|     24|  }
  452|       |
  453|      0|  if (conv.is_basic()) {
  ------------------
  |  Branch (453:7): [True: 0, False: 0]
  ------------------
  454|      0|    sink->Append(as_digits.with_neg_and_zero());
  455|      0|    return true;
  456|      0|  }
  457|      0|  return ConvertIntImplInnerSlow(as_digits, conv, sink);
  458|      0|}
_ZN4absl12lts_2024011619str_format_internal13ConvertIntArgIiEEbT_NS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  403|     72|bool ConvertIntArg(T v, FormatConversionSpecImpl conv, FormatSinkImpl *sink) {
  404|     72|  using U = typename MakeUnsigned<T>::type;
  405|     72|  IntDigits as_digits;
  406|       |
  407|       |  // This odd casting is due to a bug in -Wswitch behavior in gcc49 which causes
  408|       |  // it to complain about a switch/case type mismatch, even though both are
  409|       |  // FormatConversionChar.  Likely this is because at this point
  410|       |  // FormatConversionChar is declared, but not defined.
  411|     72|  switch (static_cast<uint8_t>(conv.conversion_char())) {
  412|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::c):
  ------------------
  |  Branch (412:5): [True: 0, False: 72]
  ------------------
  413|      0|      return (std::is_same<T, wchar_t>::value ||
  ------------------
  |  Branch (413:15): [Folded, False: 0]
  ------------------
  414|      0|              (conv.length_mod() == LengthMod::l))
  ------------------
  |  Branch (414:15): [True: 0, False: 0]
  ------------------
  415|      0|                 ? ConvertWCharTImpl(static_cast<wchar_t>(v), conv, sink)
  416|      0|                 : ConvertCharImpl(static_cast<char>(v), conv, sink);
  417|       |
  418|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::o):
  ------------------
  |  Branch (418:5): [True: 0, False: 72]
  ------------------
  419|      0|      as_digits.PrintAsOct(static_cast<U>(v));
  420|      0|      break;
  421|       |
  422|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::x):
  ------------------
  |  Branch (422:5): [True: 0, False: 72]
  ------------------
  423|      0|      as_digits.PrintAsHexLower(static_cast<U>(v));
  424|      0|      break;
  425|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::X):
  ------------------
  |  Branch (425:5): [True: 0, False: 72]
  ------------------
  426|      0|      as_digits.PrintAsHexUpper(static_cast<U>(v));
  427|      0|      break;
  428|       |
  429|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::u):
  ------------------
  |  Branch (429:5): [True: 0, False: 72]
  ------------------
  430|      0|      as_digits.PrintAsDec(static_cast<U>(v));
  431|      0|      break;
  432|       |
  433|     72|    case static_cast<uint8_t>(FormatConversionCharInternal::d):
  ------------------
  |  Branch (433:5): [True: 72, False: 0]
  ------------------
  434|     72|    case static_cast<uint8_t>(FormatConversionCharInternal::i):
  ------------------
  |  Branch (434:5): [True: 0, False: 72]
  ------------------
  435|     72|    case static_cast<uint8_t>(FormatConversionCharInternal::v):
  ------------------
  |  Branch (435:5): [True: 0, False: 72]
  ------------------
  436|     72|      as_digits.PrintAsDec(v);
  437|     72|      break;
  438|       |
  439|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::a):
  ------------------
  |  Branch (439:5): [True: 0, False: 72]
  ------------------
  440|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::e):
  ------------------
  |  Branch (440:5): [True: 0, False: 72]
  ------------------
  441|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::f):
  ------------------
  |  Branch (441:5): [True: 0, False: 72]
  ------------------
  442|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::g):
  ------------------
  |  Branch (442:5): [True: 0, False: 72]
  ------------------
  443|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::A):
  ------------------
  |  Branch (443:5): [True: 0, False: 72]
  ------------------
  444|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::E):
  ------------------
  |  Branch (444:5): [True: 0, False: 72]
  ------------------
  445|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::F):
  ------------------
  |  Branch (445:5): [True: 0, False: 72]
  ------------------
  446|      0|    case static_cast<uint8_t>(FormatConversionCharInternal::G):
  ------------------
  |  Branch (446:5): [True: 0, False: 72]
  ------------------
  447|      0|      return ConvertFloatImpl(static_cast<double>(v), conv, sink);
  448|       |
  449|      0|    default:
  ------------------
  |  Branch (449:5): [True: 0, False: 72]
  ------------------
  450|      0|      ABSL_ASSUME(false);
  ------------------
  |  |  259|      0|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
  451|     72|  }
  452|       |
  453|     72|  if (conv.is_basic()) {
  ------------------
  |  Branch (453:7): [True: 0, False: 72]
  ------------------
  454|      0|    sink->Append(as_digits.with_neg_and_zero());
  455|      0|    return true;
  456|      0|  }
  457|     72|  return ConvertIntImplInnerSlow(as_digits, conv, sink);
  458|     72|}
_ZN4absl12lts_2024011619str_format_internal17FormatConvertImplEcNS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  593|     24|                                    FormatSinkImpl *sink) {
  594|     24|  return {ConvertIntArg(v, conv, sink)};
  595|     24|}
_ZN4absl12lts_2024011619str_format_internal17FormatConvertImplEiNS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  625|     72|                                        FormatSinkImpl *sink) {
  626|     72|  return {ConvertIntArg(v, conv, sink)};
  627|     72|}
arg.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_115ConvertCharImplEcNS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  227|     24|                     FormatSinkImpl* sink) {
  228|     24|  size_t fill = 0;
  229|     24|  if (conv.width() >= 0)
  ------------------
  |  Branch (229:7): [True: 0, False: 24]
  ------------------
  230|      0|    fill = static_cast<size_t>(conv.width());
  231|     24|  ReducePadding(1, &fill);
  232|     24|  if (!conv.has_left_flag()) sink->Append(fill, ' ');
  ------------------
  |  Branch (232:7): [True: 24, False: 0]
  ------------------
  233|     24|  sink->Append(1, v);
  234|     24|  if (conv.has_left_flag()) sink->Append(fill, ' ');
  ------------------
  |  Branch (234:7): [True: 0, False: 24]
  ------------------
  235|     24|  return true;
  236|     24|}
arg.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_113ReducePaddingEmPm:
   55|     96|void ReducePadding(size_t n, size_t *capacity) {
   56|     96|  *capacity = Excess(n, *capacity);
   57|     96|}
arg.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_123ConvertIntImplInnerSlowERKNS2_9IntDigitsENS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  240|     72|                             FormatSinkImpl *sink) {
  241|       |  // Print as a sequence of Substrings:
  242|       |  //   [left_spaces][sign][base_indicator][zeroes][formatted][right_spaces]
  243|     72|  size_t fill = 0;
  244|     72|  if (conv.width() >= 0)
  ------------------
  |  Branch (244:7): [True: 72, False: 0]
  ------------------
  245|     72|    fill = static_cast<size_t>(conv.width());
  246|       |
  247|     72|  string_view formatted = as_digits.without_neg_or_zero();
  248|     72|  ReducePadding(formatted, &fill);
  249|       |
  250|     72|  string_view sign = SignColumn(as_digits.is_negative(), conv);
  251|     72|  ReducePadding(sign, &fill);
  252|       |
  253|     72|  string_view base_indicator = BaseIndicator(as_digits, conv);
  254|     72|  ReducePadding(base_indicator, &fill);
  255|       |
  256|     72|  bool precision_specified = conv.precision() >= 0;
  257|     72|  size_t precision =
  258|     72|      precision_specified ? static_cast<size_t>(conv.precision()) : size_t{1};
  ------------------
  |  Branch (258:7): [True: 0, False: 72]
  ------------------
  259|       |
  260|     72|  if (conv.has_alt_flag() &&
  ------------------
  |  Branch (260:7): [True: 0, False: 72]
  ------------------
  261|      0|      conv.conversion_char() == FormatConversionCharInternal::o) {
  ------------------
  |  Branch (261:7): [True: 0, False: 0]
  ------------------
  262|       |    // From POSIX description of the '#' (alt) flag:
  263|       |    //   "For o conversion, it increases the precision (if necessary) to
  264|       |    //   force the first digit of the result to be zero."
  265|      0|    if (formatted.empty() || *formatted.begin() != '0') {
  ------------------
  |  Branch (265:9): [True: 0, False: 0]
  |  Branch (265:30): [True: 0, False: 0]
  ------------------
  266|      0|      size_t needed = formatted.size() + 1;
  267|      0|      precision = std::max(precision, needed);
  268|      0|    }
  269|      0|  }
  270|       |
  271|     72|  size_t num_zeroes = Excess(formatted.size(), precision);
  272|     72|  ReducePadding(num_zeroes, &fill);
  273|       |
  274|     72|  size_t num_left_spaces = !conv.has_left_flag() ? fill : 0;
  ------------------
  |  Branch (274:28): [True: 72, False: 0]
  ------------------
  275|     72|  size_t num_right_spaces = conv.has_left_flag() ? fill : 0;
  ------------------
  |  Branch (275:29): [True: 0, False: 72]
  ------------------
  276|       |
  277|       |  // From POSIX description of the '0' (zero) flag:
  278|       |  //   "For d, i, o, u, x, and X conversion specifiers, if a precision
  279|       |  //   is specified, the '0' flag is ignored."
  280|     72|  if (!precision_specified && conv.has_zero_flag()) {
  ------------------
  |  Branch (280:7): [True: 72, False: 0]
  |  Branch (280:31): [True: 48, False: 24]
  ------------------
  281|     48|    num_zeroes += num_left_spaces;
  282|     48|    num_left_spaces = 0;
  283|     48|  }
  284|       |
  285|     72|  sink->Append(num_left_spaces, ' ');
  286|     72|  sink->Append(sign);
  287|     72|  sink->Append(base_indicator);
  288|     72|  sink->Append(num_zeroes, '0');
  289|     72|  sink->Append(formatted);
  290|     72|  sink->Append(num_right_spaces, ' ');
  291|     72|  return true;
  292|     72|}
arg.cc:_ZNK4absl12lts_2024011619str_format_internal12_GLOBAL__N_19IntDigits19without_neg_or_zeroEv:
  180|     72|  string_view without_neg_or_zero() const {
  181|     72|    static_assert('-' < '0', "The check below verifies both.");
  182|     72|    size_t advance = start_[0] <= '0' ? 1 : 0;
  ------------------
  |  Branch (182:22): [True: 0, False: 72]
  ------------------
  183|     72|    return {start_ + advance, size_ - advance};
  184|     72|  }
arg.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_113ReducePaddingENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEPm:
   50|    216|void ReducePadding(string_view s, size_t *capacity) {
   51|    216|  *capacity = Excess(s.size(), *capacity);
   52|    216|}
arg.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_110SignColumnEbNS1_24FormatConversionSpecImplE:
  215|     72|string_view SignColumn(bool neg, const FormatConversionSpecImpl conv) {
  216|     72|  if (conv.conversion_char() == FormatConversionCharInternal::d ||
  ------------------
  |  Branch (216:7): [True: 72, False: 0]
  ------------------
  217|     72|      conv.conversion_char() == FormatConversionCharInternal::i) {
  ------------------
  |  Branch (217:7): [True: 0, False: 0]
  ------------------
  218|     72|    if (neg) return "-";
  ------------------
  |  Branch (218:9): [True: 0, False: 72]
  ------------------
  219|     72|    if (conv.has_show_pos_flag()) return "+";
  ------------------
  |  Branch (219:9): [True: 0, False: 72]
  ------------------
  220|     72|    if (conv.has_sign_col_flag()) return " ";
  ------------------
  |  Branch (220:9): [True: 0, False: 72]
  ------------------
  221|     72|  }
  222|     72|  return {};
  223|     72|}
arg.cc:_ZNK4absl12lts_2024011619str_format_internal12_GLOBAL__N_19IntDigits11is_negativeEv:
  186|     72|  bool is_negative() const { return start_[0] == '-'; }
arg.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_113BaseIndicatorERKNS2_9IntDigitsENS1_24FormatConversionSpecImplE:
  198|     72|                          const FormatConversionSpecImpl conv) {
  199|       |  // always show 0x for %p.
  200|     72|  bool alt = conv.has_alt_flag() ||
  ------------------
  |  Branch (200:14): [True: 0, False: 72]
  ------------------
  201|     72|             conv.conversion_char() == FormatConversionCharInternal::p;
  ------------------
  |  Branch (201:14): [True: 0, False: 72]
  ------------------
  202|     72|  bool hex = (conv.conversion_char() == FormatConversionCharInternal::x ||
  ------------------
  |  Branch (202:15): [True: 0, False: 72]
  ------------------
  203|     72|              conv.conversion_char() == FormatConversionCharInternal::X ||
  ------------------
  |  Branch (203:15): [True: 0, False: 72]
  ------------------
  204|     72|              conv.conversion_char() == FormatConversionCharInternal::p);
  ------------------
  |  Branch (204:15): [True: 0, False: 72]
  ------------------
  205|       |  // From the POSIX description of '#' flag:
  206|       |  //   "For x or X conversion specifiers, a non-zero result shall have
  207|       |  //   0x (or 0X) prefixed to it."
  208|     72|  if (alt && hex && !as_digits.without_neg_or_zero().empty()) {
  ------------------
  |  Branch (208:7): [True: 0, False: 72]
  |  Branch (208:7): [True: 0, False: 72]
  |  Branch (208:14): [True: 0, False: 0]
  |  Branch (208:21): [True: 0, False: 0]
  ------------------
  209|      0|    return conv.conversion_char() == FormatConversionCharInternal::X ? "0X"
  ------------------
  |  Branch (209:12): [True: 0, False: 0]
  ------------------
  210|      0|                                                                     : "0x";
  211|      0|  }
  212|     72|  return {};
  213|     72|}
arg.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_19IntDigits10PrintAsDecIiEEvT_:
   99|     72|  void PrintAsDec(T v) {
  100|     72|    static_assert(std::is_integral<T>::value, "");
  101|     72|    start_ = storage_;
  102|     72|    size_ = static_cast<size_t>(numbers_internal::FastIntToBuffer(v, storage_) -
  103|     72|                                storage_);
  104|     72|  }

_ZN4absl12lts_2024011619str_format_internal14ExtractCharSetILNS0_23FormatConversionCharSetE655355EEES3_NS1_16ArgConvertResultIXT_EEE:
  211|     72|constexpr FormatConversionCharSet ExtractCharSet(ArgConvertResult<C>) {
  212|     72|  return C;
  213|     72|}
_ZN4absl12lts_2024011619str_format_internal13FormatArgImplC2IiEERKT_:
  505|     72|  explicit FormatArgImpl(const T& value) {
  506|     72|    using D = typename DecayType<T>::type;
  507|     72|    static_assert(
  508|     72|        std::is_same<D, const T&>::value || storage_policy<D>::value == ByValue,
  509|     72|        "Decayed types must be stored by value");
  510|     72|    Init(static_cast<D>(value));
  511|     72|  }
_ZN4absl12lts_2024011619str_format_internal13FormatArgImpl4InitIiEEvRKT_:
  558|     72|  void Init(const T& value) {
  559|     72|    data_ = Manager<T>::SetValue(value);
  560|     72|    dispatcher_ = &Dispatch<T>;
  561|     72|  }
_ZN4absl12lts_2024011619str_format_internal13FormatArgImpl7ManagerIiLNS2_13StoragePolicyE2EE8SetValueERKi:
  544|     72|    static Data SetValue(const T& value) {
  545|     72|      Data data;
  546|     72|      memcpy(data.buf, &value, sizeof(value));
  547|     72|      return data;
  548|     72|    }
_ZN4absl12lts_2024011619str_format_internal13FormatArgImpl8DispatchIiEEbNS2_4DataENS1_24FormatConversionSpecImplEPv:
  599|     72|  static bool Dispatch(Data arg, FormatConversionSpecImpl spec, void* out) {
  600|       |    // A `none` conv indicates that we want the `int` conversion.
  601|     72|    if (ABSL_PREDICT_FALSE(spec.conversion_char() ==
  ------------------
  |  |  178|     72|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 72]
  |  |  |  Branch (178:49): [Folded, False: 72]
  |  |  |  Branch (178:58): [True: 0, False: 72]
  |  |  ------------------
  ------------------
  602|     72|                           FormatConversionCharInternal::kNone)) {
  603|      0|      return ToInt<T>(arg, static_cast<int*>(out), std::is_integral<T>(),
  604|      0|                      std::is_enum<T>());
  605|      0|    }
  606|     72|    if (ABSL_PREDICT_FALSE(!Contains(ArgumentToConv<T>(),
  ------------------
  |  |  178|     72|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 72]
  |  |  |  Branch (178:49): [Folded, False: 72]
  |  |  |  Branch (178:58): [True: 0, False: 72]
  |  |  ------------------
  ------------------
  607|     72|                                     spec.conversion_char()))) {
  608|      0|      return false;
  609|      0|    }
  610|     72|    return str_format_internal::FormatConvertImpl(
  611|     72|               Manager<T>::Value(arg), spec,
  612|     72|               static_cast<FormatSinkImpl*>(out))
  613|     72|        .value;
  614|     72|  }
_ZN4absl12lts_2024011619str_format_internal14ArgumentToConvIiEENS0_23FormatConversionCharSetEv:
  430|     72|constexpr FormatConversionCharSet ArgumentToConv() {
  431|     72|  using ConvResult = decltype(str_format_internal::FormatConvertImpl(
  432|     72|      std::declval<const Arg&>(),
  433|     72|      std::declval<const FormatConversionSpecImpl&>(),
  434|     72|      std::declval<FormatSinkImpl*>()));
  435|     72|  return absl::str_format_internal::ExtractCharSet(ConvResult{});
  436|     72|}
_ZN4absl12lts_2024011619str_format_internal13FormatArgImpl7ManagerIiLNS2_13StoragePolicyE2EE5ValueENS2_4DataE:
  550|     72|    static T Value(Data arg) {
  551|     72|      T value;
  552|     72|      memcpy(&value, arg.buf, sizeof(T));
  553|     72|      return value;
  554|     72|    }
_ZN4absl12lts_2024011619str_format_internal13FormatArgImplC2IcEERKT_:
  505|     24|  explicit FormatArgImpl(const T& value) {
  506|     24|    using D = typename DecayType<T>::type;
  507|     24|    static_assert(
  508|     24|        std::is_same<D, const T&>::value || storage_policy<D>::value == ByValue,
  509|     24|        "Decayed types must be stored by value");
  510|     24|    Init(static_cast<D>(value));
  511|     24|  }
_ZN4absl12lts_2024011619str_format_internal13FormatArgImpl4InitIcEEvRKT_:
  558|     24|  void Init(const T& value) {
  559|     24|    data_ = Manager<T>::SetValue(value);
  560|     24|    dispatcher_ = &Dispatch<T>;
  561|     24|  }
_ZN4absl12lts_2024011619str_format_internal13FormatArgImpl7ManagerIcLNS2_13StoragePolicyE2EE8SetValueERKc:
  544|     24|    static Data SetValue(const T& value) {
  545|     24|      Data data;
  546|     24|      memcpy(data.buf, &value, sizeof(value));
  547|     24|      return data;
  548|     24|    }
_ZN4absl12lts_2024011619str_format_internal13FormatArgImpl8DispatchIcEEbNS2_4DataENS1_24FormatConversionSpecImplEPv:
  599|     24|  static bool Dispatch(Data arg, FormatConversionSpecImpl spec, void* out) {
  600|       |    // A `none` conv indicates that we want the `int` conversion.
  601|     24|    if (ABSL_PREDICT_FALSE(spec.conversion_char() ==
  ------------------
  |  |  178|     24|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 24]
  |  |  |  Branch (178:49): [Folded, False: 24]
  |  |  |  Branch (178:58): [True: 0, False: 24]
  |  |  ------------------
  ------------------
  602|     24|                           FormatConversionCharInternal::kNone)) {
  603|      0|      return ToInt<T>(arg, static_cast<int*>(out), std::is_integral<T>(),
  604|      0|                      std::is_enum<T>());
  605|      0|    }
  606|     24|    if (ABSL_PREDICT_FALSE(!Contains(ArgumentToConv<T>(),
  ------------------
  |  |  178|     24|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 24]
  |  |  |  Branch (178:49): [Folded, False: 24]
  |  |  |  Branch (178:58): [True: 0, False: 24]
  |  |  ------------------
  ------------------
  607|     24|                                     spec.conversion_char()))) {
  608|      0|      return false;
  609|      0|    }
  610|     24|    return str_format_internal::FormatConvertImpl(
  611|     24|               Manager<T>::Value(arg), spec,
  612|     24|               static_cast<FormatSinkImpl*>(out))
  613|     24|        .value;
  614|     24|  }
_ZN4absl12lts_2024011619str_format_internal14ArgumentToConvIcEENS0_23FormatConversionCharSetEv:
  430|     24|constexpr FormatConversionCharSet ArgumentToConv() {
  431|     24|  using ConvResult = decltype(str_format_internal::FormatConvertImpl(
  432|     24|      std::declval<const Arg&>(),
  433|     24|      std::declval<const FormatConversionSpecImpl&>(),
  434|     24|      std::declval<FormatSinkImpl*>()));
  435|     24|  return absl::str_format_internal::ExtractCharSet(ConvResult{});
  436|     24|}
_ZN4absl12lts_2024011619str_format_internal14ExtractCharSetILNS0_23FormatConversionCharSetE131067EEES3_NS1_16ArgConvertResultIXT_EEE:
  211|     24|constexpr FormatConversionCharSet ExtractCharSet(ArgConvertResult<C>) {
  212|     24|  return C;
  213|     24|}
_ZN4absl12lts_2024011619str_format_internal13FormatArgImpl7ManagerIcLNS2_13StoragePolicyE2EE5ValueENS2_4DataE:
  550|     24|    static T Value(Data arg) {
  551|     24|      T value;
  552|     24|      memcpy(&value, arg.buf, sizeof(T));
  553|     24|      return value;
  554|     24|    }
_ZN4absl12lts_2024011619str_format_internal19FormatArgImplFriend7ConvertINS1_13FormatArgImplEEEbT_NS1_24FormatConversionSpecImplEPNS1_14FormatSinkImplE:
  419|     96|                      FormatSinkImpl* out) {
  420|     96|    return arg.dispatcher_(arg.data_, conv, out);
  421|     96|  }

_ZN4absl12lts_2024011619str_format_internal13FormatUntypedENS1_17FormatRawSinkImplENS1_21UntypedFormatSpecImplENS0_4SpanIKNS1_13FormatArgImplEEE:
  214|     24|                   absl::Span<const FormatArgImpl> args) {
  215|     24|  FormatSinkImpl sink(raw_sink);
  216|     24|  using Converter = DefaultConverter;
  217|     24|  return ConvertAll(format, args, Converter(&sink));
  218|     24|}
_ZN4absl12lts_2024011619str_format_internal8SnprintFEPcmNS1_21UntypedFormatSpecImplENS0_4SpanIKNS1_13FormatArgImplEEE:
  262|     24|             absl::Span<const FormatArgImpl> args) {
  263|     24|  BufferRawSink sink(output, size ? size - 1 : 0);
  ------------------
  |  Branch (263:30): [True: 24, False: 0]
  ------------------
  264|     24|  if (!FormatUntyped(&sink, format, args)) {
  ------------------
  |  Branch (264:7): [True: 0, False: 24]
  ------------------
  265|      0|    errno = EINVAL;
  266|      0|    return -1;
  267|      0|  }
  268|     24|  size_t total = sink.total_written();
  269|     24|  if (size) output[std::min(total, size - 1)] = 0;
  ------------------
  |  Branch (269:7): [True: 24, False: 0]
  ------------------
  270|     24|  return static_cast<int>(total);
  271|     24|}
bind.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_110ArgContextC2ENS0_4SpanIKNS1_13FormatArgImplEEE:
   55|     24|  explicit ArgContext(absl::Span<const FormatArgImpl> pack) : pack_(pack) {}
bind.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_110ArgContext4BindEPKNS1_17UnboundConversionEPNS1_15BoundConversionE:
   70|     96|                             BoundConversion* bound) {
   71|     96|  const FormatArgImpl* arg = nullptr;
   72|     96|  int arg_position = unbound->arg_position;
   73|     96|  if (static_cast<size_t>(arg_position - 1) >= pack_.size()) return false;
  ------------------
  |  Branch (73:7): [True: 0, False: 96]
  ------------------
   74|     96|  arg = &pack_[static_cast<size_t>(arg_position - 1)];  // 1-based
   75|       |
   76|     96|  if (unbound->flags != Flags::kBasic) {
  ------------------
  |  Branch (76:7): [True: 72, False: 24]
  ------------------
   77|     72|    int width = unbound->width.value();
   78|     72|    bool force_left = false;
   79|     72|    if (unbound->width.is_from_arg()) {
  ------------------
  |  Branch (79:9): [True: 0, False: 72]
  ------------------
   80|      0|      if (!BindFromPosition(unbound->width.get_from_arg(), &width, pack_))
  ------------------
  |  Branch (80:11): [True: 0, False: 0]
  ------------------
   81|      0|        return false;
   82|      0|      if (width < 0) {
  ------------------
  |  Branch (82:11): [True: 0, False: 0]
  ------------------
   83|       |        // "A negative field width is taken as a '-' flag followed by a
   84|       |        // positive field width."
   85|      0|        force_left = true;
   86|       |        // Make sure we don't overflow the width when negating it.
   87|      0|        width = -std::max(width, -std::numeric_limits<int>::max());
   88|      0|      }
   89|      0|    }
   90|       |
   91|     72|    int precision = unbound->precision.value();
   92|     72|    if (unbound->precision.is_from_arg()) {
  ------------------
  |  Branch (92:9): [True: 0, False: 72]
  ------------------
   93|      0|      if (!BindFromPosition(unbound->precision.get_from_arg(), &precision,
  ------------------
  |  Branch (93:11): [True: 0, False: 0]
  ------------------
   94|      0|                            pack_))
   95|      0|        return false;
   96|      0|    }
   97|       |
   98|     72|    FormatConversionSpecImplFriend::SetWidth(width, bound);
   99|     72|    FormatConversionSpecImplFriend::SetPrecision(precision, bound);
  100|       |
  101|     72|    if (force_left) {
  ------------------
  |  Branch (101:9): [True: 0, False: 72]
  ------------------
  102|      0|      FormatConversionSpecImplFriend::SetFlags(unbound->flags | Flags::kLeft,
  103|      0|                                               bound);
  104|     72|    } else {
  105|     72|      FormatConversionSpecImplFriend::SetFlags(unbound->flags, bound);
  106|     72|    }
  107|       |
  108|     72|    FormatConversionSpecImplFriend::SetLengthMod(unbound->length_mod, bound);
  109|     72|  } else {
  110|     24|    FormatConversionSpecImplFriend::SetFlags(unbound->flags, bound);
  111|     24|    FormatConversionSpecImplFriend::SetWidth(-1, bound);
  112|     24|    FormatConversionSpecImplFriend::SetPrecision(-1, bound);
  113|     24|  }
  114|     96|  FormatConversionSpecImplFriend::SetConversionChar(unbound->conv, bound);
  115|     96|  bound->set_arg(arg);
  116|     96|  return true;
  117|     96|}
bind.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_116DefaultConverterC2EPNS1_14FormatSinkImplE:
  154|     24|  explicit DefaultConverter(FormatSinkImpl* sink) : sink_(sink) {}
bind.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_110ConvertAllINS2_16DefaultConverterEEEbNS1_21UntypedFormatSpecImplENS0_4SpanIKNS1_13FormatArgImplEEET_:
  142|     24|                absl::Span<const FormatArgImpl> args, Converter converter) {
  143|     24|  if (format.has_parsed_conversion()) {
  ------------------
  |  Branch (143:7): [True: 0, False: 24]
  ------------------
  144|      0|    return format.parsed_conversion()->ProcessFormat(
  145|      0|        ConverterConsumer<Converter>(converter, args));
  146|     24|  } else {
  147|     24|    return ParseFormatString(format.str(),
  148|     24|                             ConverterConsumer<Converter>(converter, args));
  149|     24|  }
  150|     24|}
bind.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_117ConverterConsumerINS2_16DefaultConverterEE10ConvertOneERKNS1_17UnboundConversionENSt3__117basic_string_viewIcNS9_11char_traitsIcEEEE:
  129|     96|  bool ConvertOne(const UnboundConversion& conv, string_view conv_string) {
  130|     96|    BoundConversion bound;
  131|     96|    if (!arg_context_.Bind(&conv, &bound)) return false;
  ------------------
  |  Branch (131:9): [True: 0, False: 96]
  ------------------
  132|     96|    return converter_.ConvertOne(bound, conv_string);
  133|     96|  }
bind.cc:_ZNK4absl12lts_2024011619str_format_internal12_GLOBAL__N_116DefaultConverter10ConvertOneERKNS1_15BoundConversionENSt3__117basic_string_viewIcNS7_11char_traitsIcEEEE:
  158|     96|  bool ConvertOne(const BoundConversion& bound, string_view /*conv*/) const {
  159|     96|    return FormatArgImplFriend::Convert(*bound.arg(), bound, sink_);
  160|     96|  }
bind.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_117ConverterConsumerINS2_16DefaultConverterEE6AppendENSt3__117basic_string_viewIcNS6_11char_traitsIcEEEE:
  125|    120|  bool Append(string_view s) {
  126|    120|    converter_.Append(s);
  127|    120|    return true;
  128|    120|  }
bind.cc:_ZNK4absl12lts_2024011619str_format_internal12_GLOBAL__N_116DefaultConverter6AppendENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEE:
  156|    120|  void Append(string_view s) const { sink_->Append(s); }
bind.cc:_ZN4absl12lts_2024011619str_format_internal12_GLOBAL__N_117ConverterConsumerINS2_16DefaultConverterEEC2ES4_NS0_4SpanIKNS1_13FormatArgImplEEE:
  123|     24|      : converter_(converter), arg_context_(pack) {}

_ZNK4absl12lts_2024011619str_format_internal15BoundConversion3argEv:
   43|     96|  const FormatArgImpl* arg() const { return arg_; }
_ZN4absl12lts_2024011619str_format_internal15BoundConversion7set_argEPKNS1_13FormatArgImplE:
   44|     96|  void set_arg(const FormatArgImpl* a) { arg_ = a; }
_ZN4absl12lts_2024011619str_format_internal21UntypedFormatSpecImplC2ENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
   56|     24|      : data_(s.data()), size_(s.size()) {}
_ZNK4absl12lts_2024011619str_format_internal21UntypedFormatSpecImpl21has_parsed_conversionEv:
   61|     24|  bool has_parsed_conversion() const { return size_ == ~size_t{}; }
_ZNK4absl12lts_2024011619str_format_internal21UntypedFormatSpecImpl3strEv:
   63|     24|  string_view str() const {
   64|       |    assert(!has_parsed_conversion());
   65|     24|    return string_view(static_cast<const char*>(data_), size_);
   66|     24|  }
_ZN4absl12lts_2024011619str_format_internal21UntypedFormatSpecImpl7ExtractINS1_18FormatSpecTemplateIJLNS0_23FormatConversionCharSetE131067ELS5_655355ELS5_655355ELS5_655355EEEEEERKS2_RKT_:
   73|     24|  static const UntypedFormatSpecImpl& Extract(const T& s) {
   74|     24|    return s.spec_;
   75|     24|  }
_ZN4absl12lts_2024011619str_format_internal18FormatSpecTemplateIJLNS0_23FormatConversionCharSetE131067ELS3_655355ELS3_655355ELS3_655355EEEC2EUa9enable_ifIXclL_ZNS1_15ValidFormatImplIJLS3_131067ELS3_655355ELS3_655355ELS3_655355EEEEbNSt3__117basic_string_viewIcNS6_11char_traitsIcEEEEEfL0p_EEEPKc:
  159|     24|      : Base(s) {}

_ZN4absl12lts_2024011619str_format_internal17UnboundConversionC2Ev:
   36|     96|  UnboundConversion() {}  // NOLINT
_ZN4absl12lts_2024011619str_format_internal17UnboundConversion10InputValue9set_valueEi:
   45|     72|    constexpr void set_value(int value) {
   46|       |      assert(value >= 0);
   47|     72|      value_ = value;
   48|     72|    }
_ZNK4absl12lts_2024011619str_format_internal17UnboundConversion10InputValue5valueEv:
   49|    144|    constexpr int value() const { return value_; }
_ZNK4absl12lts_2024011619str_format_internal17UnboundConversion10InputValue11is_from_argEv:
   60|    144|    constexpr bool is_from_arg() const { return value_ < -1; }
_ZNK4absl12lts_2024011619str_format_internal7ConvTag7is_convEv:
   94|    168|  constexpr bool is_conv() const { return (tag_ & 0x80) == 0; }
_ZNK4absl12lts_2024011619str_format_internal7ConvTag8is_flagsEv:
   96|     48|  constexpr bool is_flags() const { return (tag_ & 0xE0) == 0xC0; }
_ZNK4absl12lts_2024011619str_format_internal7ConvTag7as_convEv:
   98|     96|  constexpr FormatConversionChar as_conv() const {
   99|     96|    assert(is_conv());
  100|     96|    assert(!is_length());
  101|       |    assert(!is_flags());
  102|     96|    return static_cast<FormatConversionChar>(tag_);
  103|     96|  }
_ZNK4absl12lts_2024011619str_format_internal7ConvTag8as_flagsEv:
  110|     48|  constexpr Flags as_flags() const {
  111|     48|    assert(!is_conv());
  112|     48|    assert(!is_length());
  113|       |    assert(is_flags());
  114|     48|    return static_cast<Flags>(tag_ & 0x1F);
  115|     48|  }
_ZN4absl12lts_2024011619str_format_internal17ConsumeConversionILb0EEEPKcS4_S4_PNS1_17UnboundConversionEPi:
  216|     72|                                        int* next_arg) {
  217|     72|  const char* const original_pos = pos;
  218|     72|  char c = 0;
  219|       |  // Read the next char into `c` and update `pos`. Returns false if there are
  220|       |  // no more chars to read.
  221|     72|#define ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR()          \
  222|     72|  do {                                                  \
  223|     72|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  224|     72|    c = *pos++;                                         \
  225|     72|  } while (0)
  226|       |
  227|     72|  if (is_positional) {
  ------------------
  |  Branch (227:7): [Folded, False: 72]
  ------------------
  228|      0|    ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  229|      0|    if (ABSL_PREDICT_FALSE(c < '1' || c > '9')) return nullptr;
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:59): [True: 0, False: 0]
  |  |  |  Branch (178:59): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  230|      0|    conv->arg_position = ParseDigits(c, pos, end);
  231|      0|    assert(conv->arg_position > 0);
  232|      0|    if (ABSL_PREDICT_FALSE(c != '$')) return nullptr;
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  233|      0|  }
  234|       |
  235|     72|  ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|     72|  do {                                                  \
  |  |  223|     72|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  178|     72|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:31): [True: 0, False: 72]
  |  |  |  |  |  Branch (178:49): [Folded, False: 72]
  |  |  |  |  |  Branch (178:58): [True: 0, False: 72]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|     72|    c = *pos++;                                         \
  |  |  225|     72|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 72]
  |  |  ------------------
  ------------------
  236|       |
  237|       |  // We should start with the basic flag on.
  238|     72|  assert(conv->flags == Flags::kBasic);
  239|       |
  240|       |  // Any non alpha character makes this conversion not basic.
  241|       |  // This includes flags (-+ #0), width (1-9, *) or precision (.).
  242|       |  // All conversion characters and length modifiers are alpha characters.
  243|     72|  if (c < 'A') {
  ------------------
  |  Branch (243:7): [True: 72, False: 0]
  ------------------
  244|    120|    while (c <= '0') {
  ------------------
  |  Branch (244:12): [True: 48, False: 72]
  ------------------
  245|     48|      auto tag = GetTagForChar(c);
  246|     48|      if (tag.is_flags()) {
  ------------------
  |  Branch (246:11): [True: 48, False: 0]
  ------------------
  247|     48|        conv->flags = conv->flags | tag.as_flags();
  248|     48|        ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|     48|  do {                                                  \
  |  |  223|     48|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  178|     48|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:31): [True: 0, False: 48]
  |  |  |  |  |  Branch (178:49): [Folded, False: 48]
  |  |  |  |  |  Branch (178:58): [True: 0, False: 48]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|     48|    c = *pos++;                                         \
  |  |  225|     48|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 48]
  |  |  ------------------
  ------------------
  249|     48|      } else {
  250|      0|        break;
  251|      0|      }
  252|     48|    }
  253|       |
  254|     72|    if (c <= '9') {
  ------------------
  |  Branch (254:9): [True: 72, False: 0]
  ------------------
  255|     72|      if (c >= '0') {
  ------------------
  |  Branch (255:11): [True: 72, False: 0]
  ------------------
  256|     72|        int maybe_width = ParseDigits(c, pos, end);
  257|     72|        if (!is_positional && c == '$') {
  ------------------
  |  Branch (257:13): [True: 72, Folded]
  |  Branch (257:31): [True: 0, False: 72]
  ------------------
  258|      0|          if (ABSL_PREDICT_FALSE(*next_arg != 0)) return nullptr;
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  259|       |          // Positional conversion.
  260|      0|          *next_arg = -1;
  261|      0|          return ConsumeConversion<true>(original_pos, end, conv, next_arg);
  262|      0|        }
  263|     72|        conv->flags = conv->flags | Flags::kNonBasic;
  264|     72|        conv->width.set_value(maybe_width);
  265|     72|      } else if (c == '*') {
  ------------------
  |  Branch (265:18): [True: 0, False: 0]
  ------------------
  266|      0|        conv->flags = conv->flags | Flags::kNonBasic;
  267|      0|        ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  268|      0|        if (is_positional) {
  ------------------
  |  Branch (268:13): [Folded, False: 0]
  ------------------
  269|      0|          if (ABSL_PREDICT_FALSE(c < '1' || c > '9')) return nullptr;
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:59): [True: 0, False: 0]
  |  |  |  Branch (178:59): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  270|      0|          conv->width.set_from_arg(ParseDigits(c, pos, end));
  271|      0|          if (ABSL_PREDICT_FALSE(c != '$')) return nullptr;
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  272|      0|          ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  273|      0|        } else {
  274|      0|          conv->width.set_from_arg(++*next_arg);
  275|      0|        }
  276|      0|      }
  277|     72|    }
  278|       |
  279|     72|    if (c == '.') {
  ------------------
  |  Branch (279:9): [True: 0, False: 72]
  ------------------
  280|      0|      conv->flags = conv->flags | Flags::kNonBasic;
  281|      0|      ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  282|      0|      if ('0' <= c && c <= '9') {
  ------------------
  |  Branch (282:11): [True: 0, False: 0]
  |  Branch (282:23): [True: 0, False: 0]
  ------------------
  283|      0|        conv->precision.set_value(ParseDigits(c, pos, end));
  284|      0|      } else if (c == '*') {
  ------------------
  |  Branch (284:18): [True: 0, False: 0]
  ------------------
  285|      0|        ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  286|      0|        if (is_positional) {
  ------------------
  |  Branch (286:13): [Folded, False: 0]
  ------------------
  287|      0|          if (ABSL_PREDICT_FALSE(c < '1' || c > '9')) return nullptr;
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:59): [True: 0, False: 0]
  |  |  |  Branch (178:59): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  288|      0|          conv->precision.set_from_arg(ParseDigits(c, pos, end));
  289|      0|          if (c != '$') return nullptr;
  ------------------
  |  Branch (289:15): [True: 0, False: 0]
  ------------------
  290|      0|          ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  291|      0|        } else {
  292|      0|          conv->precision.set_from_arg(++*next_arg);
  293|      0|        }
  294|      0|      } else {
  295|      0|        conv->precision.set_value(0);
  296|      0|      }
  297|      0|    }
  298|     72|  }
  299|       |
  300|     72|  auto tag = GetTagForChar(c);
  301|       |
  302|     72|  if (ABSL_PREDICT_FALSE(c == 'v' && conv->flags != Flags::kBasic)) {
  ------------------
  |  |  178|     72|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 72]
  |  |  |  Branch (178:49): [Folded, False: 72]
  |  |  |  Branch (178:59): [True: 0, False: 72]
  |  |  |  Branch (178:59): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  303|      0|    return nullptr;
  304|      0|  }
  305|       |
  306|     72|  if (ABSL_PREDICT_FALSE(!tag.is_conv())) {
  ------------------
  |  |  178|     72|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 72]
  |  |  |  Branch (178:49): [Folded, False: 72]
  |  |  |  Branch (178:58): [True: 0, False: 72]
  |  |  ------------------
  ------------------
  307|      0|    if (ABSL_PREDICT_FALSE(!tag.is_length())) return nullptr;
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  308|       |
  309|       |    // It is a length modifier.
  310|      0|    LengthMod length_mod = tag.as_length();
  311|      0|    ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  312|      0|    if (c == 'h' && length_mod == LengthMod::h) {
  ------------------
  |  Branch (312:9): [True: 0, False: 0]
  |  Branch (312:21): [True: 0, False: 0]
  ------------------
  313|      0|      conv->length_mod = LengthMod::hh;
  314|      0|      ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  315|      0|    } else if (c == 'l' && length_mod == LengthMod::l) {
  ------------------
  |  Branch (315:16): [True: 0, False: 0]
  |  Branch (315:28): [True: 0, False: 0]
  ------------------
  316|      0|      conv->length_mod = LengthMod::ll;
  317|      0|      ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR();
  ------------------
  |  |  222|      0|  do {                                                  \
  |  |  223|      0|    if (ABSL_PREDICT_FALSE(pos == end)) return nullptr; \
  |  |  ------------------
  |  |  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  224|      0|    c = *pos++;                                         \
  |  |  225|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (225:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  318|      0|    } else {
  319|      0|      conv->length_mod = length_mod;
  320|      0|    }
  321|      0|    tag = GetTagForChar(c);
  322|       |
  323|      0|    if (ABSL_PREDICT_FALSE(c == 'v')) return nullptr;
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  324|      0|    if (ABSL_PREDICT_FALSE(!tag.is_conv())) return nullptr;
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  325|       |
  326|       |    // `wchar_t` args are marked non-basic so `Bind()` will copy the length mod.
  327|      0|    if (conv->length_mod == LengthMod::l && c == 'c') {
  ------------------
  |  Branch (327:9): [True: 0, False: 0]
  |  Branch (327:45): [True: 0, False: 0]
  ------------------
  328|      0|      conv->flags = conv->flags | Flags::kNonBasic;
  329|      0|    }
  330|      0|  }
  331|     72|#undef ABSL_FORMAT_PARSER_INTERNAL_GET_CHAR
  332|       |
  333|     72|  assert(CheckFastPathSetting(*conv));
  334|     72|  (void)(&CheckFastPathSetting);
  335|       |
  336|     72|  conv->conv = tag.as_conv();
  337|     72|  if (!is_positional) conv->arg_position = ++*next_arg;
  ------------------
  |  Branch (337:7): [True: 72, Folded]
  ------------------
  338|     72|  return pos;
  339|     72|}
_ZN4absl12lts_2024011619str_format_internal13GetTagForCharEc:
  169|    216|constexpr ConvTag GetTagForChar(char c) {
  170|    216|  return ConvTagHolder::value[static_cast<unsigned char>(c)];
  171|    216|}
_ZN4absl12lts_2024011619str_format_internal11ParseDigitsERcRPKcS4_:
  196|     72|constexpr int ParseDigits(char& c, const char*& pos, const char* const end) {
  197|     72|  int digits = c - '0';
  198|       |  // We do not want to overflow `digits` so we consume at most digits10
  199|       |  // digits. If there are more digits the parsing will fail later on when the
  200|       |  // digit doesn't match the expected characters.
  201|     72|  int num_digits = std::numeric_limits<int>::digits10;
  202|     72|  for (;;) {
  203|     72|    if (ABSL_PREDICT_FALSE(pos == end)) break;
  ------------------
  |  |  178|     72|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 72]
  |  |  |  Branch (178:49): [Folded, False: 72]
  |  |  |  Branch (178:58): [True: 0, False: 72]
  |  |  ------------------
  ------------------
  204|     72|    c = *pos++;
  205|     72|    if ('0' > c || c > '9') break;
  ------------------
  |  Branch (205:9): [True: 0, False: 72]
  |  Branch (205:20): [True: 72, False: 0]
  ------------------
  206|      0|    --num_digits;
  207|      0|    if (ABSL_PREDICT_FALSE(!num_digits)) break;
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  208|      0|    digits = 10 * digits + c - '0';
  209|      0|  }
  210|     72|  return digits;
  211|     72|}
_ZN4absl12lts_2024011619str_format_internal24ConsumeUnboundConversionEPKcS3_PNS1_17UnboundConversionEPi:
  348|     72|                                               int* next_arg) {
  349|     72|  if (*next_arg < 0) return ConsumeConversion<true>(p, end, conv, next_arg);
  ------------------
  |  Branch (349:7): [True: 0, False: 72]
  ------------------
  350|     72|  return ConsumeConversion<false>(p, end, conv, next_arg);
  351|     72|}

_ZN4absl12lts_2024011619str_format_internal17FormatRawSinkImpl5WriteENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
   48|     24|  void Write(string_view s) { write_(sink_, s); }
_ZN4absl12lts_2024011619str_format_internal14FormatSinkImplC2ENS1_17FormatRawSinkImplE:
   68|     24|  explicit FormatSinkImpl(FormatRawSinkImpl raw) : raw_(raw) {}
_ZN4absl12lts_2024011619str_format_internal14FormatSinkImplD2Ev:
   70|     24|  ~FormatSinkImpl() { Flush(); }
_ZN4absl12lts_2024011619str_format_internal14FormatSinkImpl5FlushEv:
   72|     24|  void Flush() {
   73|     24|    raw_.Write(string_view(buf_, static_cast<size_t>(pos_ - buf_)));
   74|     24|    pos_ = buf_;
   75|     24|  }
_ZN4absl12lts_2024011619str_format_internal14FormatSinkImpl6AppendEmc:
   77|    264|  void Append(size_t n, char c) {
   78|    264|    if (n == 0) return;
  ------------------
  |  Branch (78:9): [True: 216, False: 48]
  ------------------
   79|     48|    size_ += n;
   80|     48|    auto raw_append = [&](size_t count) {
   81|     48|      memset(pos_, c, count);
   82|     48|      pos_ += count;
   83|     48|    };
   84|     48|    while (n > Avail()) {
  ------------------
  |  Branch (84:12): [True: 0, False: 48]
  ------------------
   85|      0|      n -= Avail();
   86|      0|      if (Avail() > 0) {
  ------------------
  |  Branch (86:11): [True: 0, False: 0]
  ------------------
   87|      0|        raw_append(Avail());
   88|      0|      }
   89|      0|      Flush();
   90|      0|    }
   91|     48|    raw_append(n);
   92|     48|  }
_ZN4absl12lts_2024011619str_format_internal14FormatSinkImpl6AppendENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
   94|    336|  void Append(string_view v) {
   95|    336|    size_t n = v.size();
   96|    336|    if (n == 0) return;
  ------------------
  |  Branch (96:9): [True: 168, False: 168]
  ------------------
   97|    168|    size_ += n;
   98|    168|    if (n >= Avail()) {
  ------------------
  |  Branch (98:9): [True: 0, False: 168]
  ------------------
   99|      0|      Flush();
  100|      0|      raw_.Write(v);
  101|      0|      return;
  102|      0|    }
  103|    168|    memcpy(pos_, v.data(), n);
  104|    168|    pos_ += n;
  105|    168|  }
_ZNK4absl12lts_2024011619str_format_internal14FormatSinkImpl5AvailEv:
  123|    216|  size_t Avail() const {
  124|    216|    return static_cast<size_t>(buf_ + sizeof(buf_) - pos_);
  125|    216|  }
_ZNK4absl12lts_2024011619str_format_internal24FormatConversionSpecImpl8is_basicEv:
  277|     72|  bool is_basic() const { return flags_ == Flags::kBasic; }
_ZNK4absl12lts_2024011619str_format_internal24FormatConversionSpecImpl13has_left_flagEv:
  278|    192|  bool has_left_flag() const { return FlagsContains(flags_, Flags::kLeft); }
_ZNK4absl12lts_2024011619str_format_internal24FormatConversionSpecImpl17has_show_pos_flagEv:
  279|     72|  bool has_show_pos_flag() const {
  280|     72|    return FlagsContains(flags_, Flags::kShowPos);
  281|     72|  }
_ZNK4absl12lts_2024011619str_format_internal24FormatConversionSpecImpl17has_sign_col_flagEv:
  282|     72|  bool has_sign_col_flag() const {
  283|     72|    return FlagsContains(flags_, Flags::kSignCol);
  284|     72|  }
_ZNK4absl12lts_2024011619str_format_internal24FormatConversionSpecImpl12has_alt_flagEv:
  285|    144|  bool has_alt_flag() const { return FlagsContains(flags_, Flags::kAlt); }
_ZNK4absl12lts_2024011619str_format_internal24FormatConversionSpecImpl13has_zero_flagEv:
  286|     72|  bool has_zero_flag() const { return FlagsContains(flags_, Flags::kZero); }
_ZNK4absl12lts_2024011619str_format_internal24FormatConversionSpecImpl10length_modEv:
  288|     24|  LengthMod length_mod() const { return length_mod_; }
_ZNK4absl12lts_2024011619str_format_internal24FormatConversionSpecImpl15conversion_charEv:
  290|    648|  FormatConversionChar conversion_char() const {
  291|       |    // Keep this field first in the struct . It generates better code when
  292|       |    // accessing it when ConversionSpec is passed by value in registers.
  293|    648|    static_assert(offsetof(FormatConversionSpecImpl, conv_) == 0, "");
  294|    648|    return conv_;
  295|    648|  }
_ZNK4absl12lts_2024011619str_format_internal24FormatConversionSpecImpl5widthEv:
  301|    168|  int width() const { return width_; }
_ZNK4absl12lts_2024011619str_format_internal24FormatConversionSpecImpl9precisionEv:
  304|     72|  int precision() const { return precision_; }
_ZN4absl12lts_2024011619str_format_internal30FormatConversionSpecImplFriend8SetFlagsENS1_5FlagsEPNS1_24FormatConversionSpecImplE:
  321|     96|  static void SetFlags(Flags f, FormatConversionSpecImpl* conv) {
  322|     96|    conv->flags_ = f;
  323|     96|  }
_ZN4absl12lts_2024011619str_format_internal30FormatConversionSpecImplFriend12SetLengthModENS0_9LengthModEPNS1_24FormatConversionSpecImplE:
  324|     72|  static void SetLengthMod(LengthMod l, FormatConversionSpecImpl* conv) {
  325|     72|    conv->length_mod_ = l;
  326|     72|  }
_ZN4absl12lts_2024011619str_format_internal30FormatConversionSpecImplFriend17SetConversionCharENS0_20FormatConversionCharEPNS1_24FormatConversionSpecImplE:
  328|     96|                                FormatConversionSpecImpl* conv) {
  329|     96|    conv->conv_ = c;
  330|     96|  }
_ZN4absl12lts_2024011619str_format_internal30FormatConversionSpecImplFriend8SetWidthEiPNS1_24FormatConversionSpecImplE:
  331|     96|  static void SetWidth(int w, FormatConversionSpecImpl* conv) {
  332|     96|    conv->width_ = w;
  333|     96|  }
_ZN4absl12lts_2024011619str_format_internal30FormatConversionSpecImplFriend12SetPrecisionEiPNS1_24FormatConversionSpecImplE:
  334|     96|  static void SetPrecision(int p, FormatConversionSpecImpl* conv) {
  335|     96|    conv->precision_ = p;
  336|     96|  }
_ZN4absl12lts_2024011619str_format_internalorENS1_5FlagsES2_:
  146|    120|constexpr Flags operator|(Flags a, Flags b) {
  147|    120|  return static_cast<Flags>(static_cast<uint8_t>(a) | static_cast<uint8_t>(b));
  148|    120|}
_ZN4absl12lts_2024011619str_format_internal13FlagsContainsENS1_5FlagsES2_:
  150|    552|constexpr bool FlagsContains(Flags haystack, Flags needle) {
  151|    552|  return (static_cast<uint8_t>(haystack) & static_cast<uint8_t>(needle)) ==
  152|    552|         static_cast<uint8_t>(needle);
  153|    552|}
_ZN4absl12lts_2024011619str_format_internal29FormatConversionCharToConvIntENS0_20FormatConversionCharE:
  360|     96|constexpr uint64_t FormatConversionCharToConvInt(FormatConversionChar c) {
  361|     96|  return uint64_t{1} << (1 + static_cast<uint8_t>(c));
  362|     96|}
_ZN4absl12lts_2024011619str_format_internal8ContainsENS0_23FormatConversionCharSetENS0_20FormatConversionCharE:
  442|     96|constexpr bool Contains(FormatConversionCharSet set, FormatConversionChar c) {
  443|     96|  return (static_cast<uint64_t>(set) & FormatConversionCharToConvInt(c)) != 0;
  444|     96|}
_ZN4absl12lts_2024011619str_format_internal6ExcessEmm:
  447|    384|inline size_t Excess(size_t used, size_t capacity) {
  448|    384|  return used < capacity ? capacity - used : 0;
  ------------------
  |  Branch (448:10): [True: 96, False: 288]
  ------------------
  449|    384|}
_ZZN4absl12lts_2024011619str_format_internal14FormatSinkImpl6AppendEmcENKUlmE_clEm:
   80|     48|    auto raw_append = [&](size_t count) {
   81|     48|      memset(pos_, c, count);
   82|     48|      pos_ += count;
   83|     48|    };
_ZN4absl12lts_2024011619str_format_internal17FormatRawSinkImplC2INS1_13BufferRawSinkETnPDTclsr19str_format_internalE11InvokeFlushclsr3stdE7declvalIPT_EEcvNSt3__117basic_string_viewIcNS7_11char_traitsIcEEEE_EEELPv0EEES6_:
   46|     24|      : sink_(raw), write_(&FormatRawSinkImpl::Flush<T>) {}
_ZN4absl12lts_2024011619str_format_internal17FormatRawSinkImpl5FlushINS1_13BufferRawSinkEEEvPvNSt3__117basic_string_viewIcNS6_11char_traitsIcEEEE:
   57|     24|  static void Flush(void* r, string_view s) {
   58|     24|    str_format_internal::InvokeFlush(static_cast<T*>(r), s);
   59|     24|  }

_ZN4absl12lts_2024011619str_format_internal13BufferRawSink5WriteENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
   34|     24|void BufferRawSink::Write(string_view v) {
   35|     24|  size_t to_write = std::min(v.size(), size_);
   36|     24|  std::memcpy(buffer_, v.data(), to_write);
   37|     24|  buffer_ += to_write;
   38|     24|  size_ -= to_write;
   39|     24|  total_written_ += v.size();
   40|     24|}

_ZN4absl12lts_2024011619str_format_internal13BufferRawSinkC2EPcm:
   41|     24|  BufferRawSink(char* buffer, size_t size) : buffer_(buffer), size_(size) {}
_ZNK4absl12lts_2024011619str_format_internal13BufferRawSink13total_writtenEv:
   43|     24|  size_t total_written() const { return total_written_; }
_ZN4absl12lts_2024011619str_format_internal15AbslFormatFlushEPNS1_13BufferRawSinkENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEE:
   82|     24|inline void AbslFormatFlush(BufferRawSink* sink, string_view v) {
   83|     24|  sink->Write(v);
   84|     24|}
_ZN4absl12lts_2024011619str_format_internal11InvokeFlushINS1_13BufferRawSinkEEEDTcl15AbslFormatFlushfp_fp0_EEPT_NSt3__117basic_string_viewIcNS7_11char_traitsIcEEEE:
   89|     24|auto InvokeFlush(T* out, string_view s) -> decltype(AbslFormatFlush(out, s)) {
   90|     24|  AbslFormatFlush(out, s);
   91|     24|}

_ZN4absl12lts_2024011619str_format_internal32ConsumeUnboundConversionNoInlineEPKcS3_PNS1_17UnboundConversionEPi:
   38|     72|    const char* p, const char* end, UnboundConversion* conv, int* next_arg) {
   39|     72|  return ConsumeUnboundConversion(p, end, conv, next_arg);
   40|     72|}

bind.cc:_ZN4absl12lts_2024011619str_format_internal17ParseFormatStringINS1_12_GLOBAL__N_117ConverterConsumerINS3_16DefaultConverterEEEEEbNSt3__117basic_string_viewIcNS7_11char_traitsIcEEEET_:
   57|     24|bool ParseFormatString(string_view src, Consumer consumer) {
   58|     24|  int next_arg = 0;
   59|     24|  const char* p = src.data();
   60|     24|  const char* const end = p + src.size();
   61|    120|  while (p != end) {
  ------------------
  |  Branch (61:10): [True: 120, False: 0]
  ------------------
   62|    120|    const char* percent =
   63|    120|        static_cast<const char*>(memchr(p, '%', static_cast<size_t>(end - p)));
   64|    120|    if (!percent) {
  ------------------
  |  Branch (64:9): [True: 24, False: 96]
  ------------------
   65|       |      // We found the last substring.
   66|     24|      return consumer.Append(string_view(p, static_cast<size_t>(end - p)));
   67|     24|    }
   68|       |    // We found a percent, so push the text run then process the percent.
   69|     96|    if (ABSL_PREDICT_FALSE(!consumer.Append(
  ------------------
  |  |  178|     96|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 96]
  |  |  |  Branch (178:49): [Folded, False: 96]
  |  |  |  Branch (178:58): [True: 0, False: 96]
  |  |  ------------------
  ------------------
   70|     96|            string_view(p, static_cast<size_t>(percent - p))))) {
   71|      0|      return false;
   72|      0|    }
   73|     96|    if (ABSL_PREDICT_FALSE(percent + 1 >= end)) return false;
  ------------------
  |  |  178|     96|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 96]
  |  |  |  Branch (178:49): [Folded, False: 96]
  |  |  |  Branch (178:58): [True: 0, False: 96]
  |  |  ------------------
  ------------------
   74|       |
   75|     96|    auto tag = GetTagForChar(percent[1]);
   76|     96|    if (tag.is_conv()) {
  ------------------
  |  Branch (76:9): [True: 24, False: 72]
  ------------------
   77|     24|      if (ABSL_PREDICT_FALSE(next_arg < 0)) {
  ------------------
  |  |  178|     24|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 24]
  |  |  |  Branch (178:49): [Folded, False: 24]
  |  |  |  Branch (178:58): [True: 0, False: 24]
  |  |  ------------------
  ------------------
   78|       |        // This indicates an error in the format string.
   79|       |        // The only way to get `next_arg < 0` here is to have a positional
   80|       |        // argument first which sets next_arg to -1 and then a non-positional
   81|       |        // argument.
   82|      0|        return false;
   83|      0|      }
   84|     24|      p = percent + 2;
   85|       |
   86|       |      // Keep this case separate from the one below.
   87|       |      // ConvertOne is more efficient when the compiler can see that the `basic`
   88|       |      // flag is set.
   89|     24|      UnboundConversion conv;
   90|     24|      conv.conv = tag.as_conv();
   91|     24|      conv.arg_position = ++next_arg;
   92|     24|      if (ABSL_PREDICT_FALSE(
  ------------------
  |  |  178|     24|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 24]
  |  |  |  Branch (178:49): [Folded, False: 24]
  |  |  |  Branch (178:58): [True: 0, False: 24]
  |  |  ------------------
  ------------------
   93|     24|              !consumer.ConvertOne(conv, string_view(percent + 1, 1)))) {
   94|      0|        return false;
   95|      0|      }
   96|     72|    } else if (percent[1] != '%') {
  ------------------
  |  Branch (96:16): [True: 72, False: 0]
  ------------------
   97|     72|      UnboundConversion conv;
   98|     72|      p = ConsumeUnboundConversionNoInline(percent + 1, end, &conv, &next_arg);
   99|     72|      if (ABSL_PREDICT_FALSE(p == nullptr)) return false;
  ------------------
  |  |  178|     72|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 72]
  |  |  |  Branch (178:49): [Folded, False: 72]
  |  |  |  Branch (178:58): [True: 0, False: 72]
  |  |  ------------------
  ------------------
  100|     72|      if (ABSL_PREDICT_FALSE(!consumer.ConvertOne(
  ------------------
  |  |  178|     72|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 72]
  |  |  |  Branch (178:49): [Folded, False: 72]
  |  |  |  Branch (178:58): [True: 0, False: 72]
  |  |  ------------------
  ------------------
  101|     72|              conv, string_view(percent + 1,
  102|     72|                                static_cast<size_t>(p - (percent + 1)))))) {
  103|      0|        return false;
  104|      0|      }
  105|     72|    } else {
  106|      0|      if (ABSL_PREDICT_FALSE(!consumer.Append("%"))) return false;
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  107|      0|      p = percent + 2;
  108|      0|      continue;
  109|      0|    }
  110|     96|  }
  111|      0|  return true;
  112|     24|}

_ZN4absl12lts_2024011611StrContainsENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEc:
   51|    367|inline bool StrContains(absl::string_view haystack, char needle) noexcept {
   52|    367|  return haystack.find(needle) != haystack.npos;
   53|    367|}
_ZN4absl12lts_2024011610StartsWithENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
   59|     87|                       absl::string_view prefix) noexcept {
   60|     87|  return prefix.empty() ||
  ------------------
  |  Branch (60:10): [True: 0, False: 87]
  ------------------
   61|     87|         (text.size() >= prefix.size() &&
  ------------------
  |  Branch (61:11): [True: 44, False: 43]
  ------------------
   62|     44|          memcmp(text.data(), prefix.data(), prefix.size()) == 0);
  ------------------
  |  Branch (62:11): [True: 1, False: 43]
  ------------------
   63|     87|}

_ZN4absl12lts_2024011616numbers_internal15FastIntToBufferEiPc:
  481|     96|    int32_t i, absl::Nonnull<char*> buffer) {
  482|     96|  buffer += static_cast<int>(i < 0);
  483|     96|  uint32_t digits = absl::numbers_internal::Base10Digits(
  484|     96|      absl::numbers_internal::UnsignedAbsoluteValue(i));
  485|     96|  buffer += digits;
  486|     96|  *buffer = '\0';  // We're going backward, so store this first
  487|     96|  FastIntToBufferBackward(i, buffer, digits);
  488|     96|  return buffer;
  489|     96|}
_ZN4absl12lts_2024011616numbers_internal23FastIntToBufferBackwardEiPcj:
  517|     96|    int32_t i, absl::Nonnull<char*> buffer_end, uint32_t exact_digit_count) {
  518|     96|  return DoFastIntToBufferBackward(i, buffer_end, exact_digit_count);
  519|     96|}
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_125DoFastIntToBufferBackwardIjPcEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueET0_E4typeES6_S7_j:
  435|     96|DoFastIntToBufferBackward(T v, BackwardIt end, uint32_t digits) {
  436|     96|  using PromotedT = std::decay_t<decltype(+v)>;
  437|     96|  using Converter = FastUIntToStringConverter<PromotedT, BackwardIt>;
  438|     96|  (void)digits;
  439|     96|  return Converter().FastIntToBufferBackward(v, end);
  440|     96|}
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_125FastUIntToStringConverterIjPcE23FastIntToBufferBackwardEjS3_:
  306|     96|  static BackwardIt FastIntToBufferBackward(T v, BackwardIt end) {
  307|       |    // THIS IS A HOT FUNCTION with a very deliberate structure to exploit branch
  308|       |    // prediction and shorten the critical path for smaller numbers.
  309|       |    // Do not move around the if/else blocks or attempt to simplify it
  310|       |    // without benchmarking any changes.
  311|       |
  312|     96|    if (v < 10) {
  ------------------
  |  Branch (312:9): [True: 0, False: 96]
  ------------------
  313|      0|      goto AT_LEAST_1 /* NOTE: mandatory for the 0 case */;
  314|      0|    }
  315|     96|    if (v < 1000) {
  ------------------
  |  Branch (315:9): [True: 48, False: 48]
  ------------------
  316|     48|      goto AT_LEAST_10;
  317|     48|    }
  318|     48|    if (v < 10000000) {
  ------------------
  |  Branch (318:9): [True: 24, False: 24]
  ------------------
  319|     24|      goto AT_LEAST_1000;
  320|     24|    }
  321|       |
  322|     24|    if (v >= 100000000 / 10) {
  ------------------
  |  Branch (322:9): [True: 24, False: 0]
  ------------------
  323|     24|      if (v >= 10000000000000000 / 10) {
  ------------------
  |  Branch (323:11): [True: 0, False: 24]
  ------------------
  324|      0|        DoFastIntToBufferBackward<8>(v, end);
  325|      0|      }
  326|     24|      DoFastIntToBufferBackward<8>(v, end);
  327|     24|    }
  328|       |
  329|     24|    if (v >= 10000 / 10) {
  ------------------
  |  Branch (329:9): [True: 0, False: 24]
  ------------------
  330|     24|    AT_LEAST_1000:
  331|     24|      DoFastIntToBufferBackward<4>(v, end);
  332|     24|    }
  333|       |
  334|     48|    if (v >= 100 / 10) {
  ------------------
  |  Branch (334:9): [True: 48, False: 0]
  ------------------
  335|     96|    AT_LEAST_10:
  336|     96|      DoFastIntToBufferBackward<2>(v, end);
  337|     96|    }
  338|       |
  339|     96|    if (v >= 10 / 10) {
  ------------------
  |  Branch (339:9): [True: 24, False: 72]
  ------------------
  340|     24|    AT_LEAST_1:
  341|     24|      end = DoFastIntToBufferBackward(v, end, std::integral_constant<int, 1>());
  342|     24|    }
  343|     96|    return end;
  344|     96|  }
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_125FastUIntToStringConverterIjPcE25DoFastIntToBufferBackwardILi8EEEvRjRS3_:
  354|     24|  static void DoFastIntToBufferBackward(T& v, BackwardIt& end) {
  355|     24|    constexpr T kModulus = Pow<T>(10, Exponent);
  356|     24|    T remainder = static_cast<T>(v % kModulus);
  357|     24|    v = static_cast<T>(v / kModulus);
  358|     24|    end = DoFastIntToBufferBackward(remainder, end,
  359|     24|                                    std::integral_constant<int, Exponent>());
  360|     24|  }
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_125FastUIntToStringConverterIjPcE25DoFastIntToBufferBackwardEjS3_NSt3__117integral_constantIiLi8EEE:
  392|     24|                                              std::integral_constant<int, 8>) {
  393|     24|    if (kIsContiguousIterator) {
  ------------------
  |  Branch (393:9): [True: 24, Folded]
  ------------------
  394|     24|      const uint64_t digits =
  395|     24|          PrepareEightDigits(static_cast<uint32_t>(v)) + kEightZeroBytes;
  396|     24|      end -= sizeof(digits);
  397|     24|      little_endian::Store64(&*end, digits);
  398|     24|    } else {
  399|      0|      uint64_t digits = PrepareEightDigitsReversed(static_cast<uint32_t>(v)) +
  400|      0|                        kEightZeroBytes;
  401|      0|      for (size_t i = 0; i < sizeof(digits); ++i) {
  ------------------
  |  Branch (401:26): [True: 0, False: 0]
  ------------------
  402|      0|        *--end = static_cast<char>(digits);
  403|       |        digits >>= CHAR_BIT;
  404|      0|      }
  405|      0|    }
  406|     24|    return end;
  407|     24|  }
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_118PrepareEightDigitsEj:
  283|     24|inline uint64_t PrepareEightDigits(uint32_t i) {
  284|     24|  return PrepareEightDigitsImpl(i, false);
  285|     24|}
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_122PrepareEightDigitsImplEjb:
  265|     24|inline uint64_t PrepareEightDigitsImpl(uint32_t i, bool reversed) {
  266|     24|  ABSL_ASSUME(i < 10000'0000);
  ------------------
  |  |  259|     24|#define ABSL_ASSUME(cond) __builtin_assume(cond)
  ------------------
  267|       |  // Prepare 2 blocks of 4 digits "in parallel".
  268|     24|  uint32_t hi = i / 10000;
  269|     24|  uint32_t lo = i % 10000;
  270|     24|  uint64_t merged = (uint64_t{hi} << (reversed ? 32 : 0)) |
  ------------------
  |  Branch (270:39): [True: 0, False: 24]
  ------------------
  271|     24|                    (uint64_t{lo} << (reversed ? 0 : 32));
  ------------------
  |  Branch (271:39): [True: 0, False: 24]
  ------------------
  272|     24|  uint64_t div100 = ((merged * kDivisionBy100Mul) / kDivisionBy100Div) &
  273|     24|                    ((0x7Full << 32) | 0x7Full);
  274|     24|  uint64_t mod100 = merged - 100ull * div100;
  275|     24|  uint64_t hundreds =
  276|     24|      (mod100 << (reversed ? 0 : 16)) + (div100 << (reversed ? 16 : 0));
  ------------------
  |  Branch (276:19): [True: 0, False: 24]
  |  Branch (276:53): [True: 0, False: 24]
  ------------------
  277|     24|  uint64_t tens = (hundreds * kDivisionBy10Mul) / kDivisionBy10Div;
  278|     24|  tens &= (0xFull << 48) | (0xFull << 32) | (0xFull << 16) | 0xFull;
  279|     24|  tens = (tens << (reversed ? 8 : 0)) +
  ------------------
  |  Branch (279:20): [True: 0, False: 24]
  ------------------
  280|     24|         ((hundreds - 10ull * tens) << (reversed ? 0 : 8));
  ------------------
  |  Branch (280:41): [True: 0, False: 24]
  ------------------
  281|     24|  return tens;
  282|     24|}
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_125FastUIntToStringConverterIjPcE25DoFastIntToBufferBackwardILi4EEEvRjRS3_:
  354|     24|  static void DoFastIntToBufferBackward(T& v, BackwardIt& end) {
  355|     24|    constexpr T kModulus = Pow<T>(10, Exponent);
  356|     24|    T remainder = static_cast<T>(v % kModulus);
  357|     24|    v = static_cast<T>(v / kModulus);
  358|     24|    end = DoFastIntToBufferBackward(remainder, end,
  359|     24|                                    std::integral_constant<int, Exponent>());
  360|     24|  }
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_125FastUIntToStringConverterIjPcE25DoFastIntToBufferBackwardEjS3_NSt3__117integral_constantIiLi4EEE:
  374|     24|                                              std::integral_constant<int, 4>) {
  375|     24|    if (kIsContiguousIterator) {
  ------------------
  |  Branch (375:9): [True: 24, Folded]
  ------------------
  376|     24|      const uint32_t digits =
  377|     24|          PrepareFourDigits(static_cast<uint32_t>(v)) + kFourZeroBytes;
  378|     24|      end -= sizeof(digits);
  379|     24|      little_endian::Store32(&*end, digits);
  380|     24|    } else {
  381|      0|      uint32_t digits =
  382|      0|          PrepareFourDigitsReversed(static_cast<uint32_t>(v)) + kFourZeroBytes;
  383|      0|      for (size_t i = 0; i < sizeof(digits); ++i) {
  ------------------
  |  Branch (383:26): [True: 0, False: 0]
  ------------------
  384|      0|        *--end = static_cast<char>(digits);
  385|       |        digits >>= CHAR_BIT;
  386|      0|      }
  387|      0|    }
  388|     24|    return end;
  389|     24|  }
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_117PrepareFourDigitsEj:
  242|     24|inline uint32_t PrepareFourDigits(uint32_t n) {
  243|     24|  return PrepareFourDigitsImpl(n, false);
  244|     24|}
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_121PrepareFourDigitsImplEjb:
  226|     24|inline uint32_t PrepareFourDigitsImpl(uint32_t n, bool reversed) {
  227|       |  // We split lower 2 digits and upper 2 digits of n into 2 byte consecutive
  228|       |  // blocks. 123 ->  [\0\1][\0\23]. We divide by 10 both blocks
  229|       |  // (it's 1 division + zeroing upper bits), and compute modulo 10 as well "in
  230|       |  // parallel". Then we combine both results to have both ASCII digits,
  231|       |  // strip trailing zeros, add ASCII '0000' and return.
  232|     24|  uint32_t div100 = (n * kDivisionBy100Mul) / kDivisionBy100Div;
  233|     24|  uint32_t mod100 = n - 100ull * div100;
  234|     24|  uint32_t hundreds =
  235|     24|      (mod100 << (reversed ? 0 : 16)) + (div100 << (reversed ? 16 : 0));
  ------------------
  |  Branch (235:19): [True: 0, False: 24]
  |  Branch (235:53): [True: 0, False: 24]
  ------------------
  236|     24|  uint32_t tens = (hundreds * kDivisionBy10Mul) / kDivisionBy10Div;
  237|     24|  tens &= (0xFull << 16) | 0xFull;
  238|     24|  tens = (tens << (reversed ? 8 : 0)) +
  ------------------
  |  Branch (238:20): [True: 0, False: 24]
  ------------------
  239|     24|         static_cast<uint32_t>((hundreds - 10ull * tens) << (reversed ? 0 : 8));
  ------------------
  |  Branch (239:62): [True: 0, False: 24]
  ------------------
  240|     24|  return tens;
  241|     24|}
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_125FastUIntToStringConverterIjPcE25DoFastIntToBufferBackwardILi2EEEvRjRS3_:
  354|     96|  static void DoFastIntToBufferBackward(T& v, BackwardIt& end) {
  355|     96|    constexpr T kModulus = Pow<T>(10, Exponent);
  356|     96|    T remainder = static_cast<T>(v % kModulus);
  357|     96|    v = static_cast<T>(v / kModulus);
  358|     96|    end = DoFastIntToBufferBackward(remainder, end,
  359|     96|                                    std::integral_constant<int, Exponent>());
  360|     96|  }
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_125FastUIntToStringConverterIjPcE25DoFastIntToBufferBackwardILi2EEES3_jS3_NSt3__117integral_constantIiXT_EEE:
  411|     96|      T v, BackwardIt end, std::integral_constant<int, Digits>) {
  412|     96|    constexpr int kLogModulus = Digits - Digits / 2;
  413|     96|    constexpr T kModulus = Pow(static_cast<T>(10), kLogModulus);
  414|     96|    bool is_safe_to_use_division_trick = Digits <= 8;
  415|     96|    T quotient, remainder;
  416|     96|    if (is_safe_to_use_division_trick) {
  ------------------
  |  Branch (416:9): [True: 96, False: 0]
  ------------------
  417|     96|      constexpr uint64_t kCoefficient =
  418|     96|          ComputePowerOf100DivisionCoefficient<uint64_t>(kLogModulus);
  419|     96|      quotient = (v * kCoefficient) >> (10 * kLogModulus);
  420|     96|      remainder = v - quotient * kModulus;
  421|     96|    } else {
  422|      0|      quotient = v / kModulus;
  423|      0|      remainder = v % kModulus;
  424|      0|    }
  425|     96|    end = DoFastIntToBufferBackward(remainder, end,
  426|     96|                                    std::integral_constant<int, kLogModulus>());
  427|     96|    return DoFastIntToBufferBackward(
  428|     96|        quotient, end, std::integral_constant<int, Digits - kLogModulus>());
  429|     96|  }
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_125FastUIntToStringConverterIjPcE25DoFastIntToBufferBackwardEjS3_NSt3__117integral_constantIiLi1EEE:
  368|    216|                                              std::integral_constant<int, 1>) {
  369|    216|    *--end = static_cast<char>('0' + v);
  370|    216|    return DoFastIntToBufferBackward(v, end, std::integral_constant<int, 0>());
  371|    216|  }
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_125FastUIntToStringConverterIjPcE25DoFastIntToBufferBackwardERKjS3_NSt3__117integral_constantIiLi0EEE:
  363|    216|                                              std::integral_constant<int, 0>) {
  364|    216|    return end;
  365|    216|  }
numbers.cc:_ZN4absl12lts_2024011612_GLOBAL__N_125DoFastIntToBufferBackwardIiPcEENSt3__19enable_ifIXsr3std9is_signedIT_EE5valueET0_E4typeES6_S7_j:
  444|     96|DoFastIntToBufferBackward(T v, BackwardIt end, uint32_t digits) {
  445|     96|  if (absl::numbers_internal::IsNegative(v)) {
  ------------------
  |  Branch (445:7): [True: 0, False: 96]
  ------------------
  446|       |    // Store the minus sign *before* we produce the number itself, not after.
  447|       |    // This gets us a tail call.
  448|      0|    end[-static_cast<ptrdiff_t>(digits) - 1] = '-';
  449|      0|  }
  450|     96|  return DoFastIntToBufferBackward(
  451|     96|      absl::numbers_internal::UnsignedAbsoluteValue(v), end, digits);
  452|     96|}

_ZN4absl12lts_2024011616numbers_internal12Base10DigitsIjEENSt3__19enable_ifIXsr3std11is_unsignedIT_EE5valueEjE4typeES5_j:
  199|     96|    T v, const uint32_t initial_digits = 1) {
  200|     96|  uint32_t r = initial_digits;
  201|       |  // If code size becomes an issue, the 'if' stage can be removed for a minor
  202|       |  // performance loss.
  203|    120|  for (;;) {
  204|    120|    if (ABSL_PREDICT_TRUE(v < 10 * 10)) {
  ------------------
  |  |  179|    120|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 24, False: 96]
  |  |  |  Branch (179:48): [Folded, False: 120]
  |  |  |  Branch (179:57): [True: 24, False: 96]
  |  |  ------------------
  ------------------
  205|     24|      r += (v >= 10);
  206|     24|      break;
  207|     24|    }
  208|     96|    if (ABSL_PREDICT_TRUE(v < 1000 * 10)) {
  ------------------
  |  |  179|     96|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 48, False: 48]
  |  |  |  Branch (179:48): [Folded, False: 96]
  |  |  |  Branch (179:57): [True: 48, False: 48]
  |  |  ------------------
  ------------------
  209|     48|      r += (v >= 1000) + 2;
  210|     48|      break;
  211|     48|    }
  212|     48|    if (ABSL_PREDICT_TRUE(v < 100000 * 10)) {
  ------------------
  |  |  179|     48|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 24, False: 24]
  |  |  |  Branch (179:48): [Folded, False: 48]
  |  |  |  Branch (179:57): [True: 24, False: 24]
  |  |  ------------------
  ------------------
  213|     24|      r += (v >= 100000) + 4;
  214|     24|      break;
  215|     24|    }
  216|     24|    r += 6;
  217|     24|    v = static_cast<T>(v / 1000000);
  218|     24|  }
  219|     96|  return r;
  220|     96|}
_ZN4absl12lts_2024011616numbers_internal21UnsignedAbsoluteValueIiEENSt3__19enable_ifIXntsr3std11is_unsignedIT_EE5valueEu15__make_unsignedIS5_EE4typeES5_:
  187|    192|    UnsignedAbsoluteValue(T v) {
  188|    192|  using U = std::make_unsigned_t<T>;
  189|    192|  return IsNegative(v) ? U() - static_cast<U>(v) : static_cast<U>(v);
  ------------------
  |  Branch (189:10): [True: 0, False: 192]
  ------------------
  190|    192|}
_ZN4absl12lts_2024011616numbers_internal10IsNegativeIiEENSt3__19enable_ifIXntsr3std11is_unsignedIT_EE5valueEbE4typeERKS5_:
  165|    288|std::enable_if_t<!std::is_unsigned<T>::value, bool> IsNegative(const T& v) {
  166|    288|  return v < T();
  167|    288|}

_ZN4absl12lts_202401166StrCatERKNS0_8AlphaNumES3_:
   58|  62.1k|std::string StrCat(const AlphaNum& a, const AlphaNum& b) {
   59|  62.1k|  std::string result;
   60|  62.1k|  absl::strings_internal::STLStringResizeUninitialized(&result,
   61|  62.1k|                                                       a.size() + b.size());
   62|  62.1k|  char* const begin = &result[0];
   63|  62.1k|  char* out = begin;
   64|  62.1k|  out = Append(out, a);
   65|  62.1k|  out = Append(out, b);
   66|       |  assert(out == begin + result.size());
   67|  62.1k|  return result;
   68|  62.1k|}
_ZN4absl12lts_202401166StrCatERKNS0_8AlphaNumES3_S3_:
   70|    406|std::string StrCat(const AlphaNum& a, const AlphaNum& b, const AlphaNum& c) {
   71|    406|  std::string result;
   72|    406|  strings_internal::STLStringResizeUninitialized(
   73|    406|      &result, a.size() + b.size() + c.size());
   74|    406|  char* const begin = &result[0];
   75|    406|  char* out = begin;
   76|    406|  out = Append(out, a);
   77|    406|  out = Append(out, b);
   78|    406|  out = Append(out, c);
   79|       |  assert(out == begin + result.size());
   80|    406|  return result;
   81|    406|}
_ZN4absl12lts_2024011616strings_internal37STLStringAppendUninitializedAmortizedEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEm:
  102|      5|                                           size_t to_append) {
  103|      5|  strings_internal::AppendUninitializedTraits<std::string>::Append(dest,
  104|      5|                                                                   to_append);
  105|      5|}
_ZN4absl12lts_2024011616strings_internal9CatPiecesESt16initializer_listINSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEE:
  225|     38|std::string CatPieces(std::initializer_list<absl::string_view> pieces) {
  226|     38|  std::string result;
  227|     38|  size_t total_size = 0;
  228|    190|  for (absl::string_view piece : pieces) total_size += piece.size();
  ------------------
  |  Branch (228:32): [True: 190, False: 38]
  ------------------
  229|     38|  strings_internal::STLStringResizeUninitialized(&result, total_size);
  230|       |
  231|     38|  char* const begin = &result[0];
  232|     38|  char* out = begin;
  233|    190|  for (absl::string_view piece : pieces) {
  ------------------
  |  Branch (233:32): [True: 190, False: 38]
  ------------------
  234|    190|    const size_t this_size = piece.size();
  235|    190|    if (this_size != 0) {
  ------------------
  |  Branch (235:9): [True: 190, False: 0]
  ------------------
  236|    190|      memcpy(out, piece.data(), this_size);
  237|    190|      out += this_size;
  238|    190|    }
  239|    190|  }
  240|       |  assert(out == begin + result.size());
  241|     38|  return result;
  242|     38|}
_ZN4absl12lts_202401169StrAppendEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS0_8AlphaNumESB_:
  288|      5|               const AlphaNum& b) {
  289|      5|  ASSERT_NO_OVERLAP(*dest, a);
  ------------------
  |  |  250|      5|  assert(((src).size() == 0) ||      \
  |  |  251|      5|         (uintptr_t((src).data() - (dest).data()) > uintptr_t((dest).size())))
  ------------------
  290|      5|  ASSERT_NO_OVERLAP(*dest, b);
  ------------------
  |  |  250|      5|  assert(((src).size() == 0) ||      \
  |  |  251|      5|         (uintptr_t((src).data() - (dest).data()) > uintptr_t((dest).size())))
  ------------------
  291|      5|  std::string::size_type old_size = dest->size();
  292|      5|  strings_internal::STLStringAppendUninitializedAmortized(dest,
  293|      5|                                                          a.size() + b.size());
  294|      5|  char* const begin = &(*dest)[0];
  295|      5|  char* out = begin + old_size;
  296|      5|  out = Append(out, a);
  297|      5|  out = Append(out, b);
  298|       |  assert(out == begin + dest->size());
  299|      5|}
str_cat.cc:_ZN4absl12lts_2024011612_GLOBAL__N_16AppendEPcRKNS0_8AlphaNumE:
   46|   125k|absl::Nonnull<char*> Append(absl::Nonnull<char*> out, const AlphaNum& x) {
   47|       |  // memcpy is allowed to overwrite arbitrary memory, so doing this after the
   48|       |  // call would force an extra fetch of x.size().
   49|   125k|  char* after = out + x.size();
   50|   125k|  if (x.size() != 0) {
  ------------------
  |  Branch (50:7): [True: 125k, False: 1]
  ------------------
   51|   125k|    memcpy(out, x.data(), x.size());
   52|   125k|  }
   53|   125k|  return after;
   54|   125k|}

_ZN4absl12lts_202401168AlphaNumC2EPKc:
  353|   124k|      : piece_(NullSafeStringView(c_str)) {}
_ZN4absl12lts_202401168AlphaNumC2ENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  356|    817|      : piece_(pc) {}
_ZNK4absl12lts_202401168AlphaNum4sizeEv:
  377|   502k|  absl::string_view::size_type size() const { return piece_.size(); }
_ZNK4absl12lts_202401168AlphaNum4dataEv:
  378|   125k|  absl::Nullable<const char*> data() const { return piece_.data(); }
_ZNK4absl12lts_202401168AlphaNum5PieceEv:
  379|    190|  absl::string_view Piece() const { return piece_; }
_ZN4absl12lts_202401168AlphaNumC2INSt3__19allocatorIcEEEERKNS3_12basic_stringIcNS3_11char_traitsIcEET_EE:
  369|     89|      : piece_(str) {}
_ZN4absl12lts_202401166StrCatIJEEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_8AlphaNumESB_SB_SB_SB_DpRKT_:
  504|     38|    const AlphaNum& e, const AV&... args) {
  505|     38|  return strings_internal::CatPieces(
  506|     38|      {a.Piece(), b.Piece(), c.Piece(), d.Piece(), e.Piece(),
  507|     38|       static_cast<const AlphaNum&>(args).Piece()...});
  508|     38|}

_ZN4absl12lts_2024011617UntypedFormatSpecC2ENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  111|     24|  explicit UntypedFormatSpec(string_view s) : spec_(s) {}
_ZN4absl12lts_202401168SNPrintFIJciiiEEEiPcmRKNS0_19str_format_internal18FormatSpecTemplateIJXspclsr19str_format_internalE14ArgumentToConvIT_EEEEEEDpRKS5_:
  470|     24|             const FormatSpec<Args...>& format, const Args&... args) {
  471|     24|  return str_format_internal::SnprintF(
  472|     24|      output, size, str_format_internal::UntypedFormatSpecImpl::Extract(format),
  473|     24|      {str_format_internal::FormatArgImpl(args)...});
  474|     24|}

_ZN4absl12lts_2024011618NullSafeStringViewEPKc:
  762|   124k|constexpr string_view NullSafeStringView(absl::Nullable<const char*> p) {
  763|   124k|  return p ? string_view(p) : string_view();
  ------------------
  |  Branch (763:10): [True: 124k, False: 0]
  ------------------
  764|   124k|}

_ZN4absl12lts_2024011624synchronization_internal14InvalidGraphIdEv:
   58|  4.08k|inline GraphId InvalidGraphId() {
   59|  4.08k|  return GraphId{0};
   60|  4.08k|}

_ZN4absl12lts_202401165Mutex4LockEv:
 1524|     72|void Mutex::Lock() {
 1525|     72|  ABSL_TSAN_MUTEX_PRE_LOCK(this, 0);
 1526|     72|  GraphId id = DebugOnlyDeadlockCheck(this);
 1527|     72|  intptr_t v = mu_.load(std::memory_order_relaxed);
 1528|       |  // try fast acquire, then spin loop
 1529|     72|  if (ABSL_PREDICT_FALSE((v & (kMuWriter | kMuReader | kMuEvent)) != 0) ||
  ------------------
  |  |  178|    144|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 72]
  |  |  |  Branch (178:49): [Folded, False: 72]
  |  |  |  Branch (178:58): [True: 0, False: 72]
  |  |  ------------------
  ------------------
 1530|     72|      ABSL_PREDICT_FALSE(!mu_.compare_exchange_strong(
  ------------------
  |  |  178|     72|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 72]
  |  |  |  Branch (178:49): [Folded, False: 72]
  |  |  |  Branch (178:58): [True: 0, False: 72]
  |  |  ------------------
  ------------------
 1531|     72|          v, kMuWriter | v, std::memory_order_acquire,
 1532|     72|          std::memory_order_relaxed))) {
 1533|       |    // try spin acquire, then slow loop
 1534|      0|    if (ABSL_PREDICT_FALSE(!TryAcquireWithSpinning(&this->mu_))) {
  ------------------
  |  |  178|      0|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 0]
  |  |  |  Branch (178:49): [Folded, False: 0]
  |  |  |  Branch (178:58): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1535|      0|      this->LockSlow(kExclusive, nullptr, 0);
 1536|      0|    }
 1537|      0|  }
 1538|     72|  DebugOnlyLockEnter(this, id);
 1539|     72|  ABSL_TSAN_MUTEX_POST_LOCK(this, 0, 0);
 1540|     72|}
_ZN4absl12lts_202401165Mutex10ReaderLockEv:
 1542|  4.01k|void Mutex::ReaderLock() {
 1543|  4.01k|  ABSL_TSAN_MUTEX_PRE_LOCK(this, __tsan_mutex_read_lock);
 1544|  4.01k|  GraphId id = DebugOnlyDeadlockCheck(this);
 1545|  4.01k|  intptr_t v = mu_.load(std::memory_order_relaxed);
 1546|  4.01k|  for (;;) {
 1547|       |    // If there are non-readers holding the lock, use the slow loop.
 1548|  4.01k|    if (ABSL_PREDICT_FALSE(v & (kMuWriter | kMuWait | kMuEvent)) != 0) {
  ------------------
  |  |  178|  4.01k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:49): [Folded, False: 4.01k]
  |  |  |  Branch (178:58): [True: 0, False: 4.01k]
  |  |  ------------------
  ------------------
  |  Branch (1548:9): [True: 0, False: 4.01k]
  ------------------
 1549|      0|      this->LockSlow(kShared, nullptr, 0);
 1550|      0|      break;
 1551|      0|    }
 1552|       |    // We can avoid the loop and only use the CAS when the lock is free or
 1553|       |    // only held by readers.
 1554|  4.01k|    if (ABSL_PREDICT_TRUE(mu_.compare_exchange_weak(
  ------------------
  |  |  179|  4.01k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 4.01k, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 4.01k]
  |  |  |  Branch (179:57): [True: 4.01k, False: 0]
  |  |  ------------------
  ------------------
 1555|  4.01k|            v, (kMuReader | v) + kMuOne, std::memory_order_acquire,
 1556|  4.01k|            std::memory_order_relaxed))) {
 1557|  4.01k|      break;
 1558|  4.01k|    }
 1559|  4.01k|  }
 1560|  4.01k|  DebugOnlyLockEnter(this, id);
 1561|  4.01k|  ABSL_TSAN_MUTEX_POST_LOCK(this, __tsan_mutex_read_lock, 0);
 1562|  4.01k|}
_ZN4absl12lts_202401165Mutex6UnlockEv:
 1702|     72|void Mutex::Unlock() {
 1703|     72|  ABSL_TSAN_MUTEX_PRE_UNLOCK(this, 0);
 1704|     72|  DebugOnlyLockLeave(this);
 1705|     72|  intptr_t v = mu_.load(std::memory_order_relaxed);
 1706|       |
 1707|     72|  if (kDebugMode && ((v & (kMuWriter | kMuReader)) != kMuWriter)) {
  ------------------
  |  Branch (1707:7): [Folded, False: 72]
  |  Branch (1707:21): [True: 0, False: 0]
  ------------------
 1708|      0|    ABSL_RAW_LOG(FATAL, "Mutex unlocked when destroyed or not locked: v=0x%x",
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1709|      0|                 static_cast<unsigned>(v));
 1710|      0|  }
 1711|       |
 1712|       |  // should_try_cas is whether we'll try a compare-and-swap immediately.
 1713|       |  // NOTE: optimized out when kDebugMode is false.
 1714|     72|  bool should_try_cas = ((v & (kMuEvent | kMuWriter)) == kMuWriter &&
  ------------------
  |  Branch (1714:26): [True: 72, False: 0]
  ------------------
 1715|     72|                         (v & (kMuWait | kMuDesig)) != kMuWait);
  ------------------
  |  Branch (1715:26): [True: 72, False: 0]
  ------------------
 1716|       |  // But, we can use an alternate computation of it, that compilers
 1717|       |  // currently don't find on their own.  When that changes, this function
 1718|       |  // can be simplified.
 1719|     72|  intptr_t x = (v ^ (kMuWriter | kMuWait)) & (kMuWriter | kMuEvent);
 1720|     72|  intptr_t y = (v ^ (kMuWriter | kMuWait)) & (kMuWait | kMuDesig);
 1721|       |  // Claim: "x == 0 && y > 0" is equal to should_try_cas.
 1722|       |  // Also, because kMuWriter and kMuEvent exceed kMuDesig and kMuWait,
 1723|       |  // all possible non-zero values for x exceed all possible values for y.
 1724|       |  // Therefore, (x == 0 && y > 0) == (x < y).
 1725|     72|  if (kDebugMode && should_try_cas != (x < y)) {
  ------------------
  |  Branch (1725:7): [Folded, False: 72]
  |  Branch (1725:21): [True: 0, False: 0]
  ------------------
 1726|       |    // We would usually use PRIdPTR here, but is not correctly implemented
 1727|       |    // within the android toolchain.
 1728|      0|    ABSL_RAW_LOG(FATAL, "internal logic error %llx %llx %llx\n",
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1729|      0|                 static_cast<long long>(v), static_cast<long long>(x),
 1730|      0|                 static_cast<long long>(y));
 1731|      0|  }
 1732|     72|  if (x < y && mu_.compare_exchange_strong(v, v & ~(kMuWrWait | kMuWriter),
  ------------------
  |  Branch (1732:7): [True: 72, False: 0]
  |  Branch (1732:16): [True: 72, False: 0]
  ------------------
 1733|     72|                                           std::memory_order_release,
 1734|     72|                                           std::memory_order_relaxed)) {
 1735|       |    // fast writer release (writer with no waiters or with designated waker)
 1736|     72|  } else {
 1737|      0|    this->UnlockSlow(nullptr /*no waitp*/);  // take slow path
 1738|      0|  }
 1739|     72|  ABSL_TSAN_MUTEX_POST_UNLOCK(this, 0);
 1740|     72|}
_ZN4absl12lts_202401165Mutex12ReaderUnlockEv:
 1753|  4.01k|void Mutex::ReaderUnlock() {
 1754|  4.01k|  ABSL_TSAN_MUTEX_PRE_UNLOCK(this, __tsan_mutex_read_lock);
 1755|  4.01k|  DebugOnlyLockLeave(this);
 1756|  4.01k|  intptr_t v = mu_.load(std::memory_order_relaxed);
 1757|  4.01k|  assert((v & (kMuWriter | kMuReader)) == kMuReader);
 1758|  4.01k|  for (;;) {
 1759|  4.01k|    if (ABSL_PREDICT_FALSE((v & (kMuReader | kMuWait | kMuEvent)) !=
  ------------------
  |  |  178|  4.01k|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  ------------------
  |  |  |  Branch (178:31): [True: 0, False: 4.01k]
  |  |  |  Branch (178:49): [Folded, False: 4.01k]
  |  |  |  Branch (178:58): [True: 0, False: 4.01k]
  |  |  ------------------
  ------------------
 1760|  4.01k|                           kMuReader)) {
 1761|      0|      this->UnlockSlow(nullptr /*no waitp*/);  // take slow path
 1762|      0|      break;
 1763|      0|    }
 1764|       |    // fast reader release (reader with no waiters)
 1765|  4.01k|    intptr_t clear = ExactlyOneReader(v) ? kMuReader | kMuOne : kMuOne;
  ------------------
  |  Branch (1765:22): [True: 4.01k, False: 0]
  ------------------
 1766|  4.01k|    if (ABSL_PREDICT_TRUE(
  ------------------
  |  |  179|  4.01k|#define ABSL_PREDICT_TRUE(x) (__builtin_expect(false || (x), true))
  |  |  ------------------
  |  |  |  Branch (179:30): [True: 4.01k, False: 0]
  |  |  |  Branch (179:48): [Folded, False: 4.01k]
  |  |  |  Branch (179:57): [True: 4.01k, False: 0]
  |  |  ------------------
  ------------------
 1767|  4.01k|            mu_.compare_exchange_strong(v, v - clear, std::memory_order_release,
 1768|  4.01k|                                        std::memory_order_relaxed))) {
 1769|  4.01k|      break;
 1770|  4.01k|    }
 1771|  4.01k|  }
 1772|  4.01k|  ABSL_TSAN_MUTEX_POST_UNLOCK(this, __tsan_mutex_read_lock);
 1773|  4.01k|}
_ZNK4absl12lts_202401165Mutex10AssertHeldEv:
 2470|     14|void Mutex::AssertHeld() const {
 2471|     14|  if ((mu_.load(std::memory_order_relaxed) & kMuWriter) == 0) {
  ------------------
  |  Branch (2471:7): [True: 0, False: 14]
  ------------------
 2472|      0|    SynchEvent* e = GetSynchEvent(this);
 2473|       |    ABSL_RAW_LOG(FATAL, "thread should hold write lock on Mutex %p %s",
  ------------------
  |  |   45|      0|  do {                                                                         \
  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  ------------------
  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  ------------------
  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |  ------------------
  |  |  |  Branch (50:38): [True: 0, False: 0]
  |  |  ------------------
  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  ------------------
  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  ------------------
  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   52|      0|  } while (0)
  |  |  ------------------
  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 2474|      0|                 static_cast<const void*>(this), (e == nullptr ? "" : e->name));
 2475|      0|  }
 2476|     14|}
mutex.cc:_ZN4absl12lts_20240116L22DebugOnlyDeadlockCheckEPNS0_5MutexE:
 1466|  4.08k|static inline GraphId DebugOnlyDeadlockCheck(Mutex* mu) {
 1467|  4.08k|  if (kDebugMode && synch_deadlock_detection.load(std::memory_order_acquire) !=
  ------------------
  |  Branch (1467:7): [Folded, False: 4.08k]
  |  Branch (1467:21): [True: 0, False: 0]
  ------------------
 1468|      0|                        OnDeadlockCycle::kIgnore) {
 1469|      0|    return DeadlockCheck(mu);
 1470|  4.08k|  } else {
 1471|  4.08k|    return InvalidGraphId();
 1472|  4.08k|  }
 1473|  4.08k|}
mutex.cc:_ZN4absl12lts_20240116L18DebugOnlyLockEnterEPNS0_5MutexENS0_24synchronization_internal7GraphIdE:
 1298|  4.08k|static inline void DebugOnlyLockEnter(Mutex* mu, GraphId id) {
 1299|  4.08k|  if (kDebugMode) {
  ------------------
  |  Branch (1299:7): [Folded, False: 4.08k]
  ------------------
 1300|      0|    if (synch_deadlock_detection.load(std::memory_order_acquire) !=
  ------------------
  |  Branch (1300:9): [True: 0, False: 0]
  ------------------
 1301|      0|        OnDeadlockCycle::kIgnore) {
 1302|      0|      LockEnter(mu, id, Synch_GetAllLocks());
 1303|      0|    }
 1304|      0|  }
 1305|  4.08k|}
mutex.cc:_ZN4absl12lts_20240116L18DebugOnlyLockLeaveEPNS0_5MutexE:
 1308|  4.08k|static inline void DebugOnlyLockLeave(Mutex* mu) {
 1309|  4.08k|  if (kDebugMode) {
  ------------------
  |  Branch (1309:7): [Folded, False: 4.08k]
  ------------------
 1310|      0|    if (synch_deadlock_detection.load(std::memory_order_acquire) !=
  ------------------
  |  Branch (1310:9): [True: 0, False: 0]
  ------------------
 1311|      0|        OnDeadlockCycle::kIgnore) {
 1312|      0|      LockLeave(mu, GetGraphId(mu), Synch_GetAllLocks());
 1313|      0|    }
 1314|      0|  }
 1315|  4.08k|}
mutex.cc:_ZN4absl12lts_20240116L16ExactlyOneReaderEl:
 1743|  4.01k|static bool ExactlyOneReader(intptr_t v) {
 1744|  4.01k|  assert((v & (kMuWriter | kMuReader)) == kMuReader);
 1745|  4.01k|  assert((v & kMuHigh) != 0);
 1746|       |  // The more straightforward "(v & kMuHigh) == kMuOne" also works, but
 1747|       |  // on some architectures the following generates slightly smaller code.
 1748|       |  // It may be faster too.
 1749|  4.01k|  constexpr intptr_t kMuMultipleWaitersMask = kMuHigh ^ kMuOne;
 1750|  4.01k|  return (v & kMuMultipleWaitersMask) == 0;
 1751|  4.01k|}

_ZN4absl12lts_202401165Mutex10WriterLockEv:
  280|      2|  void WriterLock() ABSL_EXCLUSIVE_LOCK_FUNCTION() { this->Lock(); }
_ZN4absl12lts_202401165Mutex12WriterUnlockEv:
  282|      2|  void WriterUnlock() ABSL_UNLOCK_FUNCTION() { this->Unlock(); }
_ZN4absl12lts_202401169MutexLockC2EPNS0_5MutexE:
  583|     55|  explicit MutexLock(Mutex* mu) ABSL_EXCLUSIVE_LOCK_FUNCTION(mu) : mu_(mu) {
  584|     55|    this->mu_->Lock();
  585|     55|  }
_ZN4absl12lts_202401169MutexLockD2Ev:
  601|     55|  ~MutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_->Unlock(); }
_ZN4absl12lts_2024011615ReaderMutexLockC2EPNS0_5MutexE:
  613|  4.01k|  explicit ReaderMutexLock(Mutex* mu) ABSL_SHARED_LOCK_FUNCTION(mu) : mu_(mu) {
  614|  4.01k|    mu->ReaderLock();
  615|  4.01k|  }
_ZN4absl12lts_2024011615ReaderMutexLockD2Ev:
  628|  4.01k|  ~ReaderMutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_->ReaderUnlock(); }
_ZN4absl12lts_2024011615WriterMutexLockC2EPNS0_5MutexE:
  641|      2|      : mu_(mu) {
  642|      2|    mu->WriterLock();
  643|      2|  }
_ZN4absl12lts_2024011615WriterMutexLockD2Ev:
  656|      2|  ~WriterMutexLock() ABSL_UNLOCK_FUNCTION() { this->mu_->WriterUnlock(); }
_ZN4absl12lts_2024011614MutexLockMaybeC2EPNS0_5MutexE:
 1000|    109|      : mu_(mu) {
 1001|    109|    if (this->mu_ != nullptr) {
  ------------------
  |  Branch (1001:9): [True: 11, False: 98]
  ------------------
 1002|     11|      this->mu_->Lock();
 1003|     11|    }
 1004|    109|  }
_ZN4absl12lts_2024011614MutexLockMaybeD2Ev:
 1014|    109|  ~MutexLockMaybe() ABSL_UNLOCK_FUNCTION() {
 1015|    109|    if (this->mu_ != nullptr) {
  ------------------
  |  Branch (1015:9): [True: 11, False: 98]
  ------------------
 1016|     11|      this->mu_->Unlock();
 1017|     11|    }
 1018|    109|  }
_ZN4absl12lts_202401165Mutex4DtorEv:
 1079|     10|inline void Mutex::Dtor() {}
_ZN4absl12lts_202401165MutexC2Ev:
 1061|     22|inline Mutex::Mutex() : mu_(0) {
 1062|     22|  ABSL_TSAN_MUTEX_CREATE(this, __tsan_mutex_not_static);
 1063|     22|}
_ZN4absl12lts_202401165MutexD2Ev:
 1069|     10|inline Mutex::~Mutex() { Dtor(); }

_ZN4absl12lts_202401163NowEv:
   39|     24|Time Now() {
   40|       |  // TODO(bww): Get a timespec instead so we don't have to divide.
   41|     24|  int64_t n = absl::GetCurrentTimeNanos();
   42|     24|  if (n >= 0) {
  ------------------
  |  Branch (42:7): [True: 24, False: 0]
  ------------------
   43|     24|    return time_internal::FromUnixDuration(
   44|     24|        time_internal::MakeDuration(n / 1000000000, n % 1000000000 * 4));
   45|     24|  }
   46|      0|  return time_internal::FromUnixDuration(absl::Nanoseconds(n));
   47|     24|}
_ZN4absl12lts_2024011619GetCurrentTimeNanosEv:
   77|     24|int64_t GetCurrentTimeNanos() { return GET_CURRENT_TIME_NANOS_FROM_SYSTEM(); }
  ------------------
  |  |   71|     24|  ::absl::time_internal::GetCurrentTimeNanosFromSystem()
  ------------------

clock.cc:_ZN4absl12lts_2024011613time_internalL29GetCurrentTimeNanosFromSystemEv:
   13|     24|static int64_t GetCurrentTimeNanosFromSystem() {
   14|     24|  const int64_t kNanosPerSecond = 1000 * 1000 * 1000;
   15|     24|  struct timespec ts;
   16|     24|  ABSL_RAW_CHECK(clock_gettime(CLOCK_REALTIME, &ts) == 0,
  ------------------
  |  |   60|     24|  do {                                                                 \
  |  |   61|     24|    if (ABSL_PREDICT_FALSE(!(condition))) {                            \
  |  |  ------------------
  |  |  |  |  178|     24|#define ABSL_PREDICT_FALSE(x) (__builtin_expect(false || (x), false))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (178:31): [True: 0, False: 24]
  |  |  |  |  |  Branch (178:49): [Folded, False: 24]
  |  |  |  |  |  Branch (178:58): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   62|      0|      ABSL_RAW_LOG(FATAL, "Check %s failed: %s", #condition, message); \
  |  |  ------------------
  |  |  |  |   45|      0|  do {                                                                         \
  |  |  |  |   46|      0|    constexpr const char* absl_raw_log_internal_basename =                     \
  |  |  |  |   47|      0|        ::absl::raw_log_internal::Basename(__FILE__, sizeof(__FILE__) - 1);    \
  |  |  |  |   48|      0|    ::absl::raw_log_internal::RawLog(ABSL_RAW_LOG_INTERNAL_##severity,         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  110|      0|#define ABSL_RAW_LOG_INTERNAL_FATAL ::absl::LogSeverity::kFatal
  |  |  |  |  ------------------
  |  |  |  |   49|      0|                                     absl_raw_log_internal_basename, __LINE__, \
  |  |  |  |   50|      0|                                     __VA_ARGS__);                             \
  |  |  |  |   51|      0|    ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_##severity;                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  118|      0|#define ABSL_RAW_LOG_INTERNAL_MAYBE_UNREACHABLE_FATAL ABSL_UNREACHABLE()
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  225|      0|  do {                                           \
  |  |  |  |  |  |  |  |  226|      0|    /* NOLINTNEXTLINE: misc-static-assert */     \
  |  |  |  |  |  |  |  |  227|      0|    assert(false && "ABSL_UNREACHABLE reached"); \
  |  |  |  |  |  |  |  |  228|      0|    ABSL_INTERNAL_UNREACHABLE_IMPL();            \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  203|      0|#define ABSL_INTERNAL_UNREACHABLE_IMPL() __builtin_unreachable()
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  229|      0|  } while (false)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (229:12): [Folded, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |   52|      0|  } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (52:12): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   63|      0|    }                                                                  \
  |  |   64|     24|  } while (0)
  |  |  ------------------
  |  |  |  Branch (64:12): [Folded, False: 24]
  |  |  ------------------
  ------------------
   17|     24|                 "Failed to read real-time clock.");
   18|     24|  return (int64_t{ts.tv_sec} * kNanosPerSecond +
   19|     24|          int64_t{ts.tv_nsec});
   20|     24|}

_ZN4absl12lts_2024011610ToTimespecENS0_4TimeE:
  302|     24|timespec ToTimespec(Time t) {
  303|     24|  timespec ts;
  304|     24|  absl::Duration d = time_internal::ToUnixDuration(t);
  305|     24|  if (!time_internal::IsInfiniteDuration(d)) {
  ------------------
  |  Branch (305:7): [True: 24, False: 0]
  ------------------
  306|     24|    ts.tv_sec = static_cast<decltype(ts.tv_sec)>(time_internal::GetRepHi(d));
  307|     24|    if (ts.tv_sec == time_internal::GetRepHi(d)) {  // no time_t narrowing
  ------------------
  |  Branch (307:9): [True: 24, False: 0]
  ------------------
  308|     24|      ts.tv_nsec = time_internal::GetRepLo(d) / 4;  // floor
  309|     24|      return ts;
  310|     24|    }
  311|     24|  }
  312|      0|  if (d >= absl::ZeroDuration()) {
  ------------------
  |  Branch (312:7): [True: 0, False: 0]
  ------------------
  313|      0|    ts.tv_sec = std::numeric_limits<time_t>::max();
  314|      0|    ts.tv_nsec = 1000 * 1000 * 1000 - 1;
  315|      0|  } else {
  316|      0|    ts.tv_sec = std::numeric_limits<time_t>::min();
  317|      0|    ts.tv_nsec = 0;
  318|      0|  }
  319|      0|  return ts;
  320|     24|}
_ZN4absl12lts_202401169ToTimevalENS0_4TimeE:
  322|     24|timeval ToTimeval(Time t) {
  323|     24|  timeval tv;
  324|     24|  timespec ts = absl::ToTimespec(t);
  325|     24|  tv.tv_sec = static_cast<decltype(tv.tv_sec)>(ts.tv_sec);
  326|     24|  if (tv.tv_sec != ts.tv_sec) {  // narrowing
  ------------------
  |  Branch (326:7): [True: 0, False: 24]
  ------------------
  327|      0|    if (ts.tv_sec < 0) {
  ------------------
  |  Branch (327:9): [True: 0, False: 0]
  ------------------
  328|      0|      tv.tv_sec = std::numeric_limits<decltype(tv.tv_sec)>::min();
  329|      0|      tv.tv_usec = 0;
  330|      0|    } else {
  331|      0|      tv.tv_sec = std::numeric_limits<decltype(tv.tv_sec)>::max();
  332|      0|      tv.tv_usec = 1000 * 1000 - 1;
  333|      0|    }
  334|      0|    return tv;
  335|      0|  }
  336|     24|  tv.tv_usec = static_cast<int>(ts.tv_nsec / 1000);  // suseconds_t
  337|     24|  return tv;
  338|     24|}

_ZN4absl12lts_202401168DurationC2Ev:
  169|     24|  constexpr Duration() : rep_hi_(0), rep_lo_(0) {}  // zero-length duration
_ZN4absl12lts_202401168DurationC2Elj:
  231|     24|  constexpr Duration(int64_t hi, uint32_t lo) : rep_hi_(hi), rep_lo_(lo) {}
_ZN4absl12lts_202401168Duration5HiRepC2El:
  251|     48|          lo_(0),
  252|     48|          hi_(0)
  253|       |#endif
  254|     48|    {
  255|     48|      *this = value;
  256|     48|    }
_ZNK4absl12lts_202401168Duration5HiRep3GetEv:
  258|     24|    constexpr int64_t Get() const {
  259|     24|      const uint64_t unsigned_value =
  260|     24|          (static_cast<uint64_t>(hi_) << 32) | static_cast<uint64_t>(lo_);
  261|       |      // `static_cast<int64_t>(unsigned_value)` is implementation-defined
  262|       |      // before c++20. On all supported platforms the behaviour is that mandated
  263|       |      // by c++20, i.e. "If the destination type is signed, [...] the result is
  264|       |      // the unique value of the destination type equal to the source value
  265|       |      // modulo 2^n, where n is the number of bits used to represent the
  266|       |      // destination type."
  267|     24|      static_assert(
  268|     24|          (static_cast<int64_t>((std::numeric_limits<uint64_t>::max)()) ==
  269|     24|           int64_t{-1}) &&
  270|     24|              (static_cast<int64_t>(static_cast<uint64_t>(
  271|     24|                                        (std::numeric_limits<int64_t>::max)()) +
  272|     24|                                    1) ==
  273|     24|               (std::numeric_limits<int64_t>::min)()),
  274|     24|          "static_cast<int64_t>(uint64_t) does not have c++20 semantics");
  275|     24|      return static_cast<int64_t>(unsigned_value);
  276|     24|    }
_ZN4absl12lts_202401168Duration5HiRepaSEl:
  278|     48|    constexpr HiRep& operator=(const int64_t value) {
  279|       |      // "If the destination type is unsigned, the resulting value is the
  280|       |      // smallest unsigned value equal to the source value modulo 2^n
  281|       |      // where `n` is the number of bits used to represent the destination
  282|       |      // type".
  283|     48|      const auto unsigned_value = static_cast<uint64_t>(value);
  284|     48|      hi_ = static_cast<uint32_t>(unsigned_value >> 32);
  285|     48|      lo_ = static_cast<uint32_t>(unsigned_value);
  286|     48|      return *this;
  287|     48|    }
_ZN4absl12lts_202401164TimeC2ENS0_8DurationE:
  850|     24|  constexpr explicit Time(Duration rep) : rep_(rep) {}
_ZN4absl12lts_2024011613time_internal12MakeDurationElj:
 1561|     24|                                                              uint32_t lo = 0) {
 1562|     24|  return Duration(hi, lo);
 1563|     24|}
_ZN4absl12lts_2024011613time_internal12MakeDurationEll:
 1566|     24|                                                              int64_t lo) {
 1567|     24|  return MakeDuration(hi, static_cast<uint32_t>(lo));
 1568|     24|}
_ZN4absl12lts_2024011613time_internal8GetRepHiENS0_8DurationE:
 1593|     24|ABSL_ATTRIBUTE_CONST_FUNCTION constexpr int64_t GetRepHi(Duration d) {
 1594|     24|  return d.rep_hi_.Get();
 1595|     24|}
_ZN4absl12lts_2024011613time_internal8GetRepLoENS0_8DurationE:
 1596|     48|ABSL_ATTRIBUTE_CONST_FUNCTION constexpr uint32_t GetRepLo(Duration d) {
 1597|     48|  return d.rep_lo_;
 1598|     48|}
_ZN4absl12lts_2024011613time_internal18IsInfiniteDurationENS0_8DurationE:
 1601|     24|ABSL_ATTRIBUTE_CONST_FUNCTION constexpr bool IsInfiniteDuration(Duration d) {
 1602|     24|  return GetRepLo(d) == ~uint32_t{0};
 1603|     24|}
_ZN4absl12lts_2024011613time_internal16FromUnixDurationENS0_8DurationE:
 1626|     24|ABSL_ATTRIBUTE_CONST_FUNCTION constexpr Time FromUnixDuration(Duration d) {
 1627|     24|  return Time(d);
 1628|     24|}
_ZN4absl12lts_2024011613time_internal14ToUnixDurationENS0_4TimeE:
 1629|     24|ABSL_ATTRIBUTE_CONST_FUNCTION constexpr Duration ToUnixDuration(Time t) {
 1630|     24|  return t.rep_;
 1631|     24|}
_ZN4absl12lts_202401164TimeC2Ev:
  780|     24|  constexpr Time() = default;

_ZN4absl12lts_2024011616compare_internal27compare_result_as_less_thanIbTnNSt3__19enable_ifIXsr3std7is_sameIbT_EE5valueEiE4typeELi0EEEbS5_:
  454|    256|constexpr bool compare_result_as_less_than(const BoolT r) { return r; }

_ZN4absl12lts_2024011613span_internal7GetDataIKNSt3__16vectorIiNS3_9allocatorIiEEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|    375|    -> decltype(GetDataImpl(c, 0)) {
   51|    375|  return GetDataImpl(c, 0);
   52|    375|}
_ZN4absl12lts_2024011613span_internal11GetDataImplIKNSt3__16vectorIiNS3_9allocatorIiEEEEEEDTcldtfp_4dataEERT_c:
   38|    375|    -> decltype(c.data()) {
   39|    375|  return c.data();
   40|    375|}
_ZN4absl12lts_2024011613span_internal7GetDataIKNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|    150|    -> decltype(GetDataImpl(c, 0)) {
   51|    150|  return GetDataImpl(c, 0);
   52|    150|}
_ZN4absl12lts_2024011613span_internal11GetDataImplIKNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEEEDTcldtfp_4dataEERT_c:
   38|    150|    -> decltype(c.data()) {
   39|    150|  return c.data();
   40|    150|}
_ZN4absl12lts_2024011613span_internal7GetDataINSt3__15arrayIcLm15000EEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|     72|    -> decltype(GetDataImpl(c, 0)) {
   51|     72|  return GetDataImpl(c, 0);
   52|     72|}
_ZN4absl12lts_2024011613span_internal11GetDataImplINSt3__15arrayIcLm15000EEEEEDTcldtfp_4dataEERT_c:
   38|     72|    -> decltype(c.data()) {
   39|     72|  return c.data();
   40|     72|}
_ZN4absl12lts_2024011613span_internal7GetDataIKNS0_4SpanIcEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|     24|    -> decltype(GetDataImpl(c, 0)) {
   51|     24|  return GetDataImpl(c, 0);
   52|     24|}
_ZN4absl12lts_2024011613span_internal11GetDataImplIKNS0_4SpanIcEEEEDTcldtfp_4dataEERT_c:
   38|     24|    -> decltype(c.data()) {
   39|     24|  return c.data();
   40|     24|}
_ZN4absl12lts_2024011613span_internal7GetDataINS0_13InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS5_EEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|     24|    -> decltype(GetDataImpl(c, 0)) {
   51|     24|  return GetDataImpl(c, 0);
   52|     24|}
_ZN4absl12lts_2024011613span_internal11GetDataImplINS0_13InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS5_EEEEEEDTcldtfp_4dataEERT_c:
   38|     24|    -> decltype(c.data()) {
   39|     24|  return c.data();
   40|     24|}
_ZN4absl12lts_2024011613span_internal7GetDataINS0_4SpanIcEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|     54|    -> decltype(GetDataImpl(c, 0)) {
   51|     54|  return GetDataImpl(c, 0);
   52|     54|}
_ZN4absl12lts_2024011613span_internal11GetDataImplINS0_4SpanIcEEEEDTcldtfp_4dataEERT_c:
   38|     54|    -> decltype(c.data()) {
   39|     54|  return c.data();
   40|     54|}
_ZN4absl12lts_2024011613span_internal7GetDataINSt3__16vectorIPNS0_7LogSinkENS3_9allocatorIS6_EEEEEEDTcl11GetDataImplfp_Li0EEERT_:
   50|     24|    -> decltype(GetDataImpl(c, 0)) {
   51|     24|  return GetDataImpl(c, 0);
   52|     24|}
_ZN4absl12lts_2024011613span_internal11GetDataImplINSt3__16vectorIPNS0_7LogSinkENS3_9allocatorIS6_EEEEEEDTcldtfp_4dataEERT_c:
   38|     24|    -> decltype(c.data()) {
   39|     24|  return c.data();
   40|     24|}

_ZNK4absl12lts_202401164SpanIKcE4dataEv:
  281|    990|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202401164SpanIKcE4sizeEv:
  286|  4.48k|  constexpr size_type size() const noexcept { return len_; }
_ZNK4absl12lts_202401164SpanIKNS0_19str_format_internal13FormatArgImplEE4sizeEv:
  286|     96|  constexpr size_type size() const noexcept { return len_; }
_ZNK4absl12lts_202401164SpanIcE4sizeEv:
  286|  2.94k|  constexpr size_type size() const noexcept { return len_; }
_ZNK4absl12lts_202401164SpanIcE4dataEv:
  281|  2.33k|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202401164SpanIcE7subspanEmm:
  423|    282|  constexpr Span subspan(size_type pos = 0, size_type len = npos) const {
  424|    282|    return (pos <= size())
  ------------------
  |  Branch (424:12): [True: 282, False: 0]
  ------------------
  425|    282|               ? Span(data() + pos, (std::min)(size() - pos, len))
  426|    282|               : (base_internal::ThrowStdOutOfRange("pos > size()"), Span());
  427|    282|  }
_ZN4absl12lts_202401164SpanIKNS0_19str_format_internal13FormatArgImplEEC2IS4_S4_EESt16initializer_listIS3_E:
  273|     24|      : Span(v.begin(), v.size()) {}
_ZN4absl12lts_202401164SpanIKNS0_19str_format_internal13FormatArgImplEEC2EPS4_m:
  193|     24|      : ptr_(array), len_(length) {}
_ZN4absl12lts_202401164SpanIKiEC2INSt3__16vectorIiNS5_9allocatorIiEEEEvS9_iEERKT_:
  217|    375|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202401164SpanIKiEC2EPS2_m:
  193|    375|      : ptr_(array), len_(length) {}
_ZN4absl12lts_202401164SpanIcEC2EPcm:
  193|    516|      : ptr_(array), len_(length) {}
_ZN4absl12lts_202401164SpanIcEC2Ev:
  191|    108|  constexpr Span() noexcept : Span(nullptr, 0) {}
_ZN4absl12lts_202401164SpanIKcEC2Ev:
  191|    252|  constexpr Span() noexcept : Span(nullptr, 0) {}
_ZN4absl12lts_202401164SpanIKcEC2EPS2_m:
  193|    912|      : ptr_(array), len_(length) {}
_ZNK4absl12lts_202401164SpanIKcE5emptyEv:
  296|    690|  constexpr bool empty() const noexcept { return size() == 0; }
_ZN4absl12lts_202401164SpanIcE13remove_prefixEm:
  393|  1.55k|  void remove_prefix(size_type n) noexcept {
  394|  1.55k|    ABSL_HARDENING_ASSERT(size() >= n);
  ------------------
  |  |  128|  1.55k|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|  1.55k|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 1.55k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  395|  1.55k|    ptr_ += n;
  396|  1.55k|    len_ -= n;
  397|  1.55k|  }
_ZN4absl12lts_202401164SpanIKcE13remove_prefixEm:
  393|  1.22k|  void remove_prefix(size_type n) noexcept {
  394|  1.22k|    ABSL_HARDENING_ASSERT(size() >= n);
  ------------------
  |  |  128|  1.22k|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|  1.22k|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 1.22k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  395|  1.22k|    ptr_ += n;
  396|  1.22k|    len_ -= n;
  397|  1.22k|  }
_ZN4absl12lts_202401164SpanIKcEC2INSt3__117basic_string_viewIcNS5_11char_traitsIcEEEEvS9_TnNS5_9enable_ifIXsr6IsViewIT_EE5valueEiE4typeELi0EEERKSB_:
  232|    150|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202401168MakeSpanITpTnRiJENSt3__15arrayIcLm15000EEEEEDTclsr4abslE8MakeSpanclsr13span_internalE7GetDatafp_Ecldtfp_4sizeEEERT0_:
  697|     48|    -> decltype(absl::MakeSpan(span_internal::GetData(c), c.size())) {
  698|     48|  return MakeSpan(span_internal::GetData(c), c.size());
  699|     48|}
_ZN4absl12lts_202401168MakeSpanITpTnRiJEcEENS0_4SpanIT0_EEPS4_m:
  685|     48|constexpr Span<T> MakeSpan(absl::Nullable<T*> ptr, size_t size) noexcept {
  686|     48|  return Span<T>(ptr, size);
  687|     48|}
_ZN4absl12lts_202401164SpanIKcEC2INS1_IcEEvS5_TnNSt3__19enable_ifIXsr6IsViewIT_EE5valueEiE4typeELi0EEERKS8_:
  232|     24|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202401168MakeSpanITpTnRiJENS0_13InlinedVectorIPNS0_7LogSinkELm16ENSt3__19allocatorIS5_EEEEEEDTclsr4abslE8MakeSpanclsr13span_internalE7GetDatafp_Ecldtfp_4sizeEEERT0_:
  697|     24|    -> decltype(absl::MakeSpan(span_internal::GetData(c), c.size())) {
  698|     24|  return MakeSpan(span_internal::GetData(c), c.size());
  699|     24|}
_ZN4absl12lts_202401168MakeSpanITpTnRiJEPNS0_7LogSinkEEENS0_4SpanIT0_EEPS6_m:
  685|     48|constexpr Span<T> MakeSpan(absl::Nullable<T*> ptr, size_t size) noexcept {
  686|     48|  return Span<T>(ptr, size);
  687|     48|}
_ZN4absl12lts_202401164SpanIPNS0_7LogSinkEEC2EPS3_m:
  193|     48|      : ptr_(array), len_(length) {}
_ZN4absl12lts_202401164SpanIcEC2INSt3__15arrayIcLm15000EEEvS6_iEERT_:
  208|     24|      : Span(span_internal::GetData(v), v.size()) {}
_ZN4absl12lts_202401164SpanIcE13remove_suffixEm:
  402|     24|  void remove_suffix(size_type n) noexcept {
  403|     24|    ABSL_HARDENING_ASSERT(size() >= n);
  ------------------
  |  |  128|     24|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|     24|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  404|     24|    len_ -= n;
  405|     24|  }
_ZN4absl12lts_202401164SpanIcEC2IS2_vS2_TnNSt3__19enable_ifIXsr6IsViewIT_EE5valueEiE4typeELi0EEERS6_:
  227|     54|      : Span(span_internal::GetData(v), v.size()) {}
_ZNK4absl12lts_202401164SpanIcEixEm:
  301|  1.29k|  constexpr reference operator[](size_type i) const noexcept {
  302|  1.29k|    return ABSL_HARDENING_ASSERT(i < size()), ptr_[i];
  ------------------
  |  |  128|  1.29k|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|  1.29k|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 1.29k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  303|  1.29k|  }
_ZNK4absl12lts_202401164SpanIKcEixEm:
  301|  1.84k|  constexpr reference operator[](size_type i) const noexcept {
  302|  1.84k|    return ABSL_HARDENING_ASSERT(i < size()), ptr_[i];
  ------------------
  |  |  128|  1.84k|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|  1.84k|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 1.84k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  303|  1.84k|  }
_ZNK4absl12lts_202401164SpanIKcE7subspanEmm:
  423|    408|  constexpr Span subspan(size_type pos = 0, size_type len = npos) const {
  424|    408|    return (pos <= size())
  ------------------
  |  Branch (424:12): [True: 408, False: 0]
  ------------------
  425|    408|               ? Span(data() + pos, (std::min)(size() - pos, len))
  426|    408|               : (base_internal::ThrowStdOutOfRange("pos > size()"), Span());
  427|    408|  }
_ZNK4absl12lts_202401164SpanIKNS0_19str_format_internal13FormatArgImplEEixEm:
  301|     96|  constexpr reference operator[](size_type i) const noexcept {
  302|     96|    return ABSL_HARDENING_ASSERT(i < size()), ptr_[i];
  ------------------
  |  |  128|     96|#define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr)
  |  |  ------------------
  |  |  |  |   95|     96|  (false ? static_cast<void>(expr) : static_cast<void>(0))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (95:4): [Folded, False: 96]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  303|     96|  }
_ZNK4absl12lts_202401164SpanIPNS0_7LogSinkEE5beginEv:
  336|     48|  constexpr iterator begin() const noexcept { return data(); }
_ZNK4absl12lts_202401164SpanIPNS0_7LogSinkEE4dataEv:
  281|     96|  constexpr pointer data() const noexcept { return ptr_; }
_ZNK4absl12lts_202401164SpanIPNS0_7LogSinkEE3endEv:
  349|     48|  constexpr iterator end() const noexcept { return data() + size(); }
_ZNK4absl12lts_202401164SpanIPNS0_7LogSinkEE4sizeEv:
  286|     48|  constexpr size_type size() const noexcept { return len_; }
_ZN4absl12lts_202401168MakeSpanITpTnRiJENSt3__16vectorIPNS0_7LogSinkENS3_9allocatorIS6_EEEEEEDTclsr4abslE8MakeSpanclsr13span_internalE7GetDatafp_Ecldtfp_4sizeEEERT0_:
  697|     24|    -> decltype(absl::MakeSpan(span_internal::GetData(c), c.size())) {
  698|     24|  return MakeSpan(span_internal::GetData(c), c.size());
  699|     24|}

_ZN4absl12lts_2024011616utility_internal15IfConstexprElseILb0EZN6google8protobuf5Arena6CreateINSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEJEEEPT_PS5_DpOT0_EUlDpOT_E_ZNS6_ISD_JEEESF_SG_SJ_EUlSM_E0_JEEEDaOT0_OT1_DpOT2_:
   53|    518|                     Args&&... args) {
   54|    518|  return std::get<condition>(std::forward_as_tuple(
   55|    518|      std::forward<FalseFunc>(false_func), std::forward<TrueFunc>(true_func)))(
   56|    518|      std::forward<Args>(args)...);
   57|    518|}
_ZN4absl12lts_2024011616utility_internal15IfConstexprElseILb1EZN6google8protobuf5Arena6CreateINS4_19FileDescriptorProtoEJEEEPT_PS5_DpOT0_EUlDpOT_E_ZNS6_IS7_JEEES9_SA_SD_EUlSG_E0_JEEEDaOT0_OT1_DpOT2_:
   53|      4|                     Args&&... args) {
   54|      4|  return std::get<condition>(std::forward_as_tuple(
   55|      4|      std::forward<FalseFunc>(false_func), std::forward<TrueFunc>(true_func)))(
   56|      4|      std::forward<Args>(args)...);
   57|      4|}

_ZN4absl12lts_202401167forwardIjEEOT_RNSt3__116remove_referenceIS2_E4typeE:
  149|     72|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     72|  return static_cast<T&&>(t);
  151|     72|}
_ZN4absl12lts_202401167forwardINS0_18container_internal12CommonFieldsEEEOT_RNSt3__116remove_referenceIS4_E4typeE:
  149|    429|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|    429|  return static_cast<T&&>(t);
  151|    429|}
_ZN4absl12lts_202401167forwardINS0_18container_internal6HashEqIPKN6google8protobuf14FileDescriptorEvE4HashEEEOT_RNSt3__116remove_referenceISB_E4typeE:
  149|     39|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     39|  return static_cast<T&&>(t);
  151|     39|}
_ZN4absl12lts_202401167forwardINS0_18container_internal6HashEqIPKN6google8protobuf14FileDescriptorEvE2EqEEEOT_RNSt3__116remove_referenceISB_E4typeE:
  149|     39|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     39|  return static_cast<T&&>(t);
  151|     39|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKPKN6google8protobuf14FileDescriptorENS2_6vectorINS6_14DescriptorPool18DeferredValidation13LifetimesInfoENS3_ISE_EEEEEEEEEEOT_RNS2_16remove_referenceISJ_E4typeE:
  149|     15|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     15|  return static_cast<T&&>(t);
  151|     15|}
_ZN4absl12lts_202401167forwardINS0_18container_internal10StringHashEEEOT_RNSt3__116remove_referenceIS4_E4typeE:
  149|    243|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|    243|  return static_cast<T&&>(t);
  151|    243|}
_ZN4absl12lts_202401167forwardINS0_18container_internal8StringEqEEEOT_RNSt3__116remove_referenceIS4_E4typeE:
  149|    243|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|    243|  return static_cast<T&&>(t);
  151|    243|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_12basic_stringIcNS2_11char_traitsIcEENS3_IcEEEEEEEEOT_RNS2_16remove_referenceISA_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINS0_18container_internal6HashEqIPKN6google8protobuf10DescriptorEvE4HashEEEOT_RNSt3__116remove_referenceISB_E4typeE:
  149|     42|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     42|  return static_cast<T&&>(t);
  151|     42|}
_ZN4absl12lts_202401167forwardINS0_18container_internal6HashEqIPKN6google8protobuf10DescriptorEvE2EqEEEOT_RNSt3__116remove_referenceISB_E4typeE:
  149|     42|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     42|  return static_cast<T&&>(t);
  151|     42|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIPKN6google8protobuf10DescriptorEEEEEOT_RNS2_16remove_referenceISA_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKNS2_12basic_stringIcNS2_11char_traitsIcEENS3_IcEEEEN6google8protobuf10Descriptor13WellKnownTypeEEEEEEEOT_RNS2_16remove_referenceISH_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_120SymbolByFullNameHashEEEOT_RNSt3__116remove_referenceIS6_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_118SymbolByFullNameEqEEEOT_RNSt3__116remove_referenceIS6_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIN6google8protobuf6SymbolEEEEEOT_RNS2_16remove_referenceIS8_E4typeE:
  149|     18|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     18|  return static_cast<T&&>(t);
  151|     18|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_121DescriptorsByNameHashINS3_14FileDescriptorEEEEEOT_RNSt3__116remove_referenceIS8_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_119DescriptorsByNameEqINS3_14FileDescriptorEEEEEOT_RNSt3__116remove_referenceIS8_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIPKN6google8protobuf14FileDescriptorEEEEEOT_RNS2_16remove_referenceISA_E4typeE:
  149|     30|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     30|  return static_cast<T&&>(t);
  151|     30|}
_ZN4absl12lts_202401167forwardIRKNS0_18container_internal19key_compare_adapterINSt3__14lessINS4_4pairIPKN6google8protobuf10DescriptorEiEEEESC_E15checked_compareEEEOT_RNS4_16remove_referenceISI_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIRKNSt3__19allocatorINS2_4pairIKNS4_IPKN6google8protobuf10DescriptorEiEEPKNS6_15FieldDescriptorEEEEEEEOT_RNS2_16remove_referenceISJ_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIPNS0_18container_internal10btree_nodeINS2_10map_paramsINSt3__14pairIPKN6google8protobuf10DescriptorEiEEPKNS8_15FieldDescriptorENS5_4lessISC_EENS5_9allocatorINS6_IKSC_SF_EEEELi256ELb0EEEEEEEOT_RNS5_16remove_referenceISP_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKNS2_12basic_stringIcNS2_11char_traitsIcEENS3_IcEEEENS2_10unique_ptrIN6google8protobuf10FeatureSetENS2_14default_deleteISE_EEEEEEEEEEOT_RNS2_16remove_referenceISK_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_118SymbolByParentHashEEEOT_RNSt3__116remove_referenceIS6_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_116SymbolByParentEqEEEOT_RNSt3__116remove_referenceIS6_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_116ParentNumberHashEEEOT_RNSt3__116remove_referenceIS6_E4typeE:
  149|     36|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     36|  return static_cast<T&&>(t);
  151|     36|}
descriptor.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_114ParentNumberEqEEEOT_RNSt3__116remove_referenceIS6_E4typeE:
  149|     36|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     36|  return static_cast<T&&>(t);
  151|     36|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIPKN6google8protobuf15FieldDescriptorEEEEEOT_RNS2_16remove_referenceISA_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIPKN6google8protobuf19EnumValueDescriptorEEEEEOT_RNS2_16remove_referenceISA_E4typeE:
  149|     24|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     24|  return static_cast<T&&>(t);
  151|     24|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKNS2_12basic_stringIcNS2_11char_traitsIcEENS3_IcEEEEPKN6google8protobuf23SourceCodeInfo_LocationEEEEEEEOT_RNS2_16remove_referenceISI_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKNS2_12basic_stringIcNS2_11char_traitsIcEENS3_IcEEEEbEEEEEEOT_RNS2_16remove_referenceISD_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKPKN6google8protobuf10DescriptorENS6_17DescriptorBuilder12MessageHintsEEEEEEEOT_RNS2_16remove_referenceISF_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_17basic_string_viewIcNS2_11char_traitsIcEEEEEEEEOT_RNS2_16remove_referenceIS9_E4typeE:
  149|    201|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|    201|  return static_cast<T&&>(t);
  151|    201|}
_ZN4absl12lts_202401167forwardINS0_13hash_internal4HashIiEEEEOT_RNSt3__116remove_referenceIS5_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINSt3__18equal_toIiEEEEOT_RNS2_16remove_referenceIS5_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIiEEEEOT_RNS2_16remove_referenceIS5_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINS0_13hash_internal4HashINSt3__16vectorIiNS4_9allocatorIiEEEEEEEEOT_RNS4_16remove_referenceISA_E4typeE:
  149|     24|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     24|  return static_cast<T&&>(t);
  151|     24|}
_ZN4absl12lts_202401167forwardINSt3__18equal_toINS2_6vectorIiNS2_9allocatorIiEEEEEEEEOT_RNS2_16remove_referenceIS9_E4typeE:
  149|     24|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     24|  return static_cast<T&&>(t);
  151|     24|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKNS2_6vectorIiNS3_IiEEEES7_EEEEEEOT_RNS2_16remove_referenceISB_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKNS2_6vectorIiNS3_IiEEEEiEEEEEEOT_RNS2_16remove_referenceISB_E4typeE:
  149|     12|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     12|  return static_cast<T&&>(t);
  151|     12|}
_ZN4absl12lts_202401167forwardIRKNS0_18container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11FileCompareENS7_9FileEntryEE15checked_compareEEEOT_RNSt3__116remove_referenceISE_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIRKNSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryEEEEEOT_RNS2_16remove_referenceISC_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIPNS0_18container_internal10btree_nodeINS2_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex9FileEntryENS8_11FileCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEEOT_RNSB_16remove_referenceISH_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIRKNS0_18container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex13SymbolCompareENS7_11SymbolEntryEE15checked_compareEEEOT_RNSt3__116remove_referenceISE_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIRKNSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryEEEEEOT_RNS2_16remove_referenceISC_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIPNS0_18container_internal10btree_nodeINS2_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex11SymbolEntryENS8_13SymbolCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEEOT_RNSB_16remove_referenceISH_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIRKNS0_18container_internal19key_compare_adapterIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex16ExtensionCompareENS7_14ExtensionEntryEE15checked_compareEEEOT_RNSt3__116remove_referenceISE_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIRKNSt3__19allocatorIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryEEEEEOT_RNS2_16remove_referenceISC_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardIPNS0_18container_internal10btree_nodeINS2_10set_paramsIN6google8protobuf25EncodedDescriptorDatabase15DescriptorIndex14ExtensionEntryENS8_16ExtensionCompareENSt3__19allocatorIS9_EELi256ELb0EEEEEEEOT_RNSB_16remove_referenceISH_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKPKN6google8protobuf10DescriptorEPKNS6_21DynamicMessageFactory8TypeInfoEEEEEEEOT_RNS2_16remove_referenceISH_E4typeE:
  149|     18|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     18|  return static_cast<T&&>(t);
  151|     18|}
extension_set.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf8internal12_GLOBAL__N_115ExtensionHasherEEEOT_RNSt3__116remove_referenceIS7_E4typeE:
  149|      3|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      3|  return static_cast<T&&>(t);
  151|      3|}
extension_set.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf8internal12_GLOBAL__N_111ExtensionEqEEEOT_RNSt3__116remove_referenceIS7_E4typeE:
  149|      3|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      3|  return static_cast<T&&>(t);
  151|      3|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIN6google8protobuf8internal13ExtensionInfoEEEEEOT_RNS2_16remove_referenceIS9_E4typeE:
  149|      3|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      3|  return static_cast<T&&>(t);
  151|      3|}
message.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory20DescriptorByNameHashEEEOT_RNSt3__116remove_referenceIS7_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
message.cc:_ZN4absl12lts_202401167forwardIN6google8protobuf12_GLOBAL__N_123GeneratedMessageFactory18DescriptorByNameEqEEEOT_RNSt3__116remove_referenceIS7_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIPKN6google8protobuf8internal15DescriptorTableEEEEEOT_RNS2_16remove_referenceISB_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
message.cc:_ZN4absl12lts_202401167forwardINSt3__19allocatorINS2_4pairIKPKN6google8protobuf10DescriptorENS6_12_GLOBAL__N_123GeneratedMessageFactory10MessagePtrEEEEEEEOT_RNS2_16remove_referenceISG_E4typeE:
  149|      6|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|      6|  return static_cast<T&&>(t);
  151|      6|}
_ZN4absl12lts_202401167forwardINSt3__19allocatorIPNS0_7LogSinkEEEEEOT_RNS2_16remove_referenceIS7_E4typeE:
  149|     72|    absl::remove_reference_t<T>& t) noexcept {  // NOLINT(runtime/references)
  150|     72|  return static_cast<T&&>(t);
  151|     72|}

expat_example.cc:_ZL17TestOneProtoInputRKN16protobuf_mutator3xml5InputE:
   29|  12.0k|DEFINE_PROTO_FUZZER(const protobuf_mutator::xml::Input& message) {
   30|  12.0k|  std::string xml = MessageToXml(message.document());
   31|  12.0k|  int options = message.options();
   32|       |
   33|  12.0k|  int use_ns = options % 2;
   34|  12.0k|  options /= 2;
   35|  12.0k|  auto enc = kEncodings[options % kEncodings.size()];
   36|  12.0k|  XML_Parser parser =
   37|  12.0k|      use_ns ? XML_ParserCreateNS(enc, '\n') : XML_ParserCreate(enc);
  ------------------
  |  Branch (37:7): [True: 4.76k, False: 7.30k]
  ------------------
   38|  12.0k|  XML_Parse(parser, xml.data(), xml.size(), true);
   39|  12.0k|  XML_ParserFree(parser);
   40|  12.0k|}

_ZN16protobuf_mutator3xml12MessageToXmlERKNS0_8DocumentE:
  122|  12.0k|std::string MessageToXml(const Document& document) {
  123|  12.0k|  XmlWriter writer;
  124|  12.0k|  return writer.ToXml(document);
  125|  12.0k|}
xml_writer.cc:_ZN16protobuf_mutator3xml12_GLOBAL__N_19XmlWriterC2Ev:
   42|  12.0k|XmlWriter::XmlWriter() {}
xml_writer.cc:_ZN16protobuf_mutator3xml12_GLOBAL__N_19XmlWriter5ToXmlERKNS0_8DocumentE:
   99|  12.0k|std::string XmlWriter::ToXml(const Document& doc) {
  100|  12.0k|  out_.str("");
  101|       |
  102|  12.0k|  if (doc.has_version() || doc.has_encoding() || doc.has_standalone()) {
  ------------------
  |  Branch (102:7): [True: 574, False: 11.4k]
  |  Branch (102:28): [True: 8, False: 11.4k]
  |  Branch (102:50): [True: 1, False: 11.4k]
  ------------------
  103|    583|    out_ << "<?xml";
  104|    583|    if (doc.has_version())
  ------------------
  |  Branch (104:9): [True: 574, False: 9]
  ------------------
  105|    574|      ToXml("version", (doc.version().size() == 7) ? "1.0" : doc.version());
  ------------------
  |  Branch (105:24): [True: 1, False: 573]
  ------------------
  106|    583|    if (doc.has_encoding()) ToXml("encoding", doc.encoding());
  ------------------
  |  Branch (106:9): [True: 92, False: 491]
  ------------------
  107|    583|    if (doc.has_standalone())
  ------------------
  |  Branch (107:9): [True: 3, False: 580]
  ------------------
  108|      3|      ToXml("encoding", doc.standalone() ? "yes" : "no");
  ------------------
  |  Branch (108:25): [True: 2, False: 1]
  ------------------
  109|    583|    out_ << "?>";
  110|    583|  }
  111|       |
  112|  12.2k|  for (int i = 0; i < doc.misk1_size(); ++i) ToXml(doc.misk1(i));
  ------------------
  |  Branch (112:19): [True: 180, False: 12.0k]
  ------------------
  113|  12.0k|  if (doc.has_doctype()) ToXml(doc.doctype());
  ------------------
  |  Branch (113:7): [True: 6.63k, False: 5.43k]
  ------------------
  114|  12.0k|  ToXml(doc.element());
  115|  12.3k|  for (int i = 0; i < doc.misk2_size(); ++i) ToXml(doc.misk2(i));
  ------------------
  |  Branch (115:19): [True: 241, False: 12.0k]
  ------------------
  116|       |
  117|  12.0k|  return out_.str();
  118|  12.0k|}
xml_writer.cc:_ZN16protobuf_mutator3xml12_GLOBAL__N_19XmlWriter5ToXmlERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEESB_:
   44|  1.05k|void XmlWriter::ToXml(const std::string& name, const std::string& value) {
   45|  1.05k|  char quote = (name.size() % 2) ? '"' : '\'';
  ------------------
  |  Branch (45:16): [True: 755, False: 297]
  ------------------
   46|  1.05k|  out_ << " " << name << "=" << quote << value << quote;
   47|  1.05k|}
xml_writer.cc:_ZN16protobuf_mutator3xml12_GLOBAL__N_19XmlWriter5ToXmlERKNS0_4MiskE:
   49|    423|void XmlWriter::ToXml(const Misk& misk) {
   50|    423|  if (misk.has_pi()) {
  ------------------
  |  Branch (50:7): [True: 94, False: 329]
  ------------------
   51|     94|    out_ << "<?" << misk.pi().target() << misk.pi().data() << "?>";
   52|     94|  }
   53|       |
   54|    423|  if (misk.has_comment()) {
  ------------------
  |  Branch (54:7): [True: 312, False: 111]
  ------------------
   55|    312|    out_ << "<!--" << misk.comment() << "-->";
   56|    312|  }
   57|    423|}
xml_writer.cc:_ZN16protobuf_mutator3xml12_GLOBAL__N_19XmlWriter5ToXmlERKNS0_11DoctypeDeclE:
   59|  6.63k|void XmlWriter::ToXml(const DoctypeDecl& doctype) {
   60|  6.63k|  out_ << "<!DOCTYPE " << doctype.name();
   61|  6.63k|  if (doctype.has_external_id()) out_ << " " << doctype.external_id();
  ------------------
  |  Branch (61:7): [True: 134, False: 6.50k]
  ------------------
   62|  6.63k|  if (doctype.has_int_subset()) out_ << " [" << doctype.int_subset() << "]";
  ------------------
  |  Branch (62:7): [True: 1.90k, False: 4.72k]
  ------------------
   63|  6.63k|  for (int i = 0; i < doctype.misk_size(); ++i) ToXml(doctype.misk(i));
  ------------------
  |  Branch (63:19): [True: 1, False: 6.63k]
  ------------------
   64|  6.63k|  out_ << ">";
   65|  6.63k|}
xml_writer.cc:_ZN16protobuf_mutator3xml12_GLOBAL__N_19XmlWriter5ToXmlERKNS0_7ElementE:
   79|  12.3k|void XmlWriter::ToXml(const Element& element) {
   80|  12.3k|  std::string tag;
   81|  12.3k|  std::string name;
   82|  12.3k|  tag += element.tag().name();
   83|  12.3k|  out_ << "<" << tag;
   84|       |
   85|  12.7k|  for (int i = 0; i < element.tag().attribute_size(); ++i) {
  ------------------
  |  Branch (85:19): [True: 383, False: 12.3k]
  ------------------
   86|    383|    ToXml(element.tag().attribute(i).name(),
   87|    383|          element.tag().attribute(i).value());
   88|    383|  }
   89|       |
   90|  12.3k|  if (element.content_size() == 0) {
  ------------------
  |  Branch (90:7): [True: 9.13k, False: 3.26k]
  ------------------
   91|  9.13k|    out_ << "/>";
   92|  9.13k|  } else {
   93|  3.26k|    out_ << ">";
   94|  6.81k|    for (int i = 0; i < element.content_size(); ++i) ToXml(element.content(i));
  ------------------
  |  Branch (94:21): [True: 3.55k, False: 3.26k]
  ------------------
   95|  3.26k|    out_ << "</" << tag << ">";
   96|  3.26k|  }
   97|  12.3k|}
xml_writer.cc:_ZN16protobuf_mutator3xml12_GLOBAL__N_19XmlWriter5ToXmlERKNS0_7ContentE:
   67|  3.55k|void XmlWriter::ToXml(const Content& content) {
   68|  3.55k|  if (content.has_char_data()) out_ << content.char_data();
  ------------------
  |  Branch (68:7): [True: 552, False: 3.00k]
  ------------------
   69|  3.55k|  if (content.has_element()) ToXml(content.element());
  ------------------
  |  Branch (69:7): [True: 329, False: 3.22k]
  ------------------
   70|  3.55k|  if (content.has_reference()) {
  ------------------
  |  Branch (70:7): [True: 1, False: 3.55k]
  ------------------
   71|      1|    out_ << (content.reference().entry() ? '&' : '%')
  ------------------
  |  Branch (71:14): [True: 0, False: 1]
  ------------------
   72|      1|         << content.reference().name() << ';';
   73|      1|  }
   74|  3.55k|  if (content.has_cdsect()) out_ << "<![CDATA[" << content.cdsect() << "]]>";
  ------------------
  |  Branch (74:7): [True: 175, False: 3.38k]
  ------------------
   75|       |
   76|  3.55k|  if (content.has_misk()) ToXml(content.misk());
  ------------------
  |  Branch (76:7): [True: 1, False: 3.55k]
  ------------------
   77|  3.55k|}

_ZN16protobuf_mutator17PrepareTextParserERN6google8protobuf10TextFormat6ParserE:
   90|  12.0k|inline void PrepareTextParser(google::protobuf::TextFormat::Parser& parser) {
   91|       |  // commit d8c2501b43c1b56e3efa74048a18f8ce06ba07fe of >=3.8.0 for .SetRecursionLimit
   92|       |  // commit 176f7db11d8242b36a3ea6abb1cc436fca5bf75d of >=3.8.0 for .AllowUnknownField
   93|  12.0k|#if GOOGLE_PROTOBUF_VERSION >= 3008000
   94|  12.0k|  parser.SetRecursionLimit(100);
   95|  12.0k|  parser.AllowUnknownField(true);
   96|  12.0k|#endif
   97|  12.0k|}

_ZN16protobuf_mutator7Mutator4SeedEj:
  622|  12.0k|void Mutator::Seed(uint32_t value) { random_.seed(value); }
_ZN16protobuf_mutator7Mutator3FixEPN6google8protobuf7MessageE:
  624|  12.0k|void Mutator::Fix(Message* message) {
  625|  12.0k|  UnpackedAny any;
  626|  12.0k|  UnpackAny(*message, &any);
  627|       |
  628|  12.0k|  PostProcessing(keep_initialized_, post_processors_, any, &random_)
  629|  12.0k|      .Run(message, kMaxInitializeDepth);
  630|       |  assert(IsInitialized(*message));
  631|  12.0k|}
mutator.cc:_ZN16protobuf_mutator12_GLOBAL__N_19UnpackAnyERKN6google8protobuf7MessageEPNSt3__113unordered_mapIPS4_NS6_10unique_ptrIS3_NS6_14default_deleteIS3_EEEENS6_4hashIS8_EENS6_8equal_toIS8_EENS6_9allocatorINS6_4pairIKS8_SC_EEEEEE:
  399|  49.1k|void UnpackAny(const Message& message, UnpackedAny* result) {
  400|  49.1k|  if (std::unique_ptr<Message> any = UnpackIfAny(message)) {
  ------------------
  |  Branch (400:32): [True: 0, False: 49.1k]
  ------------------
  401|      0|    UnpackAny(*any, result);
  402|      0|    result->emplace(&message, std::move(any));
  403|      0|    return;
  404|      0|  }
  405|       |
  406|  49.1k|  const Descriptor* descriptor = message.GetDescriptor();
  407|  49.1k|  const Reflection* reflection = message.GetReflection();
  408|       |
  409|   231k|  for (int i = 0; i < descriptor->field_count(); ++i) {
  ------------------
  |  Branch (409:19): [True: 182k, False: 49.1k]
  ------------------
  410|   182k|    const FieldDescriptor* field = descriptor->field(i);
  411|   182k|    if (field->cpp_type() == FieldDescriptor::CPPTYPE_MESSAGE) {
  ------------------
  |  Branch (411:9): [True: 98.9k, False: 83.5k]
  ------------------
  412|  98.9k|      if (field->is_repeated()) {
  ------------------
  |  Branch (412:11): [True: 44.6k, False: 54.2k]
  ------------------
  413|  44.6k|        const int field_size = reflection->FieldSize(message, field);
  414|  49.0k|        for (int j = 0; j < field_size; ++j) {
  ------------------
  |  Branch (414:25): [True: 4.36k, False: 44.6k]
  ------------------
  415|  4.36k|          UnpackAny(reflection->GetRepeatedMessage(message, field, j), result);
  416|  4.36k|        }
  417|  54.2k|      } else if (reflection->HasField(message, field)) {
  ------------------
  |  Branch (417:18): [True: 32.7k, False: 21.5k]
  ------------------
  418|  32.7k|        UnpackAny(reflection->GetMessage(message, field), result);
  419|  32.7k|      }
  420|  98.9k|    }
  421|   182k|  }
  422|  49.1k|}
mutator.cc:_ZN16protobuf_mutator12_GLOBAL__N_111UnpackIfAnyERKN6google8protobuf7MessageE:
  394|  49.1k|std::unique_ptr<Message> UnpackIfAny(const Message& message) {
  395|  49.1k|  if (const Any* any = CastToAny(&message)) return UnpackAny(*any);
  ------------------
  |  Branch (395:18): [True: 0, False: 49.1k]
  ------------------
  396|  49.1k|  return {};
  397|  49.1k|}
mutator.cc:_ZN16protobuf_mutator12_GLOBAL__N_19CastToAnyEPKN6google8protobuf7MessageE:
  382|  49.1k|const Any* CastToAny(const Message* message) {
  383|  49.1k|  return Any::descriptor() == message->GetDescriptor()
  ------------------
  |  Branch (383:10): [True: 0, False: 49.1k]
  ------------------
  384|  49.1k|             ? protobuf::DownCastMessage<Any>(message)
  385|  49.1k|             : nullptr;
  386|  49.1k|}
mutator.cc:_ZN16protobuf_mutator12_GLOBAL__N_114PostProcessingC2EbRKNSt3__118unordered_multimapIPKN6google8protobuf10DescriptorENS2_8functionIFvPNS5_7MessageEjEEENS2_4hashIS8_EENS2_8equal_toIS8_EENS2_9allocatorINS2_4pairIKS8_SD_EEEEEERKNS2_13unordered_mapIPKSA_NS2_10unique_ptrISA_NS2_14default_deleteISA_EEEENSE_ISS_EENSG_ISS_EENSI_INSJ_IKSS_SW_EEEEEEPNS2_26linear_congruential_engineImLm48271ELm0ELm2147483647EEE:
  431|  12.0k|      : keep_initialized_(keep_initialized),
  432|  12.0k|        post_processors_(post_processors),
  433|  12.0k|        any_(any),
  434|  12.0k|        random_(random) {}
mutator.cc:_ZN16protobuf_mutator12_GLOBAL__N_114PostProcessing3RunEPN6google8protobuf7MessageEi:
  436|  49.1k|  void Run(Message* message, int max_depth) {
  437|  49.1k|    --max_depth;
  438|  49.1k|    const Descriptor* descriptor = message->GetDescriptor();
  439|       |
  440|       |    // Apply custom mutators in nested messages before packing any.
  441|  49.1k|    const Reflection* reflection = message->GetReflection();
  442|   231k|    for (int i = 0; i < descriptor->field_count(); i++) {
  ------------------
  |  Branch (442:21): [True: 182k, False: 49.1k]
  ------------------
  443|   182k|      const FieldDescriptor* field = descriptor->field(i);
  444|   182k|      if (keep_initialized_ &&
  ------------------
  |  Branch (444:11): [True: 182k, False: 0]
  ------------------
  445|   182k|          (field->is_required() || descriptor->options().map_entry()) &&
  ------------------
  |  Branch (445:12): [True: 0, False: 182k]
  |  Branch (445:36): [True: 0, False: 182k]
  ------------------
  446|      0|          !reflection->HasField(*message, field)) {
  ------------------
  |  Branch (446:11): [True: 0, False: 0]
  ------------------
  447|      0|        CreateDefaultField()(FieldInstance(message, field));
  448|      0|      }
  449|       |
  450|   182k|      if (field->cpp_type() != FieldDescriptor::CPPTYPE_MESSAGE) continue;
  ------------------
  |  Branch (450:11): [True: 83.5k, False: 98.9k]
  ------------------
  451|       |
  452|  98.9k|      if (max_depth < 0 && !field->is_required()) {
  ------------------
  |  Branch (452:11): [True: 0, False: 98.9k]
  |  Branch (452:28): [True: 0, False: 0]
  ------------------
  453|       |        // Clear deep optional fields to avoid stack overflow.
  454|      0|        reflection->ClearField(message, field);
  455|      0|        if (field->is_repeated())
  ------------------
  |  Branch (455:13): [True: 0, False: 0]
  ------------------
  456|      0|          assert(!reflection->FieldSize(*message, field));
  457|      0|        else
  458|      0|          assert(!reflection->HasField(*message, field));
  459|      0|        continue;
  460|      0|      }
  461|       |
  462|  98.9k|      if (field->is_repeated()) {
  ------------------
  |  Branch (462:11): [True: 44.6k, False: 54.2k]
  ------------------
  463|  44.6k|        const int field_size = reflection->FieldSize(*message, field);
  464|  49.0k|        for (int j = 0; j < field_size; ++j) {
  ------------------
  |  Branch (464:25): [True: 4.36k, False: 44.6k]
  ------------------
  465|  4.36k|          Message* nested_message =
  466|  4.36k|              reflection->MutableRepeatedMessage(message, field, j);
  467|  4.36k|          Run(nested_message, max_depth);
  468|  4.36k|        }
  469|  54.2k|      } else if (reflection->HasField(*message, field)) {
  ------------------
  |  Branch (469:18): [True: 32.7k, False: 21.5k]
  ------------------
  470|  32.7k|        Message* nested_message = reflection->MutableMessage(message, field);
  471|  32.7k|        Run(nested_message, max_depth);
  472|  32.7k|      }
  473|  98.9k|    }
  474|       |
  475|  49.1k|    if (Any* any = CastToAny(message)) {
  ------------------
  |  Branch (475:14): [True: 0, False: 49.1k]
  ------------------
  476|      0|      if (max_depth < 0) {
  ------------------
  |  Branch (476:11): [True: 0, False: 0]
  ------------------
  477|       |        // Clear deep Any fields to avoid stack overflow.
  478|      0|        any->Clear();
  479|      0|      } else {
  480|      0|        auto It = any_.find(message);
  481|      0|        if (It != any_.end()) {
  ------------------
  |  Branch (481:13): [True: 0, False: 0]
  ------------------
  482|      0|          Run(It->second.get(), max_depth);
  483|      0|          std::string value;
  484|      0|          It->second->SerializePartialToString(&value);
  485|      0|          *any->mutable_value() = std::move(value);
  486|      0|        }
  487|      0|      }
  488|      0|    }
  489|       |
  490|       |    // Call user callback after message trimmed, initialized and packed.
  491|  49.1k|    auto range = post_processors_.equal_range(descriptor);
  492|  49.1k|    for (auto it = range.first; it != range.second; ++it)
  ------------------
  |  Branch (492:33): [True: 0, False: 49.1k]
  ------------------
  493|      0|      it->second(message, (*random_)());
  494|  49.1k|  }
mutator.cc:_ZN16protobuf_mutator12_GLOBAL__N_19CastToAnyEPN6google8protobuf7MessageE:
  388|  49.1k|Any* CastToAny(Message* message) {
  389|  49.1k|  return Any::descriptor() == message->GetDescriptor()
  ------------------
  |  Branch (389:10): [True: 0, False: 49.1k]
  ------------------
  390|  49.1k|             ? protobuf::DownCastMessage<Any>(message)
  391|  49.1k|             : nullptr;
  392|  49.1k|}

_ZN16protobuf_mutator7MutatorC2Ev:
   48|      1|  Mutator() = default;
_ZN16protobuf_mutator7MutatorD2Ev:
   49|      1|  virtual ~Mutator() = default;

_ZN16protobuf_mutator16ParseTextMessageEPKhmPN6google8protobuf7MessageE:
   24|  12.0k|bool ParseTextMessage(const uint8_t* data, size_t size, Message* output) {
   25|  12.0k|  return ParseTextMessage({reinterpret_cast<const char*>(data), size}, output);
   26|  12.0k|}
_ZN16protobuf_mutator16ParseTextMessageERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEPN6google8protobuf7MessageE:
   28|  12.0k|bool ParseTextMessage(const std::string& data, protobuf::Message* output) {
   29|  12.0k|  output->Clear();
   30|  12.0k|  TextFormat::Parser parser;
   31|  12.0k|  parser.AllowPartialMessage(true);
   32|  12.0k|  PrepareTextParser(parser);
   33|  12.0k|  if (!parser.ParseFromString(data, output)) {
  ------------------
  |  Branch (33:7): [True: 12, False: 12.0k]
  ------------------
   34|     12|    output->Clear();
   35|     12|    return false;
   36|     12|  }
   37|  12.0k|  return true;
   38|  12.0k|}

